记录一下使用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获取人流量统计数据相关推荐

  1. 使用大华NetSDK对接大华相机

    使用大华NetSDK对接相机 一. 下载大华NetSDK support 根据自己的需要下载对应版本的sdk.这边我们就以Win32版本作为开发使用. 下载的文件解压后,内部文件如下图所示: 开发使用 ...

  2. EasyCVR使用大华SDK接入时录像显示失败是什么原因?该如何解决?

    EasyCVR视频融合云服务支持多协议.多类型设备的接入,包括国标GB/T28181.RTMP.RTSP/Onvif协议,以及厂家私有协议,如:海康SDK.大华SDK.海康Ehome等.平台可对前端接 ...

  3. 如何使用大华SDK工具查询和播放设备录像?

    EasyCVR视频融合云平台可支持多协议.多类型的设备接入,包括国标GB28181.RTSP/Onvif.RTMP协议,以及海康/大华SDK.海康Ehome等,对外可分发RTSP.RTMP.FLV.H ...

  4. 使用大华设备开发行AI人流量统计出现时间不正确的原因分析

    人流量统计是基于AI人工智能算法,可以实时统计视频图像中的人体个数和流动趋势,与视频监控技术结合,能实现当前监控区域的人流量统计,实时了解行人流量动态,还能达到人群密度监测.避免人群聚集的目的,在安防 ...

  5. 2022-2027年中国半球网络摄像机市场规模现状及投资规划建议报告

    [报告类型]产业研究 [报告格式]电子+纸介版 [出品单位]华经产业研究院 本报告由华经产业研究院重磅推出,对中国半球网络摄像机行业的发展现状.竞争格局及市场供需形势进行了具体分析,并从行业的政策环境 ...

  6. ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services

    ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services 1. 专栏导读 本专栏第一篇文章「专栏开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文 ...

  7. ONVIF协议网络摄像机(IPC)客户端程序开发(8):获取设备基本信息

    ONVIF协议网络摄像机(IPC)客户端程序开发(8):获取设备基本信息 1 专栏导读 本专栏第一篇文章「专栏开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文章讲过的知识点(或代 ...

  8. ONVIF协议网络摄像机(IPC)客户端程序开发(5):门外汉理解ONVIF协议

    1. 专栏导读 本专栏第一篇文章「专栏开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文章讲过的知识点(或代码段),后面文章不会赘述.为了节省篇幅,突出重点,在文章中展示的示例代码 ...

  9. ONVIF协议网络摄像机(IPC)客户端程序开发(2):第一次使用IPC摄像头

    ONVIF协议网络摄像机(IPC)客户端程序开发(2):第一次使用IPC摄像头 1. 专栏导读 2. 适合读者 本文只适合第一次拿到IPC摄像头,很好奇该怎么使用IPC的读者.已经玩过IPC的,可以略 ...

最新文章

  1. html块级元素对齐方式,块级元素的三种垂直水平居中的方法
  2. Google I/O 2019上提及的Javascript新特性
  3. centos apache php mysql zend_CentOS 5.5搭建Apache+PHP5.2x+MySQL5+Zend3(yum安装)
  4. Linux进程之间通信 消息队列
  5. java栅格法全局路径规划,基于A*的全局路径规划算法(1)
  6. Failed to import pydot
  7. 好程序员分享如何看待CSS中BEM的命名方式?
  8. Ubuntu固定ip和dns配置和查看
  9. Spark数据分析技术学习笔记(二)——DataFrame使用
  10. 3月12日 对极几何,本征矩阵,基础矩阵,F/E矩阵计算,恢复旋转与平移,三角化视图重建
  11. 字节码增强之Javassist
  12. SAP MM供应商主数据
  13. 使用GitHub搭建个人博客
  14. 如何设置CentOS 7获取动态ip地址
  15. 分享一个商品历史价格查询的网站
  16. matlab绘制布尔运算图,最强干货——PPT布尔运算最全攻略
  17. R语言 image.binarization: 包_想提高文章的引用率?写个R包吧!- 工具准备篇
  18. 华为AC+AP设备上线思路
  19. Android调用第三方App Activity
  20. excel中文显示乱码

热门文章

  1. matlab 设置perl解释器,Windows环境下静态编译Perl语言解释器(perl.exe)
  2. Unity访问Access数据库
  3. 深入浅出C语言程序设计pdf
  4. 程序员如何给孩子取名字?
  5. SQL Sever2008r2 数据库服务各种无法启动的解决办法
  6. 锐起无盘2046 XP 教程(适合新手)
  7. ensp配置ACL访问控制列表
  8. LM358D比较器的作用
  9. Python遗传算法求解函数极值
  10. cesesesese