需求
使用的是海康威视人脸带体温识别智能终端,根据主动获取设备事件现在不支持获取体温,所以实时获取
参考设备布防
设备登陆注册省略,见------海康威视人脸识别智能终端获取设备事件二次开发Java
设备布防
Thread.sleep(100000);是为了在控制台程序测试实时获取数据效果,整合到项目中时不需要
// 设置布防 public void setAlarm(){ if (lAlarmHandle.intValue()<0){// 尚未布防,需要布防 if (fMSFCallBack_V31 == null){ fMSFCallBack_V31 = new FMSGCallBack_V31(); Pointer pUser = null; if (!HCNetLogin.getHcNetSDK().NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack_V31, pUser)) { System.out.println("Set callback function fail"); } else{ System.out.println("Set callback function successfully!"); } } // 设置报警回调 boolean callflag = hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack_V31,null ); if(callflag){ System.out.println("callback----success+设置回调函数成功"); } HCNetSDK.NET_DVR_SETUPALARM_PARAM_V50 struSetupAlarmParam = new HCNetSDK.NET_DVR_SETUPALARM_PARAM_V50(); struSetupAlarmParam.read(); struSetupAlarmParam.dwSize = struSetupAlarmParam.size(); struSetupAlarmParam.byLevel = 1; struSetupAlarmParam.byAlarmInfoType = 1; struSetupAlarmParam.byDeployType = 1; struSetupAlarmParam.write(); lAlarmHandle = HCNetLogin.getHcNetSDK().NET_DVR_SetupAlarmChan_V50(new NativeLong(HCNetLogin.getlUserID()),struSetupAlarmParam); if (lAlarmHandle.intValue() == -1){ System.out.println("===========布防失败================"); }else{ System.out.println("===========布防成功================"); } try { Thread.sleep(100000); } catch (InterruptedException e) { e.printStackTrace(); } } }
回调函数:对着设备刷脸时,回调函数会打印数据
public class FMSGCallBack_V31 implements HCNetSDK.FMSGCallBack_V31 { @Override public void invoke(NativeLong lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { AlarmDataHandle(lCommand.intValue(), pAlarmer, pAlarmInfo, dwBufLen, pUser); } public void AlarmDataHandle(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { HCNetSDK.NET_DVR_ACS_ALARM_INFO strACSInfo; Pointer pACSInfo; if (lCommand == 20482){ System.out.println("===============1111111111111=========="); strACSInfo = new HCNetSDK.NET_DVR_ACS_ALARM_INFO(); strACSInfo.write(); pACSInfo = strACSInfo.getPointer(); pACSInfo.write(0, pAlarmInfo.getByteArray(0, strACSInfo.size()), 0, strACSInfo.size()); strACSInfo.read(); System.out.println("=========22222222============="); // strACSInfo.byAcsEventInfoExtendV20=1; // 5代表主事件类型 次事件类型75对应的16进制0x4b代表刷脸通过 if (strACSInfo.dwMajor == 5 && strACSInfo.dwMinor == 75){ String deviceIP = (new String(pAlarmer.sDeviceIP)).trim(); String punchTime = strACSInfo.struTime.toStringTime(); String empCode = Integer.toString(strACSInfo.struAcsEventInfo.dwEmployeeNo); String cardNo = (new String(strACSInfo.struAcsEventInfo.byCardNo)).trim(); System.out.println("======设备ip:===="+deviceIP); System.out.println("======编号:===="+empCode); System.out.println("======卡号:===="+cardNo); System.out.println("======时间:===="+punchTime); HCNetSDK.NET_DVR_ACS_EVENT_INFO_EXTEND_V20 v20 = new HCNetSDK.NET_DVR_ACS_EVENT_INFO_EXTEND_V20(); v20.write(); Pointer pp = v20.getPointer(); pp.write(0,strACSInfo.pAcsEventInfoExtendV20.getByteArray(0,v20.size()),0,v20.size()); v20.read(); // System.out.println(v20); System.out.println("======体温:===="+v20.fCurrTemperature); // 在项目中可以对接数据库,进行自己的业务逻辑操作 } } } }