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_BREED_DETECTION_INFO; import com.netsdk.lib.structure.NET_VAOBJECT_ANIMAL_INFO; 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 ERR220413169 * @date 2022/4/15 15:18 */ public class BreedDetectionDemo extends Initialization { private static String ipAddr = "172.11.1.113"; private static int port = 37777; private static String user = "admin"; private static String password = "admin123"; 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_BREED_DETECTION, bNeedPicture, AnalyzerDataCB.getInstance(), null, null); if (attachHandle.longValue() != 0) { System.out.printf("Chn[%d] CLIENT_RealLoadPictureEx Success\n", channel); } else { System.out.printf("Chn[%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; } @Override 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_BREED_DETECTION : { System.out.println("智慧养殖检测事件"); //智慧养殖检测事件 (对应 DEV_EVENT_BREED_DETECTION_INFO) DEV_EVENT_BREED_DETECTION_INFO msg=new DEV_EVENT_BREED_DETECTION_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); //通道号 int nChannelID = msg.nChannelID; System.out.println("nChannelID:"+nChannelID); //0:脉冲 1:开始 2:停止 int nAction = msg.nAction; System.out.println("nAction:"+nAction); //事件名称 byte[] szName = msg.szName; try { System.out.println("szName utf-8:"+new String(szName,"utf-8")); System.out.println("szName gbk:"+new String(szName,"gbk")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } // 事件发生的时间 System.out.println("UTC:"+msg.UTC); // 事件ID int nEventID = msg.nEventID; System.out.println("事件ID:"+nEventID); //智能事件所属大类 {@link com.netsdk.lib.NetSDKLib.EM_CLASS_TYPE} System.out.println("emClassType:"+msg.emClassType); //全景广角图 NetSDKLib.SCENE_IMAGE_INFO_EX stuSceneImage = msg.stuSceneImage; if ( stuSceneImage.nLength > 0) { String senceExPicture = picturePath + "\\" + System.currentTimeMillis() + "senceEx.jpg"; ToolKits.savePicture(pBuffer, stuSceneImage.nOffSet, stuSceneImage.nLength, senceExPicture); } //检测到的物体个数 int nObjectNum = msg.nObjectNum; System.out.println("nObjectNum:"+nObjectNum); //检测到的物体信息 NET_VAOBJECT_ANIMAL_INFO[] stuObjects = msg.stuObjects; for (int i=0;i 0) { String sencePicture = picturePath + "\\" + System.currentTimeMillis() + "sence.jpg"; ToolKits.savePicture(pBuffer, stuImageData.nOffSet, stuImageData.nLength, sencePicture); } } 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() { System.out.println("Run Test"); CaseMenu menu = new CaseMenu(); menu.addItem((new CaseMenu.Item(this , "AttachEventRealLoadPic" , "AttachEventRealLoadPic"))); menu.addItem((new CaseMenu.Item(this , "DetachEventRealLoadPic" , "DetachEventRealLoadPic"))); menu.run(); } public static void main(String[] args){ InitTest(ipAddr, port, user, password); BreedDetectionDemo breedDetectionDemo=new BreedDetectionDemo(); breedDetectionDemo.RunTest(); LoginOut(); } }