用python自行开发的流星监控系统meteor_monitor(第一篇)

代码:

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 · GitHub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/173736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【解决方案】安科瑞智能照明系统在福建二建大厦项目上的研究与应用

【摘要】:智能化已经成为当今建筑发展的主流技术、涵盖从空调系统、消防系统到安全防范系统以及完善的计算机网络和通信系统。但是长期以来、智能照明在国内一直被忽视、大多数建筑物仍然沿用传统的照明控制方式、部分智能大厦采用楼宇自控(BA&#xff0…

Java 8新特性Optional的使用以及判空案例

Java 8新特性:Optional的使用及判空案例 在Java 8中,引入了一个重要的类Optional,它是为了解决空指针异常(NullPointerException)而设计的。Optional可以作为一个容器,可以包含一个非空的值或者为空。 Opti…

锂电池污水如何处理

锂电池是目前应用广泛的重要电池类型,然而其生产过程和废弃处理中产生的污水对环境造成了不可忽视的影响。本文将探讨锂电池污水的处理方法,以期为环境保护和可持续发展作出贡献。 首先,了解锂电池污水的组成是解决问题的关键。锂电池污水通…

防雷接地电阻和接地网的区别及其应用

接地是电气工程中的一种重要的安全措施,它可以保护电气设备和人员免受雷击和过电压的危害,也可以提高电气系统的运行稳定性和可靠性。接地的基本原理是将电气设备或人体与大地连接成同一电位,从而消除或减小危险电压。 地凯科技接地的实现方式…

PHP 针对人大金仓KingbaseES自动生成数据字典

针对国产数据库 人大金仓KingbaseES 其实php 连接采用pdo方式 必须&#xff1a;需要去人大数据金仓官方网站 下载对应版本的pdo_kdb 扩展驱动 其连接方法与pgsql 数据库连接方法大致相同 不解释 直接上代码&#xff1a; <?php /*** 生成人大金仓数据字典*/ header(…

【Android知识笔记】性能优化专题(五)

App瘦身优化 随着业务迭代,apk体积逐渐变大。项目中积累的无用资源,未压缩的图片资源等,都为apk带来了不必要的体积增加。而APK 的大小会影响应用加载速度、使用的内存量以及消耗的电量。 瘦身优势: 最主要是转换率:下载转换率头部 App 都有 Lite 版渠道合作商要求了解 …

上海亚商投顾:北证50指数大涨 逾百只北交所个股涨超10%

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指11月24日震荡调整&#xff0c;深成指、创业板指盘中跌超1%。北证50指数大涨超6%&#xff0c;北交所个股持…

BGP路由的选路综合实验

题目要求 1.使用PreVal策略&#xff0c;确保R1通过R3到达192.168.10.0/24 2.使用AS_Path策略&#xff0c;确保R1通过R3到达192.168.11.0/24 3.配置MED策略&#xff0c;确保R1通过R3到达192.168.12.0/24 4.使用Local Preference策略&#xff0c;确保R4通过R2到达192.168.1.0/24…

git-2

1.分离头指针情况下的注意事项 分离头指针指的是变更没有基于某个branch去做&#xff0c;所以当进行分支切换的时候&#xff0c;在分离头指针上产生的commit&#xff0c;很可能会被git当作垃圾清理掉&#xff0c;如果你认为是重要的内容&#xff0c;切记需要绑定分支 2.进一步…

2023机器人灵巧手的分类与商业化应用及未来市场规模分析报告

今天分享的是机器人系列深度研究报告&#xff1a;《2023机器人灵巧手的分类与商业化应用及未来市场规模分析报告》。 &#xff08;报告出品方&#xff1a;深度行业分析研究&#xff09; 报告共计&#xff1a;26页 1 灵巧手是人形机器人重要的运控交互部件&#xff0c;近年来海…

MyBatis-Plus条件构造器

说明 Wrapper&#xff1a;条件构造抽象类&#xff0c;最顶端父类AbstractWrapper&#xff1a;用于查询条件封装&#xff0c;生成sql的where条件QueryWrapper&#xff1a;查询条件封装UpdateWrapper&#xff1a;更新条件封装AbstractLambdaWrapper&#xff1a;使用Lambda语法La…

Sass中如何使用选择器继承来精简CSS详细教程

文章目录 前言使用选择器继承来精简CSS何时使用继承继承的高级用法继承的工作细节使用继承的最佳实践后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Sass和Less &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握…

和鲸ModelWhale平台与海光人工智能加速卡系列完成适配认证,夯实 AI 应用核心底座

AIGC 浪潮席卷&#xff0c;以大模型为代表的人工智能发展呈现出技术创新快、应用渗透强、国际竞争激烈等特点。创新为本&#xff0c;落地为王&#xff0c;技术的快速发展与大规模训练需求的背后&#xff0c;是对平台化基础设施与 AI 算力的更高要求。在此全球 AI 产业竞争的风口…

BI报表用多了,就再看不了其他报表

BI报表有魔力&#xff0c;一旦用多了&#xff0c;就再也接受不了其他的报表。为什么&#xff1f;我这就来总结说说。 1、分析的效率 一般报表&#xff1a;要做报表&#xff0c;先找IT取数&#xff0c;然后开发&#xff0c;分析过程中有新需求&#xff0c;不好意思&#xff0c…

六道经典的选择结构题型

1. 判断一个数是奇数还是偶数 #include <stdio.h> int main() { int num; printf("请输入一个整数&#xff1a;"); scanf("%d", &num); if (num % 2 0) { printf("%d是偶数\n", num); } else { …

Vue组件库推荐:Element UI深度解析

在Vue开发中&#xff0c;使用组件库可以极大地提高开发效率&#xff0c;减少重复工作量。Element UI作为一款优秀的Vue组件库&#xff0c;被广泛应用于各类项目中。本文将对Element UI进行深度解析&#xff0c;为开发者提供详细的使用说明和具体的代码示例。 1&#xff0c;Ele…

fatal: refusing to merge unrelated histories報錯咋辦

在 Git 中&#xff0c;如果要合并两个分支&#xff0c;而这两个分支的历史记录不相交&#xff0c;就会出现错误&#xff1a;fatal: refusing to merge unrelated histories。 要解决这个问题&#xff0c;有以下几种方法&#xff1a; 首先&#xff0c;检查一下你正在合并的两个…

网络篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、说一下HTTP的长连接与短连接的区别二、TCP 为什么要三次握手,两次不行吗?为什么?三、说一下 TCP 粘包是怎么产生的?怎么解决粘包问题的?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大…

GNSS接收机 高精度GNSS接收机 4GGNSS接收机

GNSS接收机TN521 ★多频多系统个高精度定位&#xff0c;支持GPS L1/L2&#xff0c;BD B1/B2&#xff0c;支持北斗三代 ★外置GNSS、4G天线 ★平面精度2.5mm 1ppm RMS&#xff0c;高程精度511ppm RMS ★监测终端内嵌工业级智能平台 ★支持4G全网通、全面支持移动/联通/电信…

Python编写的爬虫:为什么受到如此的欢迎?

目录 一、引言 二、Python爬虫受欢迎的原因 1、语言简洁易读 2、强大的数据处理能力 3、丰富的网络爬虫库 4、跨平台性 5、社区支持与资源丰富 三、Python爬虫应用案例 四、总结 一、引言 在当今的大数据时代&#xff0c;信息获取和数据处理能力对于企业和个人来说至…