python自研流星监控系统meteor_monitor(第一篇)

简介: 本文介绍了作者开发的一个Python流星监控系统,替代了性能不佳且收费的ufocapturehd2软件。系统采用Win10相机应用低耗录制视频,通过SikuliX进行自动化控制,分段录制并存储到本地,然后通过脚本同步到NAS。视频分析使用帧差法检测流星,支持分布式分析。代码已更新,旧文章不再适用,最新内容可见:[用python自行开发的流星监控系统meteor_monitor(第二篇)-CSDN博客](https://github.com/xingxinghuo1000/meteor_monitor_scripts.git)。

代码:


https://github.com/xingxinghuo1000/meteor_monitor_scripts.git


由于代码做了较大调整,废弃了sikuli部分。本篇文章为旧的,不要看了,最新文章请看:


用python自行开发的流星监控系统meteor_monitor(第二篇)-CSDN博客


背景

著名的流星监控软件ufocapturehd2有几个缺陷,不能忍


1、吃性能,我的工控电脑2.4GHz的4核心CPU,发现流星后,录制出来的视频,会严重丢帧


2、收费。还相当的贵。大概700多元? 用破解版当然也可以,这里不推荐


调研过程

1、解决如何录制的问题


我发现win10自身的相机app,可以以非常低的cpu消耗,录制720p,50fps的视频,非常流畅。如果能够写个脚本。离线分析录制出来的mp4文件,把录制和分析解耦,就整体搞定了性能的问题。


调研过其他几个软件,都不如win10自带的app好用


2、如何自动化录制视频,并分段


视频必须得分段,如果不分段,录制一个晚上,一个视频文件40GB,中途如果不小心断电了,整个晚上录制的文件,就变得不可读,这是不能接受的


曾经尝试过,使用pywinauto库,做自动化,发现相机这个app,没有具体按钮的句柄,spyxx工具无法探查出来。


那就上万能工具sikuliX吧,这个工具是使用模式识别方式,点击按钮,不论这个按钮在屏幕哪里,只要匹配到了,就能点。

参考资料: sikulix自动化测试 - 简书


3、如何存储视频


首先为了节省cpu消耗,必须保存到本地硬盘中。但工控的本地硬盘,一般不会很大


所以视频可以通过一个脚本,定时同步到nfs上,或者samba服务中,


这样就解决了性能和容量的两难问题


同步脚本和录制时间,需要一个标记,来表示为视频录制已完成,这里采用了大数据里常用的.done文件。每一个mp4文件,都对应一个.done文件,没有.done文件,就代表没有录制完


4、离线分析


由于视频存储在了nas中(可能是nfs或者samba)。分析端,可以是多机共同参与的,即分布式分析。这样可以提升分析的效率,尽早拿到结果


需要对视频做一个文件锁的功能,防止多机冲突。


每一个mp4。都对应一个.lock文件,如果发现了.lock文件锁,则看看里面的内容,是不是自己锁定的,如果是,就处理,如果是其他机器锁定的,则跳过这个文件


分析思路:使用帧差法,通过python+opencv来实现这个算法,不算难


参考资料:python+opencv实现移动侦测(帧差法) - 杰晶网络,每天都更新的互联网资源网! 更新日期:2022/6/15


part1-视频自动录制部分

先上代码


具体代码如下: https://github.com/xingxinghuo1000/meteor_monitor_scripts/tree/master/sikuli_open_camera.sikuli


如何使用:


1、把相机的应用,固定到任务栏,必须的,否则sikuli没法启动相机


2、安装JDK,下载sikuliX的jar包,放在D盘根目录


3、仅支持windows,双击start_camera_record_by_sikuli.bat文件,即可运行


开发过程和踩坑记录


1、先做最小的Demo,实现点击录制按钮,和停止录制的按钮


2、再做基本的控制,比如启动相机app,关闭相机app。 启动相机,无法通过cmd命令启动(python中是 os.popen方式执行cmd),必须通过点击任务栏按钮才行。不知道为什么,如果有大神知道,可以告知


3、判断何时开始录制,何时停止录制,这需要获取当地的日出和日落时间,我写了一个比较简单的实现,直接写死在代码里,如果您有需要,可以修改代码,修改为您当地的时间,然后再运行


4、稳定性:对于停止按钮和录制按钮的判断,sikulix支持设置阈值,调整了一下,才准确搞定。按照默认的参数,会有误判,非常坑人


5、调整参数,比如视频分段的时间间隔,多久停止一下,再重新录制。我设置的是200多秒。不要太长,免得保存视频时造成卡顿


效果

进程常驻内存,定时判断时间,是否该录制视频。每隔一段时间,自动停止录制,再开始录制


part2-视频定时同步功能

脚本代码:https://github.com/xingxinghuo1000/meteor_monitor_scripts/tree/master/video_sync


执行过程:


1、扫描目标目录,视频是否已超过100GB,如果超过则删除老的文件,


2、轮训查看源视频目录,找出所有mp4文件


3、检查mp4文件是否有对应的.done文件,


4、如果有则复制到目标目录,复制完,在目标目录写入.done文件,同时删除源目录的视频文件


5、不断循环


注意:


为了防止网络问题,对于传输了一半的文件,删掉重新同步


如果出了网络问题,程序会进入exception逻辑,sleep一段时间后重试


会不会出现传输了一半的文件,被下游处理呢?


答:不会,没有.done文件,下游是不会处理这个视频文件的


后续可以扩展的地方


1、目标路径,可以是一个ftp地址,


不过这次,没有支持这个功能,没太大必要。大多数windows都支持samba服务,直接挂载到本地,作为本地路径使用即可


part3-离线分析脚本

代码:meteor_monitor_scripts/detect_meteor at master · xingxinghuo1000/meteor_monitor_scripts · Git

相关文章
|
18天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的大学竞赛报名管理系统
基于Python+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
33 3
基于Python+Vue开发的大学竞赛报名管理系统
|
23天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的摄影网上预约管理系统
基于Python+Vue开发的摄影网上预约管理系统(前后端分离),影楼婚纱摄影,这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的在线摄影预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
22 6
基于Python+Vue开发的摄影网上预约管理系统
|
23天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的新闻管理系统
这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的新闻管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
20 4
基于Python+Vue开发的新闻管理系统
|
24天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的房产销售管理系统
基于Python+Vue开发的房产销售管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的房产销售管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
22 4
基于Python+Vue开发的房产销售管理系统
|
24天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的美容预约管理系统
基于Python+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的美容诊所预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
21 3
基于Python+Vue开发的美容预约管理系统
|
5天前
|
Linux Android开发 iOS开发
开源的Python库,用于开发多点触控应用程序
Kivy是一款开源Python库,专为开发多点触控应用设计,支持Android、iOS、Linux、OS X和Windows等平台。本文将指导你使用Kivy创建“Hello World”应用并打包成Android APK。首先通过`pip install kivy`安装Kivy,然后创建并运行一个简单的Python脚本。接着,安装Buildozer并通过`buildozer init`生成配置文件,修改相关设置后,运行`buildozer -v android debug`命令打包应用。完成构建后,你将在`./bin/`目录下找到类似`your-app-debug.apk`的文件。
12 2
|
10天前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
在Web开发中,安全至关重要,尤其要警惕SQL注入和XSS攻击。SQL注入通过在数据库查询中插入恶意代码来窃取或篡改数据,而XSS攻击则通过注入恶意脚本来窃取用户敏感信息。本文将带你深入了解这两种威胁,并提供Python实战技巧,包括使用参数化查询和ORM框架防御SQL注入,以及利用模板引擎自动转义和内容安全策略(CSP)防范XSS攻击。通过掌握这些方法,你将能够更加自信地应对Web安全挑战,确保应用程序的安全性。
39 3
|
17天前
|
IDE 数据挖掘 开发工具
python开发
python开发
13 3
|
20天前
|
SQL JavaScript 前端开发
用Java、Python来开发Hive应用
用Java、Python来开发Hive应用
22 6
|
21天前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的商城管理系统
是基于Python+Vue开发的商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的网上商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
29 5
下一篇
无影云桌面