python调用sdk的文章_Python调用大华SDK取图

之前写了一个大华SDK取图程序,中间遇见很多问题,查找解决办法的时候发现网上关于大华SDK的调用,用Python写的少得可怜,基本没有。记录一下开发中遇见的问题和解决办法。

业务场景是识别人脸到人脸的时候保存背景图和人脸图。根据开发文档,流程为初始化SDK,登录设备,订阅智能事件,在智能事件回调函数中可以取到需要的图片信息。

声明函数调用

python调用C语言函数,需要先声明函数及函数返回值类型参数类型,下面以SDK初始化及设备登录函数举例。

SDK初始化第一个参数为回调函数。需要根据文档先注册回调函数。

Init_Callback = CFUNCTYPE(c_void_p,c_longlong,c_char_p,c_long,c_ulonglong)

CFUNCTYPE()第一个参数为返回值类型,后面依次为参数类型

然后声明函数调用及返回值类型和参数类型

CLIENT_Init = NetSDK_dll.CLIENT_Init

CLIENT_Init.restype = c_bool

CLIENT_Init.argtypes = (Init_Callback,c_ulonglong)

设备登录函数前几个参数传递方式是input,后两个是output,实际调用传参需要通过byref方式,声明的时候需要声明为POINTER指针

CLIENT_LoginEx2 = NetSDK_dll.CLIENT_LoginEx2

CLIENT_LoginEx2.restype = c_longlong

CLIENT_LoginEx2.argtypes = (c_char_p,c_ushort,c_char_p,c_char_p,c

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
调用大华SDK进行抓图,首先需要安装大华SDK,并且需要安装PythonSDK封装。以下是一个简单的示例代码: ```python import ctypes # 加载SDK库 dhnetsdk = ctypes.cdll.LoadLibrary("dhnetsdk.dll") # 登录设备 login_info = dhnetsdk.LPNET_DEVICEINFO_Ex() login_info.szIP = "192.168.1.100".encode('utf-8') # 设备IP地址 login_info.szUserName = "admin".encode('utf-8') # 登录用户名 login_info.szPassword = "12345".encode('utf-8') # 登录密码 login_info.nPort = 37777 # 设备端口号 login_info.nProto = 2 # 网络协议类型,0表示TCP,1表示UDP,2表示多播 login_info.nType = 0 # 设备类型,0表示DVR,1表示NVMS login_info.bUseAsynLogin = False # 是否异步登录 login_info.byReserved = None # 保留字段 login_info.pCapParam = None # 能力集参数 login_id = dhnetsdk.CLIENT_LoginEx2(login_info, None) # 设置抓图回调函数 def capture_callback(lLoginID, pBuf, RevLen, EncodeType, CmdSerial, dwUser): print("Capture success!") capture_fn = ctypes.CFUNCTYPE(None, ctypes.c_long, ctypes.POINTER(ctypes.c_ubyte), ctypes.c_ulong, ctypes.c_ulonglong, ctypes.c_ulong, ctypes.c_void_p) capture_cb = capture_fn(capture_callback) dhnetsdk.CLIENT_SetSnapRevCallBack(login_id, capture_cb, None) # 发送抓图命令 snap_cfg = dhnetsdk.NET_SNAP_PARAMS() snap_cfg.Channel = 0 # 摄像头通道号 snap_cfg.Quality = 3 # 图片质量,0表示最好,3表示最差 snap_cfg.ImageSize = 2 # 图片大小,0表示最大,1表示640*480,2表示320*240 snap_cfg.mode = 0 # 抓图模式,0表示实时抓图,1表示定时抓图 snap_cfg.InterSnap = 0 # 抓图间隔时间,单位为秒 snap_cfg.CmdSerial = 0 # 命令序列号 snap_info = dhnetsdk.LPNET_SNAP_CFG() snap_info.dwSize = ctypes.sizeof(snap_cfg) snap_info.pSnapCfg = ctypes.pointer(snap_cfg) dhnetsdk.CLIENT_SnapPictureEx(login_id, snap_info, None) # 退出登录 dhnetsdk.CLIENT_Logout(login_id) ``` 需要注意的是,大华SDK的函数都是C语言编写的,所以在Python调用时需要进行一些类型转换。在上面的代码中,我们使用了ctypes库来进行类型转换和调用大华SDK的函数。另外,抓图回调函数需要传入一个指针类型的参数,这里我们传入了None。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值