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.utils.Initialization; import com.sun.jna.Pointer; import java.io.File; import java.util.UUID; /** * @author 291189 * @version 1.0 * @description ERR211214075 * @date 2021/12/29 15:28 */ public class TrafficCarDemo extends Initialization { public static NetSDKLib.LLong AttachHandle=new NetSDKLib.LLong(0); /** * 通道号 */ static int ChannelId = 0; /** * 订阅智能事件 * @return */ public static void AttachEventRealLoadPic() { /** * 说明: * 通道数可以在有登录是返回的信息 m_stDeviceInfo.byChanNum 获取 */ //先关闭,再开启 if(AttachHandle.intValue()!=0){ DetachEventRealLoadPic(); } int bNeedPicture = 1; // 是否需要图片 AttachHandle =netSdk.CLIENT_RealLoadPictureEx(loginHandle, ChannelId, netSdk.EVENT_IVS_TRAFFICJUNCTION, bNeedPicture , AnalyzerDataCB.getInstance() , null , null); if( AttachHandle.longValue() != 0 ) { System.out.println("CLIENT_RealLoadPictureEx Success ChannelId : \n" + ChannelId); } else { throw new RuntimeException("CLIENT_RealLoadPictureEx Failed!" + ToolKits.getErrorCode()); } } /** * 停止侦听智能事件 */ public static void DetachEventRealLoadPic() { if (AttachHandle.longValue() != 0) { netSdk.CLIENT_StopLoadPic(AttachHandle); } } /** 写成静态主要是防止被回收 */ private static class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack { private String m_imagePath; NetSDKLib.NET_MSG_OBJECT m_stuObject; // 物体信息 NetSDKLib.NET_TIME_EX utc; // 事件时间 String EventMsg; // 事件信息 String bigPicture; // 大图 String smallPicture; // 小图 private AnalyzerDataCB() { m_imagePath = "./PlateNumber/"; File path = new File(m_imagePath); if (!path.exists()) { path.mkdir(); } } private static class AnalyzerDataCBHolder { private static final AnalyzerDataCB instance = new AnalyzerDataCB(); } public static AnalyzerDataCB getInstance() { return AnalyzerDataCB.AnalyzerDataCBHolder.instance; } public int invoke( NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer, int dwBufSize, Pointer dwUser, int nSequence, Pointer reserved) { if (lAnalyzerHandle.longValue() == 0 || pAlarmInfo == null) { return -1; } switch (dwAlarmType) { case NetSDKLib.EVENT_IVS_TRAFFICJUNCTION: // 交通路口事件----老规则(对应 DEV_EVENT_TRAFFICJUNCTION_INFO) { NetSDKLib.DEV_EVENT_TRAFFICJUNCTION_INFO msg = new NetSDKLib.DEV_EVENT_TRAFFICJUNCTION_INFO(); ToolKits.GetPointerData(pAlarmInfo, msg); m_stuObject = msg.stuObject; utc = msg.UTC; EventMsg = "[ "+ utc.toStringTime() + " ] " + "路口事件"; NetSDKLib.DEV_EVENT_TRAFFIC_TRAFFICCAR_INFO stTrafficCar = msg.stTrafficCar; //NetSDKLib.EM_VEHICLE_DIRECTION int emFlowDirection = stTrafficCar.emFlowDirection; System.out.println("车流量方向:"+emFlowDirection); // 保存图片 SavePlatePic(m_stuObject, pBuffer, dwBufSize); //结构化非机动车支持人体图->全景广角图 System.out.println("nOffSet(在二进制数据块中的偏移):" + msg.stuNonMotor.stuSceneImage.nOffSet); System.out.println("nLength(图片大小,单位字节):" + msg.stuNonMotor.stuSceneImage.nLength); System.out.println("nWidth(图片宽度(像素)):" + msg.stuNonMotor.stuSceneImage.nWidth); System.out.println("nHeight(图片高度(像素)):" + msg.stuNonMotor.stuSceneImage.nHeight); System.out.println("nIndexInData(在上传图片数据中的图片序号):" + msg.stuNonMotor.stuSceneImage.nIndexInData); break; } default: System.out.println("其他事件:" + dwAlarmType); break; } return 0; } // 2014年后,陆续有设备版本,支持单独传车牌小图,小图附录在pBuffer后面。 private void SavePlatePic(NetSDKLib.NET_MSG_OBJECT stuObject, Pointer pBuffer, int dwBufSize) { // 保存大图 if (pBuffer != null && dwBufSize > 0) { bigPicture = m_imagePath + "Big_" + UUID.randomUUID().toString() + ".jpg"; ToolKits.savePicture(pBuffer, 0, dwBufSize, bigPicture); } // 保存小图 if (stuObject == null) { return; } if (stuObject.bPicEnble == 1) { //根据pBuffer中数据偏移保存小图图片文件 int picLength = stuObject.stPicInfo.dwFileLenth; if (picLength > 0) { smallPicture = m_imagePath + "small_" + UUID.randomUUID().toString() + ".jpg"; ToolKits.savePicture(pBuffer, stuObject.stPicInfo.dwOffSet, picLength, smallPicture); } } } } 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) { TrafficCarDemo trafficCarDemo=new TrafficCarDemo(); //10.11.16.216 172.24.2.7 172.24.1.243 InitTest("172.29.5.42",37777,"admin","admin123"); trafficCarDemo.RunTest(); LoginOut(); } }