100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 实时人流量监测——海康威视sdk初体验

实时人流量监测——海康威视sdk初体验

时间:2024-07-08 20:59:30

相关推荐

实时人流量监测——海康威视sdk初体验

本文主要是博主使用海康SDK进行人流量统计的摸索过程,在这里简单记录一下。

查询文档,能实现人流量统计大概有两种方式,报警或者监听,

这边我选择了监听方式,NET_DVR_StartListen_V30 这个接口,启动监听,它可以接收设备主动上传的报警信息并且支持多线程。

我们需要编写一个回调函数来接受数据(处理业务逻辑),

NET_DVR_ALARMER 是一个报警信息结构体,这边需要 COMM_ALARM_PDC 这个类型的数据,其实是一个宏,用来判断接受数据的类型,这里对应的结构体为NET_DVR_PDC_ALRAM_INFO 具体参数可以查阅文档。到这里这里大概对于SDK的调用有个了解。那么开始动手。

首先创建一个人流量demo ,导入SDK必要头文件以及相应的资源文件。

(ps:这里很多dll并不需要)

直接上代码:

1 #include <stdio.h>2 #include <iostream>3 #include "HCNetSDK.h"4 using namespace std;5 6 void CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER* pAlarmer, char* pAlarmInfo, DWORD dwBufLen, void*pUser)7 { 8 9cout << "进入回调" << endl;//判断一下没有进入回调 记得在设备那边设置回调的地址和端口不然会无法进入回调10NET_DVR_PDC_ALRAM_INFO struPdcALramInfo;//数据结构体11memcpy(&struPdcALramInfo, pAlarmInfo, sizeof(NET_DVR_PDC_ALRAM_INFO));12switch (lCommand)//消息类型 13{14 cout << lCommand << endl; 15 case COMM_ALARM_PDC: 16 { 17 if (struPdcALramInfo.byMode == 0) 18 { 19 //测试显示数据 20 cout << "当前时间:" << struPdcALramInfo.uStatModeParam.struStatFrame.dwRelativeTime << endl; 21 cout << "进来人数:" << struPdcALramInfo.dwEnterNum << endl; 22 cout << "离开人数" << struPdcALramInfo.dwLeaveNum << endl; 23 break; 24 } 25 26 } 27 default:break; 28 } 29 } 30 void main() { 31 32 NET_DVR_Init();// 初始化 33 NET_DVR_SetConnectTime(2000, 1);//设置连接时间与重连时间 34 NET_DVR_SetReconnect(10000, true); 35 LONG lUserID;// 注册设备 36 NET_DVR_DEVICEINFO_V30 struDeviceInfo; 37 char ip[32] = "192.168.x.64";//设备的IP地址 需要和电脑端ip在同一个网段 38 char user[32] = "xxx";//登录名 39 char userPass[32] = "xxx";//密码 不需要多说了吧 40 41 lUserID = NET_DVR_Login_V30(ip, 8000, user, userPass, &struDeviceInfo);//这里端口号为8000 42 if (lUserID < 0) 43 { 44 printf("Login error, %d\n", NET_DVR_GetLastError());//如果登录失败,这里会有原因的,可查看文档对症下药 45 NET_DVR_Cleanup(); 46 return; 47 } 48 else 49 { 50 cout<<"Login success lUserID:"<< lUserID <<endl; 51 } 52 53 char localIP[16] = "192.168.x.60";//本地的Ip 设置回调用的 54 55 NET_DVR_NETCFG_V30 myNETCFG;//配置报警主机和端口 56 memcpy(&(myNETCFG.struAlarmHostIpAddr.sIpV4), localIP, sizeof(myNETCFG.struAlarmHostIpAddr.sIpV4));//内存拷贝 57 cout << myNETCFG.struAlarmHostIpAddr.sIpV4 << endl;//可以忽略 58 myNETCFG.wAlarmHostIpPort =8000; 59 BOOL isSuccess = NET_DVR_SetDVRMessageCallBack_V30(MessageCallback, &myNETCFG);//设置报警回调函数 60 if (isSuccess) 61 { 62 cout << "设置回调成功" << endl; 63 } 64 LONG lHandle;//启用监听 65 lHandle = NET_DVR_StartListen_V30(NULL, 8000, MessageCallback, NULL); 66 if (lHandle < 0) 67 { 68 printf("NET_DVR_StartListen_V30 error, %d\n", NET_DVR_GetLastError()); 69 NET_DVR_Logout(lUserID); 70 NET_DVR_Cleanup(); 71 return; 72 } 73 Sleep(5000);//这里是为了测试所以写了个休眠卡主线程也可以理解为监听时长 74 if (!NET_DVR_StopListen_V30(lHandle))//结束监听 75 { 76 printf("NET_DVR_StopListen_V30 error, %d\n", NET_DVR_GetLastError()); 77 NET_DVR_Logout(lUserID); 78 NET_DVR_Cleanup(); 79 return; 80 } 81 NET_DVR_Logout(lUserID);//注销用户 82 NET_DVR_Cleanup(); //释放 SDK 资源 83 return; 84 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。