package com.netsdk.demo.customize; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.netsdk.lib.structure.NET_TIME_EX; import com.netsdk.lib.utils.Initialization; import com.sun.jna.Pointer; import java.io.File; import java.io.UnsupportedEncodingException; /** * @author 291189 * @version 1.0 * @description ManNumDetection事件 * @date 2021/11/30 11:34 */ public class ManNumDetectionDemo extends Initialization { int channel=0; NetSDKLib.LLong attachHandle=new NetSDKLib.LLong(0); /** * 订阅智能任务 */ public NetSDKLib.LLong AttachEventRealLoadPic() { // 先退订,设备不会对重复订阅作校验,重复订阅后会有重复的事件返回 if(attachHandle.longValue()!=0){ this.DetachEventRealLoadPic(); } // 需要图片 int bNeedPicture = 1; attachHandle = netSdk.CLIENT_RealLoadPictureEx(loginHandle, channel, NetSDKLib.EVENT_IVS_MAN_NUM_DETECTION, bNeedPicture,AnalyzerDataCB.getInstance(), null, null); if (attachHandle.longValue() != 0) { System.out.printf("Chn[%d] CLIENT_RealLoadPictureEx Success\n", channel); } else { System.out.printf("Ch[%d] CLIENT_RealLoadPictureEx Failed!LastError = %s\n", channel, ToolKits.getErrorCode()); } return attachHandle; } /** * 报警事件(智能)回调 */ private static class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack { private final File picturePath; private static AnalyzerDataCB instance; private AnalyzerDataCB() { picturePath = new File("./AnalyzerPicture/"); if (!picturePath.exists()) { picturePath.mkdirs(); } } public static AnalyzerDataCB getInstance() { if (instance == null) { synchronized (AnalyzerDataCB.class) { if (instance == null) { instance = new AnalyzerDataCB(); } } } return instance; } public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, Pointer dwUser, int nSequence, Pointer reserved) { if (lAnalyzerHandle == null || lAnalyzerHandle.longValue() == 0) { return -1; } switch (dwAlarmType) { case NetSDKLib.EVENT_IVS_MAN_NUM_DETECTION: // 立体视觉区域内人数统计事件(对应DEV_EVENT_MANNUM_DETECTION_INFO) NetSDKLib.DEV_EVENT_MANNUM_DETECTION_INFO msg = new NetSDKLib.DEV_EVENT_MANNUM_DETECTION_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); int nChannelID= msg.nChannelID; System.out.println("通道号:"+nChannelID); try { // System.out.println("事件名称UTF:"+new String(msg.szName,"UTF-8")); System.out.println("事件名称GBK:"+new String(msg.szName,"GBK")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } double pts = msg.PTS; System.out.println("时间戳:"+pts); NET_TIME_EX utc = msg.UTC; System.out.println("事件发生的时间:"+utc); int nEventID = msg.nEventID; System.out.println("事件ID:"+nEventID); int nAction = msg.nAction; System.out.println("0:脉冲 1:开始 2:停止:"+nAction); int nManListCount = msg.nManListCount; System.out.println("区域人员列表数量:"+nManListCount); NetSDKLib.MAN_NUM_LIST_INFO[] stuManList = msg.stuManList; for(int i=0;i