python通过调用海康SDK打开工业相机(全流程)
安装海康SDK
从海康威视官网下载对应的工业相机SDK开发包,通常包含动态库(.dll或.so)和头文件。将SDK解压到本地目录,确保路径无中文或特殊字符。
运行以下命令安装Python绑定库(以hikvision为例):
pip install hikvision 初始化SDK环境
调用NET_DVR_Init函数初始化SDK环境,设置回调函数和日志路径:
from hikvision import NetSdk NetSdk.NET_DVR_Init() NetSdk.NET_DVR_SetLogToFile(3, "./sdk_log/") # 日志级别3,保存到指定目录 登录相机设备
使用NET_DVR_Login_V40函数通过IP地址、端口、用户名和密码登录相机:
device_info = NetSdk.NET_DVR_DEVICEINFO_V40() login_params = NetSdk.NET_DVR_USER_LOGIN_INFO() login_params.bUseTLS = 0 login_params.sDeviceAddress = "192.168.1.64".encode('utf-8') login_params.wPort = 8000 login_params.sUserName = "admin".encode('utf-8') login_params.sPassword = "password".encode('utf-8') user_id = NetSdk.NET_DVR_Login_V40(login_params, device_info) if user_id < 0: print("Login failed, error code:", NetSdk.NET_DVR_GetLastError()) 启动实时预览
调用NET_DVR_RealPlay_V40配置预览参数并启动视频流:
preview_params = NetSdk.NET_DVR_PREVIEWINFO() preview_params.hPlayWnd = 0 # 窗口句柄,0表示不显示 preview_params.lChannel = 1 # 通道号 preview_params.dwStreamType = 0 # 主码流 preview_params.dwLinkMode = 0 # TCP模式 realplay_handle = NetSdk.NET_DVR_RealPlay_V40(user_id, preview_params) if realplay_handle < 0: print("Preview failed, error code:", NetSdk.NET_DVR_GetLastError()) 设置回调函数接收数据
定义回调函数处理视频流数据,并通过NET_DVR_SetStandardDataCallBack注册:
def data_callback(lRealHandle, dwDataType, pBuffer, dwBufSize, pUser): if dwDataType == NetSdk.NET_DVR_STREAMDATA: print("Received data size:", dwBufSize) NetSdk.NET_DVR_SetStandardDataCallBack(realplay_handle, data_callback, None) 释放资源
结束预览并注销登录,最后清理SDK环境:
NetSdk.NET_DVR_StopRealPlay(realplay_handle) NetSdk.NET_DVR_Logout(user_id) NetSdk.NET_DVR_Cleanup()
异常处理
检查每一步的返回值,通过NET_DVR_GetLastError获取错误码:
error_code = NetSdk.NET_DVR_GetLastError() if error_code != 0: print("Error occurred, code:", error_code) 注意事项
- SDK版本需与相机固件匹配,跨版本可能导致兼容性问题
- 工业相机通常需要配置特定的网络参数(如子网掩码、网关)
- 实时预览的数据回调函数应避免耗时操作,建议使用队列异步处理