package com.ruoyi.HIKVISION.NetSDK; //import com.ruoyi.aibox.domain.AiAlarmInfo; import com.sun.jna.Pointer; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.text.SimpleDateFormat; import java.util.Date; //布防回调函数 public class FMSGCallBack_V31 implements HCNetSDK.FMSGCallBack_V31 { //报警信息回调函数 public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { AlarmDataHandle(lCommand, pAlarmer, pAlarmInfo, dwBufLen, pUser); return true; } public void AlarmDataHandle(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { // System.out.println("报警事件发生,进入回调"); // String hexString = Integer.toHexString(lCommand); // System.out.println("报警类型 = " + hexString); // String[] sIP = new String(pAlarmer.sDeviceIP).split("\0", 2); // String[] sDeviceName = new String(pAlarmer.sDeviceName).split("\0", 2); // System.out.println("收到报警信息pAlarmInfo:"+pAlarmInfo.toString()); // System.out.println("报警设备IP地址:"+sIP.toString()); // System.out.println("报警设备名称:"+sDeviceName.toString()); // System.out.println("报警类型 lCommand:" + Integer.toHexString(lCommand)); // switch (lCommand) { // case HCNetSDK.COMM_SNAP_MATCH_ALARM://人脸黑名单比对报警 // System.out.println("SNAP_MATCH_ALARM"); // HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM strFaceSnapMatch = new HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM(); // strFaceSnapMatch.write(); // Pointer pFaceSnapMatch = strFaceSnapMatch.getPointer(); // pFaceSnapMatch.write(0, pAlarmInfo.getByteArray(0, strFaceSnapMatch.size()), 0, strFaceSnapMatch.size()); // strFaceSnapMatch.read(); // //比对结果 // System.out.println("比对结果:" + (strFaceSnapMatch.byContrastStatus == 1 ? "比对成功" : "比对失败")); // //人脸库ID // if (strFaceSnapMatch.struBlockListInfo.dwFDIDLen > 0) { // long offset1 = 0; // ByteBuffer buffers1 = strFaceSnapMatch.struBlockListInfo.pFDID.getByteBuffer(offset1, strFaceSnapMatch.struBlockListInfo.dwFDIDLen); // byte[] bytes1 = new byte[strFaceSnapMatch.struBlockListInfo.dwFDIDLen]; // buffers1.get(bytes1); // System.out.println("人脸库ID:" + new String(bytes1)); // } // //人脸库图片ID // if (strFaceSnapMatch.struBlockListInfo.dwPIDLen > 0) { // long offset2 = 0; // ByteBuffer buffers2 = strFaceSnapMatch.struBlockListInfo.pPID.getByteBuffer(offset2, strFaceSnapMatch.struBlockListInfo.dwPIDLen); // byte[] bytes2 = new byte[strFaceSnapMatch.struBlockListInfo.dwPIDLen]; // buffers2.get(bytes2); // System.out.println("图片ID:" + new String(bytes2)); // } // //保存抓拍人脸图,图片数据传输方式: 0- 二进制 // if ((strFaceSnapMatch.dwSnapPicLen > 0) && (strFaceSnapMatch.byPicTransType == 0)) { // SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); // String newName = sf.format(new Date()); // FileOutputStream fout; // try { // String filename = ".//pic//" + newName + "_pSnapPicBuffer" + ".jpg"; // fout = new FileOutputStream(filename); // //将字节写入文件 // long offset = 0; // ByteBuffer buffers = strFaceSnapMatch.pSnapPicBuffer.getByteBuffer(offset, strFaceSnapMatch.dwSnapPicLen); // byte[] bytes = new byte[strFaceSnapMatch.dwSnapPicLen]; // buffers.rewind(); // buffers.get(bytes); // fout.write(bytes); // fout.close(); // } catch (FileNotFoundException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // //保存抓拍人脸图URL,图片数据传输方式: 1- URL 注:超脑设备人脸比对报警图片一般按照URL上传,根据URL去下载设备中存储的图片,认证方式选择:摘要认证 // if ((strFaceSnapMatch.dwSnapPicLen > 0) && (strFaceSnapMatch.byPicTransType == 1)) { // long offset = 0; // ByteBuffer buffers = strFaceSnapMatch.pSnapPicBuffer.getByteBuffer(offset, strFaceSnapMatch.dwSnapPicLen); // byte[] bytes = new byte[strFaceSnapMatch.dwSnapPicLen]; // buffers.rewind(); // buffers.get(bytes); // System.out.println("人脸抓拍图片 URL:" + new String(bytes)); // } // if ((strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen > 0) && (strFaceSnapMatch.byPicTransType == 0)) { // SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); // String newName = sf.format(new Date()); // FileOutputStream fout; // try { // String filename = ".//pic//" + newName + "_struSnapInfo_pBuffer1" + ".jpg"; // fout = new FileOutputStream(filename); // //将字节写入文件 // long offset = 0; // ByteBuffer buffers = strFaceSnapMatch.struSnapInfo.pBuffer1.getByteBuffer(offset, strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen); // byte[] bytes = new byte[strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen]; // buffers.rewind(); // buffers.get(bytes); // fout.write(bytes); // fout.close(); // } catch (FileNotFoundException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // if ((strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen > 0) && (strFaceSnapMatch.byPicTransType == 1)) { // long offset = 0; // ByteBuffer buffers = strFaceSnapMatch.struSnapInfo.pBuffer1.getByteBuffer(offset, strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen); // byte[] bytes = new byte[strFaceSnapMatch.struSnapInfo.dwSnapFacePicLen]; // buffers.rewind(); // buffers.get(bytes); // System.out.println("人脸抓拍图片1 URL:" + new String(bytes)); // } // //保存人脸库图片,图片数据传输方式: 0- 二进制 // if ((strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen > 0) && (strFaceSnapMatch.byPicTransType == 0)) { // SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); // String newName = sf.format(new Date()); // FileOutputStream fout; // try { // String filename = ".//pic//" + newName + "_fSimilarity_" + strFaceSnapMatch.fSimilarity + "_struBlackListInfo_pBuffer1" + ".jpg"; // fout = new FileOutputStream(filename); // //将字节写入文件 // long offset = 0; // ByteBuffer buffers = strFaceSnapMatch.struBlockListInfo.pBuffer1.getByteBuffer(offset, strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen); // byte[] bytes = new byte[strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen]; // buffers.rewind(); // buffers.get(bytes); // fout.write(bytes); // fout.close(); // } catch (FileNotFoundException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // //保存人脸库图片,图片数据传输方式: 1-URL // if ((strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen > 0) && (strFaceSnapMatch.byPicTransType == 1)) { // long offset = 0; // ByteBuffer buffers = strFaceSnapMatch.struBlockListInfo.pBuffer1.getByteBuffer(offset, strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen); // byte[] bytes = new byte[strFaceSnapMatch.struBlockListInfo.dwBlockListPicLen]; // buffers.rewind(); // buffers.get(bytes); // System.out.println("人脸库图片 URL:" + new String(bytes)); // } // //抓拍库附加信息数据指针,附加信息的XML文本中包含人脸温度数据 // if (strFaceSnapMatch.struBlockListInfo.struBlockListInfo.dwFCAdditionInfoLen > 0) { // long offset = 0; // ByteBuffer buffers = strFaceSnapMatch.struBlockListInfo.struBlockListInfo.pFCAdditionInfoBuffer.getByteBuffer(offset, strFaceSnapMatch.struBlockListInfo.struBlockListInfo.dwFCAdditionInfoLen); // byte[] bytes = new byte[strFaceSnapMatch.struBlockListInfo.struBlockListInfo.dwFCAdditionInfoLen]; // buffers.rewind(); // buffers.get(bytes); // System.out.println("抓拍库附加信息:" + new String(bytes)); // } // AiAlarmInfo alarmInfo = new AiAlarmInfo(); // alarmInfo.setCategory("1");//报警类型(1三违,2隐患) // alarmInfo.setSmallClass("25");//报警事件(字典aibox_rule_type) // break; // case HCNetSDK.COMM_FIREDETECTION_ALARM://烟火检测 // HCNetSDK.NET_DVR_FIREDETECTION_ALARM struFireDecAlarm = new HCNetSDK.NET_DVR_FIREDETECTION_ALARM(); // struFireDecAlarm.write(); // Pointer pFireDecAlarm = struFireDecAlarm.getPointer(); // pFireDecAlarm.write(0, pAlarmInfo.getByteArray(0, struFireDecAlarm.size()), 0, struFireDecAlarm.size()); // struFireDecAlarm.read(); // String sFireDecAlarmInfo = "绝对时间:" + struFireDecAlarm.dwAbsTime + ",报警子类型:" + struFireDecAlarm.byAlarmSubType + ",火点最高温度 :" + // struFireDecAlarm.wFireMaxTemperature + ",火点目标距离:" + struFireDecAlarm.wTargetDistance; // System.out.println(sFireDecAlarmInfo); // //可见光图片保存 // if ((struFireDecAlarm.dwVisiblePicLen > 0) && (struFireDecAlarm.byPicTransType == 0)) { // SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); // String newName = sf.format(new Date()); // FileOutputStream fout; // // try { // String filename = "../pic/" + newName + "_FireDecAlarm" + ".jpg"; // fout = new FileOutputStream(filename); // //将字节写入文件 // long offset = 0; // ByteBuffer buffers = struFireDecAlarm.pVisiblePicBuf.getByteBuffer(offset, struFireDecAlarm.dwVisiblePicLen); // byte[] bytes = new byte[struFireDecAlarm.dwVisiblePicLen]; // buffers.rewind(); // buffers.get(bytes); // fout.write(bytes); // fout.close(); // } catch (FileNotFoundException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // //热成像图片保存 // if ((struFireDecAlarm.dwPicDataLen > 0) && (struFireDecAlarm.byPicTransType == 0)) { // SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); // String newName = sf.format(new Date()); // FileOutputStream fout; // // try { // String filename = "../pic/" + newName + "_" + "_ThermalFireAlarm" + ".jpg"; // fout = new FileOutputStream(filename); // //将字节写入文件 // long offset = 0; // ByteBuffer buffers = struFireDecAlarm.pBuffer.getByteBuffer(offset, struFireDecAlarm.dwPicDataLen); // byte[] bytes = new byte[struFireDecAlarm.dwPicDataLen]; // buffers.rewind(); // buffers.get(bytes); // fout.write(bytes); // fout.close(); // } catch (FileNotFoundException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // // } // break; // case HCNetSDK.COMM_VCA_ALARM: // 智能检测通用报警(Json或者XML数据结构) PS:这里用来接受安全帽报警 // String sAlarmInfo = new String(pAlarmer.sDeviceIP); // //报警数据类型:0- invalid,1- xml,2- json // sAlarmInfo = "报警设备IP:" + sAlarmInfo; // System.out.println(sAlarmInfo); // // SimpleDateFormat sf0 = new SimpleDateFormat("yyyyMMddHHmmss"); // String curTime0 = sf0.format(new Date()); // FileOutputStream Data; // String jsonfile = "../pic" + new String(pAlarmer.sDeviceIP).trim() + curTime0 + "_VCA_ALARM_" + ".json"; // try { // Data = new FileOutputStream(jsonfile); // //将字节写入文件 // ByteBuffer dataBuffer = pAlarmInfo.getByteBuffer(0, dwBufLen); // byte[] dataByte = new byte[dwBufLen]; // dataBuffer.rewind(); // dataBuffer.get(dataByte); // Data.write(dataByte); // Data.close(); // } catch (FileNotFoundException e) { // e.printStackTrace(); // } catch (IOException e) { // e.printStackTrace(); // } // break; // case HCNetSDK.COMM_ALARM_RULE: //行为分析信息 PS:用来实现区域闯入报警 // HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM(); // strVcaAlarm.write(); // Pointer pVCAInfo = strVcaAlarm.getPointer(); // pVCAInfo.write(0, pAlarmInfo.getByteArray(0, strVcaAlarm.size()), 0, strVcaAlarm.size()); // strVcaAlarm.read(); // switch (strVcaAlarm.struRuleInfo.wEventTypeEx) { // case 1: //穿越警戒面 (越界侦测) // System.out.println("穿越警戒面报警发生"); // break; // case 2: //目标进入区域 // // System.out.println("目标进入区域报警发生"); // // break; // case 3: //目标离开区域 // System.out.println("目标离开区域报警触发"); // case 4: //周界入侵 // // System.out.println("周界入侵报警发生"); // // break; // case 5: //徘徊 // System.out.println("徘徊事件触发"); // // break; // case 8: //快速移动(奔跑), // System.out.println("快速移动(奔跑)事件触发"); // break; // case 15: //离岗 // System.out.println("离岗事件触发"); // case 20: //倒地检测 // System.out.println("倒地事件触发"); // break; // case 44: //玩手机 // System.out.println("玩手机报警发生"); // if ((strVcaAlarm.dwPicDataLen > 0) && (strVcaAlarm.byPicTransType == 0)) { // SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); // String newName = sf.format(new Date()); // FileOutputStream fout; // try { // String filename = "../pic/" + newName + "PLAY_CELLPHONE_" + ".jpg"; // fout = new FileOutputStream(filename); // //将字节写入文件 // long offset = 0; // ByteBuffer buffers = strVcaAlarm.pImage.getByteBuffer(offset, strVcaAlarm.dwPicDataLen); // byte[] bytes = new byte[strVcaAlarm.dwPicDataLen]; // buffers.rewind(); // buffers.get(bytes); // fout.write(bytes); // fout.close(); // } catch (FileNotFoundException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // break; // case 45: //持续检测 // System.out.println("持续检测事件触发"); // default: // System.out.println("行为事件类型:"+strVcaAlarm.struRuleInfo.wEventTypeEx); // break; // } // break; // case HCNetSDK.COMM_ISAPI_ALARM: //ISAPI协议报警信息 PS:用来实现人员密集度报警 // HCNetSDK.NET_DVR_ALARM_ISAPI_INFO struEventISAPI = new HCNetSDK.NET_DVR_ALARM_ISAPI_INFO(); // struEventISAPI.write(); // Pointer pEventISAPI = struEventISAPI.getPointer(); // pEventISAPI.write(0, pAlarmInfo.getByteArray(0, struEventISAPI.size()), 0, struEventISAPI.size()); // struEventISAPI.read(); // sAlarmInfo = new String(pAlarmer.sDeviceIP); // //报警数据类型:0- invalid,1- xml,2- json // sAlarmInfo = "报警设备IP:" + sAlarmInfo + ":ISAPI协议报警信息, 数据格式:" + struEventISAPI.byDataType + // ", 图片个数:" + struEventISAPI.byPicturesNumber; // System.out.println(sAlarmInfo); // // //报警数据保存 // SimpleDateFormat sf1 = new SimpleDateFormat("yyyyMMddHHmmss"); // String curTime1 = sf1.format(new Date()); // FileOutputStream foutdata; // try { // String jsonfilename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() + curTime1 + "_ISAPI_Alarm_" + ".json"; // foutdata = new FileOutputStream(jsonfilename); // //将字节写入文件 // ByteBuffer jsonbuffers = struEventISAPI.pAlarmData.getByteBuffer(0, struEventISAPI.dwAlarmDataLen); // byte[] jsonbytes = new byte[struEventISAPI.dwAlarmDataLen]; // jsonbuffers.rewind(); // jsonbuffers.get(jsonbytes); // foutdata.write(jsonbytes); // foutdata.close(); // } catch (FileNotFoundException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // //图片数据保存 // for (int i = 0; i < struEventISAPI.byPicturesNumber; i++) { // HCNetSDK.NET_DVR_ALARM_ISAPI_PICDATA struPicData = new HCNetSDK.NET_DVR_ALARM_ISAPI_PICDATA(); // struPicData.write(); // Pointer pPicData = struPicData.getPointer(); // pPicData.write(0, struEventISAPI.pPicPackData.getByteArray(i * struPicData.size(), struPicData.size()), 0, struPicData.size()); // struPicData.read(); // // FileOutputStream fout; // try { // String filename = "../pic/" + new String(pAlarmer.sDeviceIP).trim() + curTime1 + // "_ISAPIPic_" + i + "_" + new String(struPicData.szFilename).trim() + ".jpg"; // fout = new FileOutputStream(filename); // //将字节写入文件 // long offset = 0; // ByteBuffer buffers = struPicData.pPicData.getByteBuffer(offset, struPicData.dwPicLen); // byte[] bytes = new byte[struPicData.dwPicLen]; // buffers.rewind(); // buffers.get(bytes); // fout.write(bytes); // fout.close(); // } catch (FileNotFoundException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } catch (IOException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } // break; // } } }