持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天, 点击查看活动详情
工程上海康相机占据龙头老大位置,大多数工程中采用的是海康相机只有少部分是大华相机,因此在处理CV任务的时候很难避免与海康相机对接使用。
在这里我将选择以海康相机为例,讲解一下使用OpenCv连接海康相机获取视频画面。
情况一:项目和相机在同一网段
这种情况属于工程上的理想状态了,这个时候只要路由器和交换机不出问题(当然出问题了就喊运维人员前来处理了),使用OpenCv就可以很块的连接上相机了。
我们可以上海康官网或直接搜索海康RTSP格式(RTSP格式如下,大家可以自行搜索各部份的解释),我们需要从数据库中获取对应相机的: 账号 、 密码 和 IP 然后即可组成海康设备的RTSP,使用OpenCv直接读取
rtsp = "rtsp://%s:%s@%s:554/cam/realmonitor?channel=1&subtype=1" % (username, password, ip)
cap = cv2.VideoCapture(rtsp)
情况二:项目和相机不在同一网段
这种情况属于工程上的大多数状态了,这个时候往往是会有海康的接口进行获取RTSP,然后用OpenCv连接Rtsp。使用RTSP连接的话存在一下几种常见的意外情况:
相机端掉线(施工把线挖断了、欠网费了等)
本地网络断线(同上)
RTSP本身传输协议存在的一些不完美的地方
可以连接上但是无法播放等原因
掉帧和花屏原因(不排除海康那边做的不够好)
我们可以获取到相机的indexcode (和海康人员协商索要),通过发送POST或Get请求得到RTSP,得到返回值中解析出RTSP,大家可以参考: juejin.cn/post/707626… 是对RTSP返回值的一次解析优化,也是从这次优化中察觉到RTSP连接的不堪一击,种种问题接踵而至。
通过接口传送相机indexcode获取此相机的RTSP并通过OpenCv连接示例如下:
RTSP示例: rtsp://192.168.1.100:554/openUrl/MEyN5m0
VideoCap = cv2.VideoCapture(RTSP)
ret, frame = VideoCap.read()
代码部分详见:juejin.cn/post/710162…
在海康官网上有连接海康相机的SDK开发工具,也有python、Jave、C#和C++版本 ,大家可以自行对接海康SDK进行连接相机(SDK较为鸡肋)