package com.netsdk.demo.customize; import java.io.File; import com.netsdk.demo.customize.VPRLib.T_VLPINFO; import com.netsdk.demo.util.CaseMenu; import com.netsdk.lib.ToolKits; import com.sun.jna.Memory; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; public class CarPlateRecognition { /*static NetSDKLib netsdkApi=NetSDKLib.NETSDK_INSTANCE; static NetSDKLib configApi = NetSDKLib.CONFIG_INSTANCE;*/ /*static { System.setProperty("jna.debug_load", "1"); }*/ static VPRLib vprlib = VPRLib.VPR_INSTANCE; static VPRLib config = VPRLib.VPR_config; private static int nHandle; /*// 设备断线回调: 通过 CLIENT_Init 设置该回调函数,当设备出现断线时,SDK会调用该函数 public class fDisConnectCB implements NetSDKLib.fDisConnect{ public void invoke(LLong lLoginID, String pchDVRIP, int nDVRPort, Pointer dwUser){ System.out.printf("Device[%s] Port[%d] Disconnect!\n" , pchDVRIP , nDVRPort); } } // 网络连接恢复,设备重连成功回调 // 通过 CLIENT_SetAutoReconnect 设置该回调函数,当已断线的设备重连成功时,SDK会调用该函数 public class HaveReConnect implements NetSDKLib.fHaveReConnect { public void invoke(LLong loginHandle, String pchDVRIP, int nDVRPort, Pointer dwUser) { System.out.printf("ReConnect Device[%s] Port[%d]\n", pchDVRIP, nDVRPort); } } private fDisConnectCB m_DisConnectCB = new fDisConnectCB(); private HaveReConnect haveReConnect = new HaveReConnect(); */ public void InitTest() { //初始化SDK库 vprlib.VLPR_Init(); /*// 设置断线重连回调接口,设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作 // 此操作为可选操作,但建议用户进行设置 netsdkApi.CLIENT_SetAutoReconnect(haveReConnect, null); //设置登录超时时间和尝试次数,可选 int waitTime = 10000; //登录请求响应超时时间设置为5S int tryTimes = 3; //登录时尝试建立链接3次 netsdkApi.CLIENT_SetConnectTime(waitTime, tryTimes); // 设置更多网络参数,NET_PARAM的nWaittime,nConnectTryNum成员与CLIENT_SetConnectTime // 接口设置的登录设备超时时间和尝试次数意义相同,可选 NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM(); netParam.nConnectTime = 10000; //登录时尝试建立链接的超时时间 netsdkApi.CLIENT_SetNetworkParam(netParam); // 打开日志,可选 NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO(); File path = new File("."); String logPath = path.getAbsoluteFile().getParent() + File.separator + "sdklog"; File file = new File(logPath); if (!file.exists()) { file.mkdir(); } logPath = file + File.separator + "123456789.log"; setLog.bSetFilePath = 1; System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length); System.out.println(); setLog.bSetPrintStrategy = 1; setLog.nPrintStrategy = 0; boolean bLogopen = netsdkApi.CLIENT_LogOpen(setLog); if (!bLogopen) { System.err.println("Failed to open NetSDK log !!!"); }*/ // 向设备登入 int nType = 1; String sParas = "172.23.30.60,37777,admin,admin123"; nHandle= vprlib.VLPR_Login(nType, sParas); if(nHandle>0) { System.out.printf("Login Device Port Success!\n"); } else { System.out.printf("Login Device Port Fail.Last Error[%d]\n" , nHandle); EndTest(); } } public void EndTest() { System.out.println("End Test"); if( nHandle> 0) { vprlib.VLPR_Logout(nHandle); } System.out.println("See You..."); vprlib.VLPR_Deinit(); System.exit(0); } //手动抓图 public void ManualSnap(){ int nRet=vprlib.VLPR_ManualSnap(nHandle); if(nRet==0){ System.out.printf("VLPR_ManualSnap success!"); Pointer pUser=new Memory(128); int SetResult=vprlib.VLPR_SetResultCallBack(nHandle, RpFunc, pUser); if(SetResult==0){ System.out.println("VLPR_SetResultCallBack Success"); }else{ System.err.printf("VLPR_SetResultCallBack Failed! [%d]\n", SetResult); } }else{ System.err.printf("VLPR_ManualSnap Failed! [%d]\n", nHandle); } } public void GetInfo(){ Pointer pUser=new Memory(128); int SetResult=vprlib.VLPR_SetStatusCallBack(nHandle, 10002, SpFunc, pUser); if(SetResult==0){ System.out.println("VLPR_SetStatusCallBack Success"); }else{ System.err.printf("VLPR_SetStatusCallBack Failed! [%d]\n", SetResult); } } private CBFun_GetRegRt RpFunc = new CBFun_GetRegRt(); private CBFun_GetDevSs SpFunc =new CBFun_GetDevSs(); /*public void CBfun_get() { int SetResult=vprlib.VLPR_SetResultCallBack(nHandle, RpFunc, null); if(SetResult==0){ System.out.println("VLPR_SetResultCallBack Success Channel: " + nHandle); }else{ System.err.printf("VLPR_SetResultCallBack Failed! [%d]\n", nHandle); } }*/ public class CBFun_GetRegRt implements VPRLib.CBFun_GetRegResult{ @Override public void invoke(int nHandle, T_VLPINFO pVlpResult, Pointer pUser) { // TODO Auto-generated method stub if(RpFunc==null){ System.out.println("CBFun_GetRegResult Failed!"); }else{ File path = new File("D:/EventPicture/"); if (!path.exists()) { path.mkdir(); } System.out.println("车牌颜色"+pVlpResult.vlpColor+"车牌号"+pVlpResult.vlpText); //场景图 String strFileName = path + "\\" + System.currentTimeMillis() + ".jpg"; ToolKits.savePicture(pVlpResult.image[0] , pVlpResult.imageLength[0] , strFileName); //车牌图 ToolKits.savePicture(pVlpResult.image[1] , pVlpResult.imageLength[1] , strFileName); //二值化图 ToolKits.savePicture(pVlpResult.image[2] , pVlpResult.imageLength[2] , strFileName); } } } public class CBFun_GetDevSs implements VPRLib.CBFun_GetDevStatus{ @Override public void invoke(int nHandle, int nStatus, Pointer pUser) { // TODO Auto-generated method stub if(SpFunc==null){ System.out.println("CBFun_GetDevSs Failed!"); }else{ getStatusCode(); } } } public void getStatusCode(){ IntByReference pStatusCode=new IntByReference(); int nRet=vprlib.VLPR_GetStatus(nHandle, pStatusCode); switch(nRet){ case VPRLib.RET_OK:{ System.out.println("操作成功 状态:" + pStatusCode.getValue()); break; } default: System.out.println("操作失败"); } getStatusMsg(pStatusCode.getValue()); } public void getStatusMsg(int nStatusCode){ int nStatusMsgLen = 128; Pointer sStatusMsg=new Memory(nStatusMsgLen); sStatusMsg.clear(nStatusMsgLen); int nRet = vprlib.VLPR_GetStatusMsg(nStatusCode, sStatusMsg, nStatusMsgLen); switch(nRet){ case VPRLib.RET_OK:{ System.out.println("操作成功 状态信息:" + new String(sStatusMsg.getByteArray(0, nStatusMsgLen)).trim()); // 中文要转GBK break; } default: System.out.println("操作失败 "); break; } GetHWVersion(); } public void GetHWVersion(){ int nHWVerMaxLen=128; int nAPIVerMaxLen=128; Pointer sHWVersion=new Memory(nHWVerMaxLen); Pointer sAPIVersion=new Memory(nAPIVerMaxLen); sHWVersion.clear(nHWVerMaxLen); sAPIVersion.clear(nAPIVerMaxLen); int nRet=vprlib.VLPR_GetHWVersion(nHandle, sHWVersion, nHWVerMaxLen, sAPIVersion, nAPIVerMaxLen); switch(nRet){ case VPRLib.RET_OK:{ System.out.println("操作成功 硬件版本信息:" + new String(sHWVersion.getByteArray(0, nHWVerMaxLen)).trim()+"/n"+"设备固件版本信息"+ new String(sAPIVersion.getByteArray(0, nAPIVerMaxLen)).trim()); // 中文要转GBK break; } default: System.out.println("操作失败 "); } } public void run(){ System.out.println("Run Test"); CaseMenu menu = new CaseMenu(); menu.addItem(new CaseMenu.Item(this , "ManualSnap", "ManualSnap")); menu.addItem(new CaseMenu.Item(this , "GetInfo", "GetInfo")); menu.run(); } public static void main(String[]args){ CarPlateRecognition CPR=new CarPlateRecognition(); CPR.InitTest(); CPR.run(); CPR.EndTest(); } }