使用大华惠智双目半球网络摄像机DH-IPC-HD4140X-E2获取人流量统计数据
记录一下使用Java的SpringBoot+大华SDK在智慧公厕项目中使大华惠智双目半球网络摄像机DH-IPC-HD4140X-E2获取人流量统计数据
首先根据说明书登录摄像头,一般摄像头都有自己的账号和密码(可能是admin admin 也可能是admin 888888 还有可能是admin 12345),有IP的(可能是192.168.1.108),在同一个网段内浏览器访问摄像头的IP就可以访问web页面
使用windows系统自带的浏览器Microsoft Edge 谷歌浏览器也可以,主要是要安装插件
下载安装插件(如果电脑之前安装过就可以不用安装)
安装完成之后 重启浏览器登录(更保险)
可能有提示要加载,那就允许
设置人流量统计的相关参数
首先在设置 智能方案里把图标点亮
在设置-人数统计里选择人数统计
绘制区域和绘制方向线 绘制区域表示人流统计的区域,只有这个区域内的才统计的,绘制方向线,这个默认是入的方向线
参数设置进入和离开人数需要打钩,灵敏度这个的配置需要根据实际来确认 人数统计报警的进入人数和离开人数需要设置成1,滞留人数不需要设置(这样用程序去监听的时候就能被动获取报警数据)
布撤防配置
标定配置 安装高度和安装角度
自动维护配置 这个很关键,必须要配置,不然这个摄像头运行时间过长会被卡死的,可能是数据满了
网络设置 根据实际需求设置IP地址
首先去官网拿到开发需要的SDK
https://support.dahuatech.com/tools/sdkExploit
新建一个SpringBoot项目后调用sdk,在这里使用的是win10 64位的,sdk需要重新封装,去除gui方面的那部分代码
SpringBoot调用sdk的核心代码
DaHuaConstantConfig .java
public class DaHuaConstantConfig {// 摄像头的IP地址public static final String DA_HUA_IP= "192.168.1.108";// 摄像头的获取人流数据的端口是37777 不是80端口 这里有坑public static final int DA_HUA_PORT = 37777;// 登录的账号public static final String DA_HUA_ADMIN = "admin";// 登录的密码public static final String DA_HUA_PASSWORD = "admin";// 通道 默认0public static final int DA_HUA_SUB_CHANNEL = 0;// 登录状态 默认false 当登录成功后truepublic static boolean DA_HUA_LOGIN_STATE = false;// 自定义状态public static boolean DA_HUA_SUB_STATE = false;
}
DaHuaDisConnectCallBack.java
import com.netsdk.lib.NetSDKLib;
import com.sun.jna.Pointer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;// 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数public class DaHuaDisConnectCallBack implements NetSDKLib.fDisConnect {private final Logger log = LoggerFactory.getLogger(this.getClass());public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {log.error("Device:"+pchDVRIP+"Port:"+nDVRPort+"-DisConnectCallBack");DaHuaConstantConfig.DA_HUA_LOGIN_STATE = false;DaHuaConstantConfig.DA_HUA_SUB_STATE = false;// 断线提示}}
DaHuaHaveReConnectCallBack.java
import com.netsdk.demo.module.VideoStateSummaryModule;
import com.netsdk.lib.NetSDKLib;
import com.sun.jna.Pointer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;// 网络连接恢复,设备重连成功回调
// 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数public class DaHuaHaveReConnectCallBack implements NetSDKLib.fHaveReConnect {private final Logger log = LoggerFactory.getLogger(this.getClass());public void invoke(NetSDKLib.LLong m_hLoginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) {log.error("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort);DaHuaConstantConfig.DA_HUA_LOGIN_STATE = true;// 断线后需要重新订阅ExecutorService service = Executors.newSingleThreadExecutor();service.execute(new Runnable() {@Overridepublic void run() {log.warn("Reconnect Device ReAttache next");if (VideoStateSummaryModule.getM_hAttachMap().size() > 0) { // 如果断前正在订阅// 重订阅事件log.warn("Reconnect Device ReAttache need");VideoStateSummaryModule.reAttachAllVideoStatSummary(DaHuaNetSdkManCountThread.humanNumberStatisticCB);DaHuaConstantConfig.DA_HUA_SUB_STATE = true;}}});service.shutdown();}
}
DaHuaHumanNumberStatisticCallBack .java
import com.netsdk.lib.NetSDKLib;
import com.sun.jna.Pointer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;// 人流统计数据回调
public class DaHuaHumanNumberStatisticCallBack implements NetSDKLib.fVideoStatSumCallBack {private final Logger log = LoggerFactory.getLogger(this.getClass());public void invoke(NetSDKLib.LLong lAttachHandle, NetSDKLib.NET_VIDEOSTAT_SUMMARY stVideoState, int dwBufLen, Pointer dwUser) throws ParseException {try {// 自定义接收的类CsRecordHumanNumber csRecordHumanNumber = new CsRecordHumanNumber();csRecordHumanNumber.setEnteredToday(stVideoState.stuEnteredSubtotal.nToday); // 当日进入的人数csRecordHumanNumber.setEnteredHour(stVideoState.stuEnteredSubtotal.nHour);// 单位小时内进入的人数csRecordHumanNumber.setEnteredTotal(stVideoState.stuEnteredSubtotal.nTotal);// 设备运行后进入的总人数csRecordHumanNumber.setExitedToday(stVideoState.stuExitedSubtotal.nToday);// 当日出去的人数csRecordHumanNumber.setExitedHour(stVideoState.stuExitedSubtotal.nHour);// 单位小时内出去的人数csRecordHumanNumber.setExitedTotal(stVideoState.stuExitedSubtotal.nTotal);// 设备运行后出去的总人数log.info(csRecordHumanNumber.toString());// to do 把数据传给Spring去插入数据库或者其他处理} catch (IOException e) {e.printStackTrace();}}}
DaHuaNetSdkManCountThread.java 创建连接的线程类
import com.netsdk.demo.module.LoginModule;
import com.netsdk.demo.module.VideoStateSummaryModule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class DaHuaNetSdkManCountThread extends Thread {private static final Logger log = LoggerFactory.getLogger(DaHuaNetSdkManCountThread.class);// 设备断线通知回调private static final DaHuaDisConnectCallBack disConnectCB = new DaHuaDisConnectCallBack();// 网络连接恢复private static final DaHuaHaveReConnectCallBack haveReConnectCB = new DaHuaHaveReConnectCallBack();// 人数统计回调事件public static DaHuaHumanNumberStatisticCallBack humanNumberStatisticCB = new DaHuaHumanNumberStatisticCallBack();public void run(){System.out.println(Thread.currentThread().getName()+" NetSdk");if(LoginModule.init(disConnectCB, haveReConnectCB)){login();}}// 登录public static boolean login() {if (LoginModule.login(DaHuaConstantConfig.DA_HUA_IP, DaHuaConstantConfig.DA_HUA_PORT, DaHuaConstantConfig.DA_HUA_ADMIN, DaHuaConstantConfig.DA_HUA_PASSWORD)) {int chanNum = LoginModule.m_stDeviceInfo.byChanNum;log.info("da-hua-sdk-login success:"+chanNum);DaHuaConstantConfig.DA_HUA_LOGIN_STATE = true;if (!VideoStateSummaryModule.channelAttached(DaHuaConstantConfig.DA_HUA_SUB_CHANNEL)) {if (VideoStateSummaryModule.attachVideoStatSummary(DaHuaConstantConfig.DA_HUA_SUB_CHANNEL, humanNumberStatisticCB)) {log.info("da-hua-sdk human number open:");DaHuaConstantConfig.DA_HUA_SUB_STATE = true;} else {DaHuaConstantConfig.DA_HUA_SUB_STATE = false;}}return true;}return false;}
}
放在SpringBoot启动页面内启动
DaHuaNetSdkManCountThread daHuaNetSdkManCountThread = new DaHuaNetSdkManCountThread();
daHuaNetSdkManCountThread.start();
启动后控制台输出
08:41:39.142 spring-boot-logging [main] INFO o.s.j.e.a.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
08:41:39.166 spring-boot-logging [main] INFO o.a.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8780"]
08:41:39.188 spring-boot-logging [main] INFO o.a.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read
08:41:39.217 spring-boot-logging [main] INFO o.s.b.w.e.tomcat.TomcatWebServer - Tomcat started on port(s): 8780 (http) with context path ''
08:41:39.223 spring-boot-logging [main] INFO com.lavatory.CloudRoomApplication - Started CloudRoomApplication in 6.143 seconds (JVM running for 7.822)
Thread-4 NetSdk
load library: C:\Users\18380\AppData\Local\Temp\dhnetsdk.dll
C:/DevelopSpace/ZexinSpaces/smart-lavatory-system/lavatory-client/lavatory-client-terminal/libs/win64/
load library: C:\Users\18380\AppData\Local\Temp\dhnetsdk.dll
dhnetsdk----C:\Users\18380\AppData\Local\Temp\dhnetsdk.dll
load library: C:\Users\18380\AppData\Local\Temp\dhconfigsdk.dll
dhconfigsdk----C:\Users\18380\AppData\Local\Temp\dhconfigsdk.dll
arch-amd64--name-Windows 10
arch-amd64--name-Windows 10
load library: C:\Users\18380\AppData\Local\Temp\dhconfigsdk.dll
Login Success [ 192.168.1.108 ]
08:41:44.239 spring-boot-logging [Thread-4] INFO c.l.d.n.DaHuaNetSdkManCountThread - da-hua-sdk-login success:1
Attach Succeed at Channel 0 ! AttachHandle: 681853824. Wait Device Notify Information
08:41:44.847 spring-boot-logging [Thread-4] INFO c.l.d.n.DaHuaNetSdkManCountThread - da-hua-sdk human number open:
08:43:30.676 spring-boot-logging [Thread-6] INFO c.l.d.n.DaHuaHumanNumberStatisticCallBack - CsRecordHumanNumber(enteredToday=68, enteredHour=18, enteredTotal=2278, exitedToday=63, exitedHour=17, exitedTotal=2268)
CsRecordHumanNumber(enteredToday=68, enteredHour=18, enteredTotal=2278, exitedToday=63, exitedHour=17, exitedTotal=2268)
08:43:37.655 spring-boot-logging [Thread-8] INFO c.l.d.n.DaHuaHumanNumberStatisticCallBack - CsRecordHumanNumber(enteredToday=68, enteredHour=18, enteredTotal=2278, exitedToday=64, exitedHour=18, exitedTotal=2269)
CsRecordHumanNumber(enteredToday=68, enteredHour=18, enteredTotal=2278, exitedToday=64, exitedHour=18, exitedTotal=2269)
这个就是从摄像头设备里取到的客流统计值
CsRecordHumanNumber(enteredToday=68, enteredHour=18, enteredTotal=2278, exitedToday=63, exitedHour=17, exitedTotal=2268)
CsRecordHumanNumber(enteredToday=68, enteredHour=18, enteredTotal=2278, exitedToday=64, exitedHour=18, exitedTotal=2269)
使用大华惠智双目半球网络摄像机DH-IPC-HD4140X-E2获取人流量统计数据相关推荐
- 使用大华NetSDK对接大华相机
使用大华NetSDK对接相机 一. 下载大华NetSDK support 根据自己的需要下载对应版本的sdk.这边我们就以Win32版本作为开发使用. 下载的文件解压后,内部文件如下图所示: 开发使用 ...
- EasyCVR使用大华SDK接入时录像显示失败是什么原因?该如何解决?
EasyCVR视频融合云服务支持多协议.多类型设备的接入,包括国标GB/T28181.RTMP.RTSP/Onvif协议,以及厂家私有协议,如:海康SDK.大华SDK.海康Ehome等.平台可对前端接 ...
- 如何使用大华SDK工具查询和播放设备录像?
EasyCVR视频融合云平台可支持多协议.多类型的设备接入,包括国标GB28181.RTSP/Onvif.RTMP协议,以及海康/大华SDK.海康Ehome等,对外可分发RTSP.RTMP.FLV.H ...
- 使用大华设备开发行AI人流量统计出现时间不正确的原因分析
人流量统计是基于AI人工智能算法,可以实时统计视频图像中的人体个数和流动趋势,与视频监控技术结合,能实现当前监控区域的人流量统计,实时了解行人流量动态,还能达到人群密度监测.避免人群聚集的目的,在安防 ...
- 2022-2027年中国半球网络摄像机市场规模现状及投资规划建议报告
[报告类型]产业研究 [报告格式]电子+纸介版 [出品单位]华经产业研究院 本报告由华经产业研究院重磅推出,对中国半球网络摄像机行业的发展现状.竞争格局及市场供需形势进行了具体分析,并从行业的政策环境 ...
- ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services
ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services 1. 专栏导读 本专栏第一篇文章「专栏开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文 ...
- ONVIF协议网络摄像机(IPC)客户端程序开发(8):获取设备基本信息
ONVIF协议网络摄像机(IPC)客户端程序开发(8):获取设备基本信息 1 专栏导读 本专栏第一篇文章「专栏开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文章讲过的知识点(或代 ...
- ONVIF协议网络摄像机(IPC)客户端程序开发(5):门外汉理解ONVIF协议
1. 专栏导读 本专栏第一篇文章「专栏开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文章讲过的知识点(或代码段),后面文章不会赘述.为了节省篇幅,突出重点,在文章中展示的示例代码 ...
- ONVIF协议网络摄像机(IPC)客户端程序开发(2):第一次使用IPC摄像头
ONVIF协议网络摄像机(IPC)客户端程序开发(2):第一次使用IPC摄像头 1. 专栏导读 2. 适合读者 本文只适合第一次拿到IPC摄像头,很好奇该怎么使用IPC的读者.已经玩过IPC的,可以略 ...
最新文章
- html块级元素对齐方式,块级元素的三种垂直水平居中的方法
- Google I/O 2019上提及的Javascript新特性
- centos apache php mysql zend_CentOS 5.5搭建Apache+PHP5.2x+MySQL5+Zend3(yum安装)
- Linux进程之间通信 消息队列
- java栅格法全局路径规划,基于A*的全局路径规划算法(1)
- Failed to import pydot
- 好程序员分享如何看待CSS中BEM的命名方式?
- Ubuntu固定ip和dns配置和查看
- Spark数据分析技术学习笔记(二)——DataFrame使用
- 3月12日 对极几何,本征矩阵,基础矩阵,F/E矩阵计算,恢复旋转与平移,三角化视图重建
- 字节码增强之Javassist
- SAP MM供应商主数据
- 使用GitHub搭建个人博客
- 如何设置CentOS 7获取动态ip地址
- 分享一个商品历史价格查询的网站
- matlab绘制布尔运算图,最强干货——PPT布尔运算最全攻略
- R语言 image.binarization: 包_想提高文章的引用率?写个R包吧!- 工具准备篇
- 华为AC+AP设备上线思路
- Android调用第三方App Activity
- excel中文显示乱码