|
目录1.pythonsdk使用1.海康SDK下载 2.opencv读取sdk流 先说效果,我是用的AI推理的实时流,延迟从高达7秒降到小于1秒如果觉得这个延迟还不能接受,下一章,给大家介绍点上不得台面的小方法SDK(SoftwareDevelopmentKit)是软件开发工具包的缩写,它是一组用于开发特定软件或应用程序的工具、库和文档的集合。SDK提供了开发所需的资源和接口,帮助开发者更高效地构建应用程序。SDK通常包含以下内容:工具:SDK提供了一系列开发工具,如编译器、调试器、IDE(集成开发环境)等,用于编写、调试和测试代码。库:SDK中的库是预先编译好的可重用代码模块,包含常见的功能和算法,开发者可以直接调用这些库来简化开发过程。示例代码:SDK通常附带一些示例代码,展示如何使用SDK提供的功能和接口,帮助开发者快速上手并理解开发流程。文档:SDK提供详细的文档,包括API参考、开发指南、示例代码解释等,帮助开发者了解SDK的功能和使用方法。依赖项:SDK可能需要依赖其他软件或库,例如操作系统、第三方库等,开发者需要满足这些依赖关系才能使用SDK。SDK的作用是简化开发过程,提供开发所需的资源和接口,节省开发者的时间和精力。通过使用SDK,开发者可以快速构建功能丰富、高效的应用程序,而无需从头开始编写所有的代码和功能。1.pythonsdk使用之前常常采用python来读取usb摄像头,因为其语言风格易读且上手快。起先,使用rtsp流来读海康的网络相机,视频画面出现延迟卡顿的现象,如果对于实时性要求较高(起码得和网页预览效果相当的帧率)的话,用rtsp流读取的方式显得不可取,本文采用在python中调用HikVision的SDK读取IP相机的方式实现,帧率的话和网络预览效果相当1.海康SDK下载 下载好解压后进入以下路径海康威视-HCNetSDKV6.1.9.48_build20230410_win64---Demo示例---5-Python开发示例---1-预览取流解码Demo1.找到这个lib路径,里面应该是空的看需要选择win或者linux2.返回主目录,选择库文件,复制全部文件(实际按官方文档只需要部分库文件,不过可以傻瓜式全部打包),粘贴到上面的lib文件夹的win文件中下面是官方文档的操作说明1.更新设备网络SDK时,SDK开发包【库文件】里的HCNetSDK.dll、HCCore.dll、HCNetSDKCom文件夹、libssl-1_1.dll、libcrypto-1_1.dll、hlog.dll、hpr.dll、zlib1.dll、PlayCtrl.dll、SuperRender.dll、AudioRender.dll等文件均要加载到程序里面,【HCNetSDKCom文件夹】(包含里面的功能组件dll库文件)需要和HCNetSDK.dll、HCCore.dll一起加载,放在同一个目录下,且HCNetSDKCom文件夹名不能修改。2.如果自行开发软件不能正常实现相应功能,而且程序没有指定加载的dll库路径,请在程序运行的情况下尝试删除HCNetSDK.dll。如果可以删除,说明程序可能调用到系统盘Windows->System32目录下的dll文件,建议删除或者更新该目录下的相关dll文件;如果不能删除,dll文件右键选择属性确认SDK库版本。3.如按上述步骤操作后还是不能实现相应功能,请根据NET_DVR_GetLastError返回的错误号判断原因。3.运行test_main.py获取实时画面 2.opencv读取sdk流将下面代码贴到test_main.py的同级目录下运行即可有问题的朋友欢迎评论区留言#coding=utf-8importosimportplatformfromHCNetSDKimport*fromPlayCtrlimport*importnumpyasnpimporttimeimportcv2classHKCam(object):def__init__(self,camIP,username,password,devport=8000):#登录的设备信息self.DEV_IP=create_string_buffer(camIP.encode())self.DEV_PORT=devportself.DEV_USER_NAME=create_string_buffer(username.encode())self.DEV_PASSWORD=create_string_buffer(password.encode())self.WINDOWS_FLAG=Falseifplatform.system()!="Windows"elseTrueself.funcRealDataCallBack_V30=Noneself.recent_img=None#最新帧self.n_stamp=None#帧时间戳self.last_stamp=None#上次时间戳#加载库,先加载依赖库#1根据操作系统,加载对应的dll文件ifself.WINDOWS_FLAGs.chdir(r'./lib/win')self.Objdll=ctypes.CDLL(r'./HCNetSDK.dll')#加载网络库self.Playctrldll=ctypes.CDLL(r'./PlayCtrl.dll')#加载播放库elses.chdir(r'./lib/linux')self.Objdll=cdll.LoadLibrary(r'./libhcnetsdk.so')self.Playctrldll=cdll.LoadLibrary(r'./libPlayCtrl.so')#设置组件库和SSL库加载路径#2设置组件库和SSL库加载路径self.SetSDKInitCfg()#初始化DLLself.Objdll.NET_DVR_Init()#3相机初始化#启用SDK写日志self.Objdll.NET_DVR_SetLogToFile(3,bytes('./SdkLog_Python/',encoding="utf-8"),False)os.chdir(r'../../')#切换工作路径到../../#登录(self.lUserId,self.device_info)=self.LoginDev()#4登录相机self.Playctrldll.PlayM4_ResetBuffer(self.lUserId,1)#清空指定缓冲区的剩余数据。这个地方传进来的是self.lUserId,为什么呢?print(self.lUserId)ifself.lUserId-1:self.Playctrldll.PlayM4_Stop(self.PlayCtrl_Port)self.Playctrldll.PlayM4_CloseStream(self.PlayCtrl_Port)self.Playctrldll.PlayM4_FreePort(self.PlayCtrl_Port)PlayCtrl_Port=c_long(-1)self.Objdll.NET_DVR_Logout(self.lUserId)self.Objdll.NET_DVR_Cleanup()print('释放资源结束')def__enter__(self):returnselfdef__exit__(self,exc_type,exc_val,exc_tb):self.release()if__name__=="__main__":camIP='192.168.1.122'#camIP='192.168.3.157'DEV_PORT=8000username='admin'password='admin'HIK=HKCam(camIP,username,password)last_stamp=0whileTrue:t0=time.time()n_stamp,img=HIK.read()last_stamp=n_stamp'''TODO'''kkk=cv2.waitKey(1)ifkkk==ord('q'):breakHIK.release()
|
|