相关文章推荐
闷骚的木耳  ·  深入理解 ...·  1 年前    · 
英俊的小马驹  ·  c - How to use ...·  1 年前    · 

持续创作,加速成长!这是我参与「掘金日新计划 · 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较为鸡肋)