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.DEV_EVENT_BARELAND_DETECTION_INFO; import com.netsdk.lib.utils.Initialization; import com.sun.jna.Pointer; import java.io.File; /** * @author 291189 * @version 1.0 * @description ERR211009112 * @date 2021/10/13 9:16 */ public class BarelandDetectionDemo extends Initialization { int channel=1; 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_BARELAND_DETECTION, bNeedPicture, AnalyzerDataCB.getInstance(), null, null); // attachHandle = netSdk.CLIENT_RealLoadPictureEx(loginHandle, channel, NetSDKLib.EVENT_IVS_ALL, 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_BARELAND_DETECTION: // 裸土检测事件(DEV_EVENT_BARELAND_DETECTION_INFO) DEV_EVENT_BARELAND_DETECTION_INFO msg=new DEV_EVENT_BARELAND_DETECTION_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); /** 事件名称*/ byte[] szName = msg.szName; try { System.out.println("szName:"+new String(szName,encode)); }catch (Exception e){ System.out.println(e.toString()); } /** 智能事件所属大类*/ byte[] szClass = msg.szClass; System.out.println("szClass:"+new String(szClass)); /** GroupID事件组ID,同一物体抓拍过程内GroupID相同*/ int nGroupID = msg.nGroupID; System.out.println("nGroupID:"+nGroupID); /** CountInGroup一个事件组内的抓拍张数*/ int nCountInGroup = msg.nCountInGroup; System.out.println("nCountInGroup:"+nCountInGroup); /** IndexInGroup一个事件组内的抓拍序号,从1开始*/ int nIndexInGroup = msg.nIndexInGroup; System.out.println("nIndexInGroup:"+nIndexInGroup); /** 事件发生时间,带时区偏差的UTC时间,单位:秒*/ int nUTC = msg.nUTC; System.out.println("nUTC:"+nUTC); /** 相对事件时间戳,单位毫秒*/ double dbPTS = msg.dbPTS; System.out.println("dbPTS:"+dbPTS); /** 事件时间毫秒数*/ int nUTCMS=msg.nUTCMS; System.out.println("nUTCMS:"+nUTCMS); /** 事件编号,用来唯一标志一个事件*/ int nEventID=msg.nEventID; System.out.println("nEventID:"+nEventID); /** 裸土实际占比,取值0~100*/ int nRatio=msg.nRatio; System.out.println("nRatio:"+nRatio); /** 全景广角图*/ NetSDKLib.SCENE_IMAGE_INFO stuSceneImage=msg.stuSceneImage; if ( stuSceneImage.nLength > 0) { String sencePicture = picturePath + "\\" + System.currentTimeMillis() + "sence.jpg"; ToolKits.savePicture(pBuffer, stuSceneImage.nOffSet, stuSceneImage.nLength, sencePicture); } /** 通道号*/ int nChannelID=msg.nChannelID; System.out.println("nChannelID:"+nChannelID); /** 0:脉冲,1:开始, 2:停止*/ int nAction=msg.nAction; System.out.println("nAction:"+nAction); /** 事件发生的时间*/ System.out.println("stuUTC:"+msg.stuUTC.toStringTime()); NetSDKLib.NET_INTELLIGENCE_IMAGE_INFO netIntelligenceImageInfo = msg.stuOriginalImage; if ( netIntelligenceImageInfo.nLength > 0) { String intelligenceImage = picturePath + "\\" + System.currentTimeMillis() + "image.jpg"; ToolKits.savePicture(pBuffer, netIntelligenceImageInfo.nOffSet, netIntelligenceImageInfo.nLength, intelligenceImage); } System.out.println(); break; default: System.out.println("其他事件--------------------"+ dwAlarmType); break; } return 0; } } /** * 停止侦听智能事件 */ public void DetachEventRealLoadPic() { if (this.attachHandle.longValue() != 0) { netSdk.CLIENT_StopLoadPic(this.attachHandle); } } /** * 加载测试内容 */ public void RunTest() { CaseMenu menu = new CaseMenu(); menu.addItem(new CaseMenu.Item(this, "订阅智能事件", "AttachEventRealLoadPic")); menu.addItem(new CaseMenu.Item(this, "停止侦听智能事件", "DetachEventRealLoadPic")); menu.run(); } public static void main(String[] args) { Initialization.InitTest("172.12.5.158", 37777, "admin", "admin123"); new BarelandDetectionDemo().RunTest(); Initialization.LoginOut(); } }