python3.9调用海康sdk(没完成可能是因为python版本过高吗)

花了两天时间根据站内其他大佬的步骤。重新下载了几次visual studio2015,步骤没有问题,可是出现了其他人都没有的问题,就是头文件报错。
参考的链接如下
Python调用海康威视网络相机之——python调用海康威视C++的SDK_python hikvision-优快云博客
基于海康SDK实现Python调用海康威视网络摄像头_python 调用海康威视网络摄像机sdk显示opemcv-优快云博客
不知道有没有碰到同样问题的朋友们。
我出现的错误如下
反正就是很多错误,大多数错误就是说一些.h的头文件有问题。还望各位大佬补充。

### 安装必要组件 为了使Python能够在Ubuntu操作系统中与海康威视工业相机进行交互,需先安装一系列依赖项和工具。这包括但不限于CMake、Qt库以及其他可能由具体项目需求决定的支持软件。 对于海康威视工业相机SDK的部署,确保已下载适用于Linux平台版本的官方SDK包[^1]。接着按照官方文档说明完成基本环境配置工作,通常涉及设置环境变量以便于后续操作能够顺利找到所需的动态链接库文件位置。 #### 配置开发环境 考虑到兼容性和稳定性因素,建议创建一个新的Conda虚拟环境来管理整个项目的依赖关系: ```bash conda create -n hikvision python=3.9 conda activate hikvision ``` 随后依据个人喜好选择合适的包管理器(pip或conda)来进行额外第三方模块的引入,比如用于图像处理的OpenCV等[^3]。 ### 编写Python代码实现图像采集功能 当上述准备工作完成后,即可着手准备具体的编程逻辑部分。下面给出了一段简单的示例代码片段展示如何利用Python接口访问并控制连接至系统的单台设备执行拍照动作: ```python from ctypes import cdll, c_char_p, POINTER, Structure, byref import numpy as np import cv2 class NET_DVR_DEVICEINFO_V40(Structure): _fields_ = [("sSerialNumber", c_char_p * 48), ("byAlarmInPortNum", c_char_p), ("byAlarmOutPortNum", c_char_p)] def init_camera(): HCNetSDK = cdll.LoadLibrary('./libhcnetsdk.so') user_info = NET_DVR_INIT() device_info = NET_DVR_DEVICEINFO_V40() result = HCNetSDK.NET_DVR_Init(user_info) if not result: raise Exception("Initialization failed") camera_handle = HCNetSDK.NET_DVR_Login_V40( "camera_ip_address".encode(), 8000, "username".encode(), "password".encode(), byref(device_info)) return HCNetSDK, camera_handle def capture_image(HCNetSDK, camera_handle): frame_buffer_ptr = POINTER(c_ubyte)() buffer_size = c_ulonglong(0) ret_code = HCNetSDK.NET_DVR_GetPicture(camera_handle, None, byref(frame_buffer_ptr), byref(buffer_size)) if ret_code != 1: print(f"Failed to get picture with error code {ret_code}") return img_array = np.ctypeslib.as_array((c_ubyte * buffer_size.value).from_address(addressof(frame_buffer_ptr.contents)), shape=(buffer_size.value,)) image_data = cv2.imdecode(img_array, cv2.IMREAD_COLOR) return image_data if __name__ == "__main__": sdk_lib, cam_hdl = init_camera() try: while True: img = capture_image(sdk_lib, cam_hdl) if img is not None: cv2.imshow('Camera Feed', img) keypress = cv2.waitKey(1) & 0xFF if keypress == ord('q'): break finally: sdk_lib.NET_DVR_Cleanup() cv2.destroyAllWindows() ``` 这段脚本首先加载了`libhcnetsdk.so`这个共享对象作为与硬件通信的基础层,定义了一个结构体用来存储来自摄像头的信息,并实现了两个主要函数分别负责初始化会话以及抓取当前帧画面。最后主循环里不断调用后者刷新窗口直到按下'Q'键退出程序运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值