手搓了个海康威视监控巡检工具,连AI都夸我会偷懒
手搓了个海康威视监控巡检工具,连AI都夸我会偷懒
最近手头的监控项目稍微有点多,几十个摄像头盯着还好办,一旦上了量,比如几百路视频流,想知道哪个画面黑了、哪根网线松了,简直让人头秃。
市面上的商用的管理平台软件虽然强大,但要么贵得离谱,要么配置繁琐,还要专门的服务器跑。既然搞技术的,这就不能忍,必须得“造轮子”。
今天给大伙分享个我刚折腾出来的小工具——海康威视摄像头在线巡查工具。全程我用AI辅助开发,主打就是“我不写代码,我只是代码的搬运工”。
为什么需要这玩意儿?
大家做运维或者弱电工程的肯定遇到过,NVR(网络硬盘录像机)挂载了几百个摄像头,平时好好的,突然有一天老板跑来说“3号楼大堂没画面了”。
这时候你得打开NVR的Web界面,一页一页翻,几十页翻下来眼睛都瞎了,最后发现是那个摄像头掉线了。
痛点就三个:
- 被动发现:坏了才知道,没人盯着屏幕根本不知道。
- 排查效率低:几百个通道,手动看看到底谁离线太浪费时间。
- 误报漏报:有的只是取流失败,有的则是断网,没法区分。
这款工具就是为了解决前两个问题设计的,主打一个实时监控、自动报警。
核心功能有哪些?
别看工具不大,五脏还挺全。目前主要针对海康威视的NVR(录像机),但是如果你录像机下面挂了其他牌子(比如大华),只要录像机能识别到,它也能扫出来。
工具运行界面,展示摄像头列表与 OSD 名称自动读取功能
具体有这么几个亮点:
1. 自动发现与命名
根本不用手动一个个输入IP。只要你在后台把NVR的账号密码填好,工具就能自动连接录像机,把下面挂着的所有摄像头通道全读出来。
更爽的是,它能自动读取摄像头的OSD(屏幕显示名称),这样弹窗报警的时候,你看到的是“北门入口”而不是“192.168.1.108”,非常人性化。
2. 实时状态弹窗
工具会在后台静默运行。一旦检测到某个摄像头从在线变成离线,或者反过来重连成功了,你的电脑右下角会直接弹出一个Windows系统的通知气泡。
程序缩藏在右下角托盘,静默运行并实时监控
这就相当于给每个摄像头配了个小秘书,掉线了马上喊你。
3. 新增设备自动录入
有时候工程多了,NVR里会增加新摄像头。这工具支持自动扫描新增的设备,不用你重新配置,主打自动化。
4. 后台静默运行(C# 助攻)
原生的Python脚本跑起来总有个黑框框看着烦,还容易被手贱关掉。这版本的更新点在于:外包了一层C#写的壳子。
点击 NvrMonitor.exe 启动后,程序界面会自动隐藏,只缩在右下角的托盘里。想看的时候点开图标,不想看就让它默默干活。
技术实现与调优心得
既然是“基于AI开发”,那就得聊聊怎么调教AI写代码的,以及中间踩的坑。
环境配置避坑指南
- Python版本:虽然现在是Python 3.12+的时代,但我本地测试环境是 Python 3.13.7,运行非常稳定。如果你用老版本(比如3.8、3.9),可能会遇到依赖库不兼容的问题。
- 虚拟环境:为了防止污染系统环境,工具里带了
.venv虚拟环境文件夹。重点来了:下载解压后,建议先把.venv文件夹删了,然后重新运行启动脚本让它自动重建依赖。这样能避免很多莫名其妙的“Import Error”或DLL加载失败的问题。
Python + C# 混合开发的妙用
起初我只是用Python写了核心的逻辑(连接海康威视SDK、轮询通道状态)。Python写这个确实快,几行代码就能调通接口(NET_DVR_FindDVR、NET_DVR_Login 之类的API大家应该很熟)。
但是有个痛点:怎么让它像一个正规软件一样躲在托盘里?
Python虽然有PyQt可以写界面,但为了写个托盘图标引入Qt库,打包出来的安装包体积会爆炸。这时候我就想到了C#。
我用AI生成了一个简单的C# WinForms/WPF程序,专门负责启动Python进程,并把主窗口隐藏掉,只显示 NotifyIcon。这样既保留了Python在爬虫和网络协议方面的开发速度,又利用了C#在Windows桌面交互上的原生优势。
海康威视 SDK 的对接细节
对于海康威视NVR,我们其实不需要去解码视频流(太占CPU了),只需要调用SDK里的“设备状态获取”接口。
需要注意的点是:
- 心跳检测:NVR和工具之间要保持长连接,或者每隔几秒发个心跳,否则NVR可能会把工具的连接当成异常断开。
- 通道扫描间隔:如果你把300个摄像头轮询一遍间隔太短(比如1秒),可能会导致NVR负载过高甚至拒绝服务。我在代码里做了优化,设定了一个合理的扫描频率,平衡了实时性和服务器压力。
那些被AI修好的Bug
开发过程中,AI帮我解决了一个很有意思的问题:内存泄漏。
最初版跑几个小时后,内存占用能涨到好几个G。后来发现是Python在循环调用SDK时,没有正确释放C++层的指针资源。我把报错丢给AI,它很快就定位到是 ctypes 调用时少了 windll.kernel32.LocalFree 之类的释放操作。改完后,跑一周内存占用都很稳。
部署与使用教程(保姆级)
别看说了这么多原理,用起来其实很简单,这就叫“降维打击”。
1. 准备工作
- 一台Windows 10/11 的电脑(服务器也行)。
- 确保这台电脑能 Ping 通你的海康威视NVR。
2. 启动步骤
- 下载工具包解压。
- 关键一步:删除目录下的
.venv文件夹(如果有的话)。 - 双击运行启动脚本(可能是
start.bat或者直接运行NvrMonitor.exe,视打包版本而定)。 - 首次运行会自动安装Python依赖,稍微等几十秒。
- 启动成功后,看右下角托盘区,会出现一个小图标。
3. 添加录像机
- 右键托盘图标,选择“管理”或打开Web配置页面(具体看工具UI)。
- 输入NVR的IP地址、端口(默认8000)、用户名、密码。
- 点击保存,程序会自动开始握手并拉取摄像头列表。
4. 测试效果
- 拔掉任意一个摄像头的网线,观察电脑右下角是否弹出“xx摄像头离线”的提示。
- 插回网线,观察是否提示“恢复在线”。
FAQ(常见问题解决)
Q: 提示找不到模块或DLL加载失败怎么办?
A: 按照前面的步骤,删除 .venv 文件夹后重启。如果还不行,检查是否安装了VC++运行库(大部分电脑都有,但精简版系统可能缺)。另外,确保不要放在中文路径下(比如“新建文件夹”),尽量放在D盘根目录这种简单路径里。
Q: 支持海康摄像头吗?为什么强调只支持NVR? A: 是的,重点是连接海康威视录像机(NVR)。工具的逻辑是登录录像机,读取录像机里的通道列表。如果你的摄像头是直连IP不经过录像机,或者用的是其他品牌的录像机(比如大华NVR),目前的版本可能识别不了。
Q: 能检测具体的离线原因吗? A: 目前只能给出“在线/离线”的状态二选一。至于是因为网断了、IP冲突了还是供电不足,工具暂时读不到这么底层的日志,只能去NVR原厂后台查。
Q: 为什么文件很大? A: 毕竟里面内置了Python环境和海康威视的SDK库,精简空间有限。不过为了免环境配置的痛苦,这点硬盘空间还是值得牺牲的。
写在最后
这个工具虽然是用AI“拼凑”出来的,但实测在300路摄像头的环境下跑了很久,稳定性还不错。对于不愿意花大钱买CMS软件,又想通过手机/电脑远程掌握监控状态的兄弟来说,是个不错的薅羊毛方案。
代码逻辑不复杂,懂点Python的还能自己二次开发,比如把弹窗改成钉钉/企业微信的Webhook报警,那就更香了。
如果你也有类似的小需求,不妨试着让AI帮你写个轮子,真的能省不少头发。
评论已关闭