今天拿到了海康威视的网络摄像头型号:DS-2CD2xxx,其实昨天就拿到了,但因为这个摄像头没有配置电源线,实验室里也没有PoE设备,所以今天jd买的电源线到了才能使用。(这里吐槽一下上一个用这个摄像头的学长,买的电源适配器是25v-2A就是50w的适配器,摄像头标定的是12v-3w,我接上发现发烫很严重而且会自动宕机,只好自己先买一个)

今天连上电脑后,发现找不到密码,联系了学长也忘记了,只好自己重新设置。关注了海康威视的客户公众号,里面有个密码重置,这里很奇怪,不知道为什么注册海康威视的账号需要用到身份证。然后就是跟着流程很顺利地下载了400密码重置助手重置了密码。之后又按照摄像头的说明书物理按键重置了摄像头,然后发现这样居然还有重新设置密码,早知道就不走客服那条路了,还省得身份信息泄露。

我是直接用网线连接的计算机,在设置里,把识别到的这个网络适配器的ip改到和摄像头同一个子网就好。这下就能成功访问并看到视频流了。

然后就是通过OpenCV-Ptthon访问摄像头了,这里给出代码,网上其实有现成的

主要是加入了一个Canny的边缘检测

import cv2 as cv
import numpy as np

def get_canny_img(image):
    res = cv.Canny(image, 500, 200)
    res = cv.convertScaleAbs(res)
    return res

if __name__ == \'__main__\':
    url = "rtsp://admin:123456@xxx.xxx.xxx.xxx/Streaming/Channels/1"
    cap = cv.VideoCapture(url)
    # cap.set(cv.CAP_PROP_BUFFERSIZE, 3)
    # cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc(\'M\', \'J\', \'P\', \'G\'))
    # cap.set(cv.CAP_PROP_FPS, 25)
    while True:
        flag, frame = cap.read()
        if not flag:
            break
        # res = get_canny_img(frame)
        res = frame
        cv.imshow("Canny_cam", res)
        if (cv.waitKey(1) >= 0):
            break

View Code

重点说一下犯蠢的地方,在设置好摄像头后我发现延迟很高,中文互联网和外网找了很久找到2个方法,还有一个是我自己想的

1. 

# cap.set(cv.CAP_PROP_BUFFERSIZE, 3)

有说是因为VideoCapture总是读取缓存中的图像数据导致了延迟,所以用CAP_PROP_BUFFERSIZE来限制缓存大小

2.

# cap.set(cv.CAP_PROP_FOURCC, cv.VideoWriter_fourcc(\'M\', \'J\', \'P\', \'G\'))

也有说是因为视频质量太高,所以需要降低质量来达到流畅

3.

# cap.set(cv.CAP_PROP_FPS, 25)

第三个是我自己猜测的原因,因为之前写播放视频的代码时没有注意播放帧率,导致了一秒一帧,所以以为是帧率原因

 

最终,原因其实是忘记修改cv.waitKey()的参数了,这个参数是wait key的时间(ms)所以改成4或4以下都可以(因为视频是25帧,所以4ms以下都行)

版权声明:本文为alexxql原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/alexxql/p/13808783.html