package com.netsdk.demo.customize.XRayDetection; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.NetSDKLib; import com.netsdk.lib.ToolKits; import com.netsdk.lib.enumeration.EM_EVENT_IVS_TYPE; import com.netsdk.lib.structure.*; import com.netsdk.lib.utils.Initialization; import com.sun.jna.Pointer; import java.io.File; import java.util.Arrays; import java.util.Date; import java.util.Objects; /** * @author 291189 * @version 1.0 * @description GIP210826019 * @date 2021/9/9 11:07 */ public class XRayDetectionDemo 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.EVENI_IVS_XRAY_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; } int count=0; @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 (Objects.requireNonNull(EM_EVENT_IVS_TYPE.getEventType(dwAlarmType))) { case EVENI_IVS_XRAY_DETECTION : { System.out.println("X光检测事件"); count++; DEV_EVENT_XRAY_DETECTION_INFO msg = new DEV_EVENT_XRAY_DETECTION_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); // 通道号 int nChannelID = msg.nChannelID; System.out.println("nChannelID:" + nChannelID); //事件名称 byte[] szName = msg.szName; System.out.println("szName:" + new String(szName)); //相对事件时间戳(单位是毫秒) double pts = msg.PTS; System.out.println("pts:" + new Date((long) pts)); //UTC时间 NET_TIME_EX UTC = msg.UTC; System.out.println("UTC:" + UTC.toStringTime()); //所属大类 int emClassType = msg.emClassType; System.out.println("emClassType:" + emClassType); //事件id int nEventID = msg.nEventID; System.out.println("nEventID:" + nEventID); //危险等级 int emDangerGrade = msg.stuPacketInfo.emDangerGrade; System.out.println("stuPacketInfo.emDangerGrade:" + emDangerGrade); //主视角包裹内物品个数 int nObjectNum = msg.nObjectNum; System.out.println("nObjectNum:" + nObjectNum); // 主视角包裹内物品信息 for(int i = 0; i < nObjectNum; i ++){ NET_INSIDE_OBJECT stuInsideObj = msg.stuInsideObj[i]; System.out.println("stuInsideObj["+i+"]:" + stuInsideObj.toString()); } //从视角包裹内物品个数 int nSlaveViewObjectNum = msg.nSlaveViewObjectNum; System.out.println("nSlaveViewObjectNum:" + nSlaveViewObjectNum); // 从视角包裹内物品信息 for(int i = 0; i < nSlaveViewObjectNum; i ++){ NET_INSIDE_OBJECT stuSlaveViewInsideObj = msg.stuSlaveViewInsideObj[i]; System.out.println("stuSlaveViewInsideObj["+i+"]:" + stuSlaveViewInsideObj.toString()); } //图片数量 int nImageCount = msg.nImageCount; System.out.println("nImageCount:" + nImageCount); int picSizes = 0; // 图片信息 for(int i = 0; i < nImageCount; i ++){ NET_XRAY_IMAGE_INFO stuImageInfo = msg.stuImageInfo[i]; System.out.println("stuImageInfo["+i+"]:" + stuImageInfo.toString()); //图片 if (stuImageInfo != null && stuImageInfo.nLength > 0) { picSizes += stuImageInfo.nLength; String picture = picturePath + "\\" + System.currentTimeMillis() + "related.jpg"; ToolKits.savePicture(pBuffer, stuImageInfo.nOffset, stuImageInfo.nLength, picture); } } // 客户自定义信息个数 int nViewCustomInfoNum = msg.nViewCustomInfoNum; System.out.println("nViewCustomInfoNum:" + nViewCustomInfoNum); // 客户自定义信息, X光机专用 for(int i = 0; i < nViewCustomInfoNum; i ++){ NetSDKLib.NET_XRAY_CUSTOM_INFO stuViewCustomInfo = msg.stuViewCustomInfo[i]; System.out.println("stuViewCustomInfo["+i+"]:" + stuViewCustomInfo.toString()); } // 包裹标识 String szPackageTag = Arrays.toString(msg.szPackageTag); System.out.println("szPackageTag:" + szPackageTag); // 包裹产生方式 int emPackageMode = msg.emPackageMode; System.out.println("emPackageMode:" + emPackageMode); // 关联图片数量 int nRelatedImageNum = msg.nRelatedImageNum; System.out.println("nRelatedImageNum:" + nRelatedImageNum); // 客户自定义信息, X光机专用 for(int i = 0; i < nRelatedImageNum; i ++){ NET_XRAY_RELATED_IMAGE_INFO stuRelatedImageInfo = msg.stuRelatedImageInfo[i]; System.out.println("stuRelatedImageInfo["+i+"]:" + stuRelatedImageInfo.toString()); //图片 stuRelatedImageInfo if (stuRelatedImageInfo != null && stuRelatedImageInfo.nLength > 0) { picSizes += stuRelatedImageInfo.nLength; String picture = picturePath + "\\" + System.currentTimeMillis() + "related2.jpg"; ToolKits.savePicture(pBuffer, stuRelatedImageInfo.nOffset, stuRelatedImageInfo.nLength, picture); } } 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) { XRayDetectionDemo XRayDetectionDemo=new XRayDetectionDemo(); InitTest("10.35.232.160",37777,"admin","admin123"); XRayDetectionDemo.RunTest(); LoginOut(); } }