Python实现摄像头状态巡检

这个需求是怎么来的呢?笔者看到部门同事要经常检查监控摄像头是不是正常工作,需要登录一个个主机来检测画面是不是偏了,发黑,过度发白等,其实是挺耗时间的,既然现在的设备都是IOT了,监控镜头也是走网络了,为什么Python不能自动巡检呢? 机会就是这么产生的。

在这个摄像头巡检的过程中,是使用了rtsp的协议,最关键的核心节点有两个:

1. 通过rtsp连接摄像头获取当前的图片,代码如下:

def get_pic(info):

    picturevalue=0

    cam_no=info[0]

    ip=info[1]

    file_name='images\\'+info[0]+".jpg"

    username='***************'

    password=‘***************’

    port="554"

    try:

        cap = cv2.VideoCapture("rtsp://" + username + ":" + password+ "@" + ip  + ":" + port + "/Streaming/Channels/1")

        isOpened=cap.isOpened()

        print(isOpened)

        print(type(isOpened))

        print(file_name)

        if isOpened:

            ret, frame = cap.read()

            cv2.imwrite(file_name, frame)

        cap.release()

        print('完成抓拍')

        picturevalue=get_pic_value(file_name)

    except:

        picturevalue=str(0)

return cam_no,picturevalue

这里主要是通过CV调用摄像头,获取图片并保存到指定路径。

2. 图片分析,如何通过图片判断这个摄像头的状态是否正常。在这里,笔者选用了提取图片的亮度值作为参考值,具体的原因如下:

  • 如果镜头发生了位移,对应的亮度值会发生变化,已经测试过。
  • 如果过量或者过暗,亮度值也会发生变化,也测试过。
  • 如果摄像头掉线了,直接无法获取数据,这个直接就可以判断出来。

当然,选取亮度值作为参考也有局限性,会受到天气的影响,当然,我们可以将参考阈值设置的宽泛一点(参考值与实际值之间的差距),建议参考阈值不超过10,如果超过10,如果画面是正常的,可以修改参考值。当然,更智能一点,可以动态设置参考值,以前30天的平均实际值作为参考,这样会更精确一点。

    def get_pic_value(img_name):

    im=Image.open(img_name).convert('L')

    start=ImageStat.Stat(im)

return str(int(start.mean[0]))

整体方案设计如下:

目前这个方案已经部署在笔者公司,基本上一些大的问题都可以通过这个机制发现,期待基于这些数据图片上进一步拓展,发现更多有益于业务需求的机会。

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值