python调用海康威视sdk库_HikVision SDK: C++ 至 Python

海康威视(HikVision)在视频解决方案的地位毋庸置疑,起码属于国内业界顶尖水平。选择他家设备主要有两个原因:首要是因为他家产品贵,这确实是选择的首要原因(毕竟经费是……咳,打住);另一个重要原因是他的技术方案十分全面,包括技术支持、开发文档等。

在项目开发初期,一直使用 Python 开发、USB 摄像头调试,毕竟 Python 在机器学习有「先天」优势。然而把项目转移到 HikVision 的 IP 摄像头时,摄像头提供的 SDK 没有 Python 支持。虽然这不足为怪,但解决起来却比想象中要费劲。因此,记录下近期一些核心的学习资料,为后续回顾使用。

这份日记解决的问题,是把 SDK 从 C++ 迁移至 Python,并结合 OpenCV 进行二次开发。

准备环境

开始之前,先了解我使用的开发环境,部分型号或版本可能不是必要条件。名称版本 / 型号系统Windows10

硬件HikVision IP 摄像头DS-2DC4420IW-D

软件Python3.6+

OpenCV3.4+

设备网络 SDK_Win645.3+

Visual Studio2015

后续所有内容默认必要的开发环境已经完备,包括安装、配置、简单调试等。其中在 Visual Studio 上配置 OpenCV 的方法网上有很多参考文章,请自行检索。

解决方案

把 SDK 从 C++ 搬到 Python 需要解决两个主要问题,一个是从 IP 摄像头中获取图像(码流),另一个是对云台进行控制(角度、倍率等)。为了解决以上两个问题,一共尝试了三个方案,实现过程从简单到复杂,在此总结一下其中各自的利弊。

1. RTSP 协议获取图像

在选择 HikVision 之前也关注了这方面的支持。RTSP 是流媒体协议,可以很方便地通过 URL 获取码流。它的协议如下

// 说明:

// username:用户名,例如admin

// passwd:密码,例如12345

// ip:设备的ip地址,例如192.0.0.64

// port:端口号默认554,若为默认可以不写

// codec:有h264、MPEG-4、mpeg4这几种

// channel:通道号,起始为1

// subtype:码流类型,主码流为main,子码流为sub

rtsp://[username]:[passwd]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

在 OpenCV 中,很简单就能读取 IP 摄像头。

import cv2

cam = cv2.VideoCapture("rtsp://[username]:[passwd]@[ip]:554/h264/ch1/sub/av_stream")

while True:

ret, frame = cam.read()<

你可能感兴趣的:(python调用海康威视sdk库_HikVision SDK: C++ 至 Python)