• 实时人流量监测——海康威视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 
     9     cout << "进入回调" << endl;//判断一下没有进入回调  记得在设备那边设置回调的地址和端口不然会无法进入回调
    10     NET_DVR_PDC_ALRAM_INFO struPdcALramInfo;//数据结构体
    11     memcpy(&struPdcALramInfo, pAlarmInfo, sizeof(NET_DVR_PDC_ALRAM_INFO));
    12     switch (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
    ", 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
    ", 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
    ", 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 }

     

  • 相关阅读:
    vue中select设置默认选中
    验证码
    JS图片src转义
    int main(int argc, char** argv) 以及CommandLineParser
    Visual Studio2013 配置opencv3.3.0 x64系统
    ubuntu16.04 下安装 visual studio code 以及利用 g++ 运行 c++程序
    第三次作业
    第二次作业
    作业一
    第四次作业
  • 原文地址:https://www.cnblogs.com/arvinhuang/p/11854423.html
Copyright © 2020-2023  润新知