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

相关文章
|
3天前
|
存储 数据库连接 API
Python环境变量在开发和运行Python应用程序时起着重要的作用
Python环境变量在开发和运行Python应用程序时起着重要的作用
35 15
|
30天前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
【10月更文挑战第12天】本文探讨了Python开发中性能优化和代码审查的重要性,介绍了选择合适数据结构、使用生成器、避免全局变量等性能优化技巧,以及遵守编码规范、使用静态代码分析工具、编写单元测试等代码审查方法,旨在帮助开发者提升开发效率和代码质量。
33 5
|
1月前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
【10月更文挑战第6天】本文探讨了性能优化和代码审查在Python开发中的重要性,提供了选择合适数据结构、使用生成器、避免全局变量等性能优化技巧,以及遵守编码规范、使用静态代码分析工具、编写单元测试等代码审查方法,旨在帮助开发者提升开发效率和代码质量。
53 5
|
15天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
101 44
|
10天前
|
JSON 安全 API
如何使用Python开发API接口?
在现代软件开发中,API(应用程序编程接口)用于不同软件组件之间的通信和数据交换,实现系统互操作性。Python因其简单易用和强大功能,成为开发API的热门选择。本文详细介绍了Python开发API的基础知识、优势、实现方式(如Flask和Django框架)、实战示例及注意事项,帮助读者掌握高效、安全的API开发技巧。
36 3
如何使用Python开发API接口?
|
3天前
|
JSON API 数据格式
如何使用Python开发1688商品详情API接口?
本文介绍了如何使用Python开发1688商品详情API接口,获取商品的标题、价格、销量和评价等详细信息。主要内容包括注册1688开放平台账号、安装必要Python模块、了解API接口、生成签名、编写Python代码、解析返回数据以及错误处理和日志记录。通过这些步骤,开发者可以轻松地集成1688商品数据到自己的应用中。
16 1
|
9天前
|
数据采集 存储 JSON
Python爬虫开发中的分析与方案制定
Python爬虫开发中的分析与方案制定
|
16天前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
59 7
|
18天前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
探讨了Python开发中性能优化和代码审查的重要性,介绍了选择合适数据结构、使用生成器、避免全局变量等性能优化技巧,以及遵守编码规范、使用静态代码分析工具、编写单元测试等代码审查方法,旨在帮助开发者提升开发效率和代码质量。
38 8
|
14天前
|
算法 测试技术 开发者
性能优化与代码审查:提升Python开发效率
性能优化与代码审查:提升Python开发效率
27 1