日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

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

發布時間:2023/12/31 综合教程 62 生活家
生活随笔 收集整理的這篇文章主要介紹了 实时人流量监测——海康威视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 }

總結

以上是生活随笔為你收集整理的实时人流量监测——海康威视sdk初体验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。