From 9814ba539d1d34d1a75b52e5ea015ad0d5929848 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期三, 20 十二月 2023 10:17:19 +0800 Subject: [PATCH] 增加火点检测子类型烟雾检测 --- src/main/java/com/ard/utils/sdk/hiksdk/service/impl/FMSGCallBack.java | 466 +++++++++++++++++++++++++--------------------------------- 1 files changed, 200 insertions(+), 266 deletions(-) diff --git a/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/FMSGCallBack.java b/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/FMSGCallBack.java index a5a8575..b784e5f 100644 --- a/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/FMSGCallBack.java +++ b/src/main/java/com/ard/utils/sdk/hiksdk/service/impl/FMSGCallBack.java @@ -1,6 +1,7 @@ package com.ard.utils.sdk.hiksdk.service.impl; import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import com.ard.alarm.camera.domain.ArdCameras; import com.ard.alarm.camera.domain.CameraCmd; import com.ard.alarm.camera.service.impl.ArdCamerasServiceImpl; @@ -8,6 +9,8 @@ import com.ard.alarm.external.service.impl.ArdEquipExternalServiceImpl; import com.ard.utils.sdk.hiksdk.domain.*; import com.ard.utils.minio.MinioUtil; +import com.ard.utils.sdk.hiksdk.domain.isapi.FaceCapture; +import com.ard.utils.sdk.hiksdk.domain.isapi.IsapiAlarm; import com.ard.utils.util.ByteUtils; import com.ard.utils.sdk.hiksdk.common.GlobalVariable; import com.ard.utils.sdk.hiksdk.util.hikSdkUtil.HCNetSDK; @@ -22,6 +25,7 @@ import java.nio.ByteBuffer; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.List; import java.util.Optional; import static com.ard.utils.sdk.hiksdk.util.hikSdkUtil.HCNetSDK.*; @@ -49,7 +53,7 @@ public boolean invoke(int lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser) { SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sDeviceIP = ByteUtils.bytesToStringZh(pAlarmer.sDeviceIP).trim();//璁惧IP鍦板潃 - Integer wLinkPort = Integer.valueOf(pAlarmer.wLinkPort);//璁惧閫氳绔彛 + int wLinkPort = pAlarmer.wLinkPort;//璁惧閫氳绔彛 //閫氳繃ip鍜岀鍙f煡璇㈣澶� Optional<ArdCameras> foundCamera = findArdCameraByIpAndPort(sDeviceIP, wLinkPort); Optional<ArdEquipExternal> foundExternal = findArdEquipExternalByIpAndPort(sDeviceIP, wLinkPort); @@ -66,15 +70,13 @@ if (camera == null && ardEquipExternal == null) { return false; } - CameraEventInfo cameraEventInfo; - SuperBrainEventInfo superBrainEventInfo; String alarmName = "";//鎶ヨ鍚嶇О String alarmTime;//浜嬩欢鏃堕棿 String alarmType = "";//鎶ヨ绫诲瀷 String picUrl = "";//浜嬩欢鍥剧墖 String facePicUrl = "";//浜鸿劯鎶撴媿鍥剧墖 - String faceLibUrl = "";//浜鸿劯搴撳浘鐗� int dwPicDataLen;//鍥剧墖鏁版嵁闀垮害 + int chanNo = 0;//閫氶亾鍙� //lCommand鏄紶鐨勬姤璀︾被鍨� log.debug("銆�" + sDeviceIP + ":" + wLinkPort + "銆戞姤璀︿簨浠剁被鍨�:lCommand:" + Integer.toHexString(lCommand)); switch (lCommand) { @@ -89,7 +91,16 @@ switch (netDvrAlarminfoV30.dwAlarmType) { case 3: if (camera != null) { - cameraEventHandler(camera, "绉诲姩渚︽祴", "绉诲姩渚︽祴鎶ヨ", fmt.format(new Date()), ""); + for (byte b : netDvrAlarminfoV30.byChannel) { + if (b == 1) { + chanNo = b; + switch (camera.getGdType()) { + case "0": + cameraEventHandler(camera, chanNo, "绉诲姩渚︽祴", "绉诲姩渚︽祴鎶ヨ", fmt.format(new Date()), picUrl, ""); + break; + } + } + } } break; } @@ -107,7 +118,7 @@ strVcaAlarm.read(); Integer ruleID = Integer.valueOf(strVcaAlarm.struRuleInfo.byRuleID); alarmTime = DateUtils.parseTime(strVcaAlarm.dwAbsTime);//浜嬩欢鏃堕棿 - Integer channel = Integer.valueOf(strVcaAlarm.struDevInfo.byChannel);//閫氶亾 + chanNo = Integer.valueOf(strVcaAlarm.struDevInfo.byChannel);//閫氶亾 switch (strVcaAlarm.struRuleInfo.wEventTypeEx) { case 1: //region绌胯秺璀︽垝闈� (瓒婄晫渚︽祴) alarmType = "瓒婄晫渚︽祴鎶ヨ"; @@ -163,7 +174,7 @@ alarmType = "鍊掑湴妫�娴嬩簨浠舵姤璀�"; //endregion break; - case 35: //region 鍊掑湴妫�娴� + case 35: //region 浜烘暟鍙樺寲浜嬩欢鎶ヨ alarmType = "浜烘暟鍙樺寲浜嬩欢鎶ヨ"; //endregion break; @@ -184,37 +195,23 @@ dwPicDataLen = strVcaAlarm.dwPicDataLen; int byPicTransType = strVcaAlarm.byPicTransType; if (dwPicDataLen > 0 && strVcaAlarm.pImage != null && byPicTransType == 0) { - //灏嗗瓧鑺傚啓鍏ユ枃浠� - long offset = 0; - ByteBuffer buffers = strVcaAlarm.pImage.getByteBuffer(offset, dwPicDataLen); - byte[] bytes = new byte[dwPicDataLen]; - buffers.rewind(); - buffers.get(bytes); - InputStream input = new ByteArrayInputStream(bytes); - try { - String bucketName = "pic"; - String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; - boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); - if (uploadObject) { - picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); - //log.debug("涓婁紶鏂囦欢鎴愬姛!" + picUrl); - } - } catch (Exception e) { - log.error("寮傚父琛屼负璇嗗埆淇℃伅鎶ヨ淇℃伅涓婃姤鍥剧墖淇濆瓨澶辫触" + e.getMessage()); - } + picUrl = saveBinPicToMinio(strVcaAlarm.pImage, dwPicDataLen); } if (camera != null) { - camera.setChannel(channel); - cameraEventHandler(camera, alarmName, alarmType, alarmTime, picUrl); - } - if (ardEquipExternal != null) { alarmName = "寮傚父琛屼负璇嗗埆"; - superBrainEventHandler(ardEquipExternal, channel, alarmName, alarmType, alarmTime, picUrl, ""); + switch (camera.getGdType()) { + case "0": + cameraEventHandler(camera, chanNo, alarmName, alarmType, alarmTime, picUrl, ""); + break; + case "3": + superBrainEventHandler(camera, chanNo, alarmName, alarmType, alarmTime, picUrl, ""); + break; + } } //endregion break; case COMM_UPLOAD_FACESNAP_RESULT: - log.debug("浜鸿劯鎶撴媿鎶ヨ淇℃伅(鏆備笉瑙f瀽)"); + log.debug("浜鸿劯鎶撴媿鎶ヨ淇℃伅涓婃姤"); //region 浜鸿劯鎶撴媿鎶ヨ淇℃伅 HCNetSDK.NET_VCA_FACESNAP_RESULT struFaceSnap = new HCNetSDK.NET_VCA_FACESNAP_RESULT(); struFaceSnap.write(); @@ -223,6 +220,7 @@ struFaceSnap.read(); alarmTime = DateUtils.parseTime(struFaceSnap.dwAbsTime); String facePicTyp; + chanNo = struFaceSnap.struDevInfo.byChannel; switch (struFaceSnap.byUploadEventDataType) { case 0: facePicTyp = "浜岃繘鍒舵暟鎹�"; @@ -235,63 +233,38 @@ break; } if (struFaceSnap.dwFacePicLen > 0 && struFaceSnap.pBuffer1 != null) { - //灏嗗瓧鑺傚啓鍏ユ枃浠� - long offset = 0; - ByteBuffer buffers = struFaceSnap.pBuffer1.getByteBuffer(offset, struFaceSnap.dwBackgroundPicLen); - byte[] bytes = new byte[struFaceSnap.dwBackgroundPicLen]; - buffers.rewind(); - buffers.get(bytes); - InputStream input = new ByteArrayInputStream(bytes); - try { - String bucketName = "pic"; - String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; - boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); - if (uploadObject) { - facePicUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); - //log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); - } - } catch (Exception e) { - log.error("浜鸿劯鎶撴媿鎶ヨ淇℃伅鍥剧墖淇濆瓨澶辫触" + e.getMessage()); - } + facePicUrl = saveBinPicToMinio(struFaceSnap.pBuffer1, struFaceSnap.dwFacePicLen); } if (struFaceSnap.dwBackgroundPicLen > 0 && struFaceSnap.pBuffer2 != null) { - //灏嗗瓧鑺傚啓鍏ユ枃浠� - long offset = 0; - ByteBuffer buffers = struFaceSnap.pBuffer2.getByteBuffer(offset, struFaceSnap.dwBackgroundPicLen); - byte[] bytes = new byte[struFaceSnap.dwBackgroundPicLen]; - buffers.rewind(); - buffers.get(bytes); - InputStream input = new ByteArrayInputStream(bytes); - try { - String bucketName = "pic"; - String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; - boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); - if (uploadObject) { - picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); - //log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); - } - } catch (Exception e) { - log.error("浜鸿劯鎶撴媿鎶ヨ淇℃伅鍥剧墖淇濆瓨澶辫触" + e.getMessage()); - } + picUrl = saveBinPicToMinio(struFaceSnap.pBuffer2, struFaceSnap.dwBackgroundPicLen); } //log.debug("銆愪汉鑴告姄鎷嶆姤璀︿俊鎭��: alarmTime:" + alarmTime + " picUrl:" + picUrl + " facePicType:" + facePicTyp + " facePicUrl:" + facePicUrl); - FaceSnapEventInfo faceSnapEventInfo = new FaceSnapEventInfo(); - faceSnapEventInfo.setAlarmTime(alarmTime); - faceSnapEventInfo.setPicUrl(picUrl); - publishMqtt(faceSnapEventInfo, "superbrain"); + if (camera != null) { + alarmName = "浜鸿劯鎶撴媿妫�娴�"; + alarmType = "浜鸿劯鎶撴媿鎶ヨ"; + switch (camera.getGdType()) { + case "0": + cameraEventHandler(camera, chanNo, alarmName, alarmType, alarmTime, "", ""); + break; + case "3": + superBrainEventHandler(camera, chanNo, alarmName, alarmType, alarmTime, picUrl, facePicUrl); + break; + } + } //endregion break; case COMM_SNAP_MATCH_ALARM: - log.debug("浜鸿劯姣斿鎶ヨ淇℃伅"); + log.debug("浜鸿劯姣斿鎶ヨ淇℃伅涓婃姤"); //region 浜鸿劯姣斿鎶ヨ淇℃伅 HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM struFaceMatchAlarm = new HCNetSDK.NET_VCA_FACESNAP_MATCH_ALARM(); - struFaceMatchAlarm.byPicTransType = 0; struFaceMatchAlarm.write(); Pointer fmaInfo = struFaceMatchAlarm.getPointer(); fmaInfo.write(0, pAlarmInfo.getByteArray(0, struFaceMatchAlarm.size()), 0, struFaceMatchAlarm.size()); struFaceMatchAlarm.read(); alarmTime = DateUtils.parseTime(struFaceMatchAlarm.struSnapInfo.dwAbsTime);//鎶ヨ鏃堕棿 + chanNo = struFaceMatchAlarm.struSnapInfo.struDevInfo.byChannel; int byMatchPicNum = struFaceMatchAlarm.byMatchPicNum;//鍖归厤鍥剧墖鏁伴噺 + int picTransType = struFaceMatchAlarm.byPicTransType;////鍥剧墖鏁版嵁浼犺緭鏂瑰紡: 0-浜岃繘鍒讹紱1-url String contrastStatus = ""; switch (struFaceMatchAlarm.byContrastStatus) { case 1: @@ -315,76 +288,6 @@ default: BlockType = "鏈煡"; break; - } - //浜鸿劯姣斿鎶ヨ鍥剧墖淇濆瓨锛屽浘鐗囨牸寮忎簩杩涘埗 - if ((struFaceMatchAlarm.dwSnapPicLen > 0) && (struFaceMatchAlarm.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 = struFaceMatchAlarm.pSnapPicBuffer.getByteBuffer(offset, struFaceMatchAlarm.dwSnapPicLen); - byte[] bytes = new byte[struFaceMatchAlarm.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(); - } - } - if ((struFaceMatchAlarm.struSnapInfo.dwSnapFacePicLen > 0) && (struFaceMatchAlarm.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 = struFaceMatchAlarm.struSnapInfo.pBuffer1.getByteBuffer(offset, struFaceMatchAlarm.struSnapInfo.dwSnapFacePicLen); - byte[] bytes = new byte[struFaceMatchAlarm.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 ((struFaceMatchAlarm.struBlockListInfo.dwBlockListPicLen > 0) && (struFaceMatchAlarm.byPicTransType == 0)) { - SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss"); - String newName = sf.format(new Date()); - FileOutputStream fout; - try { - String filename = "../pic/" + newName + "_fSimilarity_" + struFaceMatchAlarm.fSimilarity + "_struBlackListInfo_pBuffer1" + ".jpg"; - fout = new FileOutputStream(filename); - //灏嗗瓧鑺傚啓鍏ユ枃浠� - long offset = 0; - ByteBuffer buffers = struFaceMatchAlarm.struBlockListInfo.pBuffer1.getByteBuffer(offset, struFaceMatchAlarm.struBlockListInfo.dwBlockListPicLen); - byte[] bytes = new byte[struFaceMatchAlarm.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(); - } } //浜鸿劯姣斿鎶ヨ鍥剧墖淇濆瓨锛屽浘鐗囨牸寮廢RL鏍煎紡 if ((struFaceMatchAlarm.dwSnapPicLen > 0) && (struFaceMatchAlarm.byPicTransType == 1)) { @@ -414,18 +317,35 @@ byte[] bytes = new byte[struFaceMatchAlarm.struBlockListInfo.dwBlockListPicLen]; buffers.rewind(); buffers.get(bytes); - faceLibUrl = new String(bytes); + String faceLibUrl = new String(bytes); //System.out.println("浜鸿劯搴撲汉鑴稿浘鐨刄RL锛�" + SnapPicUrl); } - if (ardEquipExternal != null) { + //浜鸿劯姣斿鎶ヨ鍥剧墖淇濆瓨锛屽浘鐗囨牸寮忎簩杩涘埗 + //if ((struFaceMatchAlarm.dwSnapPicLen > 0) && (struFaceMatchAlarm.byPicTransType == 0)) { + // picUrl = saveBinPicToMinio(struFaceMatchAlarm.pSnapPicBuffer, struFaceMatchAlarm.dwSnapPicLen); + //} + //if ((struFaceMatchAlarm.struSnapInfo.dwSnapFacePicLen > 0) && (struFaceMatchAlarm.byPicTransType == 0)) { + // facePicUrl = saveBinPicToMinio(struFaceMatchAlarm.struSnapInfo.pBuffer1, struFaceMatchAlarm.struSnapInfo.dwSnapFacePicLen); + //} + //if ((struFaceMatchAlarm.struBlockListInfo.dwBlockListPicLen > 0) && (struFaceMatchAlarm.byPicTransType == 0)) { + // //String faceBlockPicUrl = saveBinPicToMinio(struFaceMatchAlarm.struBlockListInfo.pBuffer1, struFaceMatchAlarm.struBlockListInfo.dwBlockListPicLen); + //} + if (camera != null) { alarmName = "浜鸿劯姣斿妫�娴�"; - alarmType = contrastStatus + "[" + BlockType + "]"; - superBrainEventHandler(ardEquipExternal, 0, alarmName, alarmType, alarmTime, picUrl, facePicUrl); + alarmType = BlockType + "[" + contrastStatus + "]"; + switch (camera.getGdType()) { + case "0": + cameraEventHandler(camera, chanNo, alarmName, alarmType, alarmTime, "", ""); + break; + case "3": + superBrainEventHandler(camera, chanNo, alarmName, alarmType, alarmTime, picUrl, facePicUrl); + break; + } } //endregion break; case COMM_UPLOAD_AIOP_VIDEO: - log.debug("AI寮�鏀惧钩鍙版帴鍏ヨ棰戞娴嬫姤璀︿笂浼�"); + log.debug("AI瑙嗛妫�娴嬫姤璀︿笂浼�"); //region AI寮�鏀惧钩鍙版帴鍏ヨ棰戞娴� HCNetSDK.NET_AIOP_VIDEO_HEAD struAIOPVideo = new HCNetSDK.NET_AIOP_VIDEO_HEAD(); struAIOPVideo.write(); @@ -441,9 +361,9 @@ String.format("%02d", struAIOPVideo.struTime.wDay) + " " + String.format("%02d", struAIOPVideo.struTime.wHour) + ":" + String.format("%02d", struAIOPVideo.struTime.wMinute) + ":" + - String.format("%02d", struAIOPVideo.struTime.wSecond) + "." + - String.format("%03d", struAIOPVideo.struTime.wMilliSec); - alarmName = "AI寮�鏀惧钩鍙版帴鍏ヨ棰戞娴�"; + String.format("%02d", struAIOPVideo.struTime.wSecond); + // + "." + String.format("%03d", struAIOPVideo.struTime.wMilliSec); + chanNo = struAIOPVideo.dwChannel; switch (szMPID) { case "H930_MODEL_SPD": alarmType = "鎶界儫鎵撶數璇�"; @@ -451,80 +371,79 @@ } //鍥剧墖鏁版嵁淇濆瓨 if (struAIOPVideo.dwPictureSize > 0) { - //灏嗗瓧鑺傚啓鍏ユ枃浠� - long offset = 0; - ByteBuffer buffers = struAIOPVideo.pBufferPicture.getByteBuffer(offset, struAIOPVideo.dwPictureSize); - byte[] bytes = new byte[struAIOPVideo.dwPictureSize]; - buffers.rewind(); - buffers.get(bytes); - InputStream input = new ByteArrayInputStream(bytes); - try { - String bucketName = "pic"; - String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; - boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); - if (uploadObject) { - picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); - //log.debug("涓婁紶鏂囦欢鎴愬姛!" + picUrl); - } - } catch (Exception e) { - log.error("AI寮�鏀惧钩鍙版帴鍏ヨ棰戞娴嬫姤璀︿笂浼犱笂鎶ュ浘鐗囦繚瀛樺け璐�" + e.getMessage()); - } + picUrl = saveBinPicToMinio(struAIOPVideo.pBufferPicture, struAIOPVideo.dwPictureSize); } - if (ardEquipExternal != null) { - superBrainEventHandler(ardEquipExternal, struAIOPVideo.dwChannel, alarmName, alarmType, alarmTime, picUrl, ""); + if (camera != null) { + alarmName = "AI瑙嗛妫�娴�"; + switch (camera.getGdType()) { + case "3": + superBrainEventHandler(camera, chanNo, alarmName, alarmType, alarmTime, picUrl, facePicUrl); + break; + } } //endregion break; - case COMM_ISAPI_ALARM: - log.debug("瀹夊叏甯芥娴嬫姤璀︿俊鎭笂鎶�"); - //region 瀹夊叏甯芥娴嬫姤璀︿俊鎭� + case COMM_ISAPI_ALARM://ISAPI鍗忚鎶ヨ淇℃伅 + log.debug("ISAPI鍗忚鎶ヨ淇℃伅涓婃姤"); + //region ISAPI鍗忚鎶ヨ淇℃伅 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(); - int dwAlarmDataLen = struEventISAPI.dwAlarmDataLen; - int byDataType = struEventISAPI.byDataType; - int byPicturesNumber = struEventISAPI.byPicturesNumber; - //澶勭悊瀹夊叏甯芥娴嬩笂浼犵殑鐓х墖鏁版嵁 - Pointer pPicPackData = struEventISAPI.pPicPackData; - if (pPicPackData != null) { - HCNetSDK.NET_DVR_ALARM_ISAPI_PICDATA struPicData = new HCNetSDK.NET_DVR_ALARM_ISAPI_PICDATA(); - struPicData.write(); - if (struPicData.size() > 0) { - Pointer pPicData = struPicData.getPointer(); - pPicData.write(0, pPicPackData.getByteArray(0, struPicData.size()), 0, struPicData.size()); - struPicData.read(); - int dwPicLen = struPicData.dwPicLen; - pPicData = struPicData.pPicData; - if (dwPicLen > 0 && pPicData != null) { - //灏嗗瓧鑺傚啓鍏ユ枃浠� - long offset = 0; - ByteBuffer buffers = pPicData.getByteBuffer(offset, dwPicLen); - byte[] bytes = new byte[dwPicLen]; - buffers.rewind(); - buffers.get(bytes); - InputStream input = new ByteArrayInputStream(bytes); - try { - String bucketName = "pic"; - String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; - boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); - if (uploadObject) { - picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); - //log.debug("涓婁紶鏂囦欢鎴愬姛!" + picUrl); + int dwAlarmDataLen = struEventISAPI.dwAlarmDataLen;// 鎶ヨ鏁版嵁闀垮害 + int byDataType = struEventISAPI.byDataType;// 0-invalid,1-xml,2-json + int byPicturesNumber = struEventISAPI.byPicturesNumber;// 鍥剧墖鏁伴噺 + if (dwAlarmDataLen > 0) {//鎶ヨ鏁版嵁鎵撳嵃 + HCNetSDK.BYTE_ARRAY m_strISAPIData = new HCNetSDK.BYTE_ARRAY(struEventISAPI.dwAlarmDataLen); + m_strISAPIData.write(); + Pointer pPlateInfo = m_strISAPIData.getPointer(); + pPlateInfo.write(0, struEventISAPI.pAlarmData.getByteArray(0, m_strISAPIData.size()), 0, m_strISAPIData.size()); + m_strISAPIData.read(); + String json = new String(m_strISAPIData.byValue).trim(); + // log.debug(new String(m_strISAPIData.byValue).trim() + "\n"); + //瑙f瀽JSON鏁版嵁 + if (byDataType == 2) { + IsapiAlarm isapiAlarm = JSONObject.parseObject(json, IsapiAlarm.class); + alarmName = "ISAPI鍗忚淇℃伅妫�娴�"; + switch (isapiAlarm.getEventType()) { + //case "HFPD": + //chanNo = isapiAlarm.getChannelID(); + //alarmType = "楂橀浜哄憳浜嬩欢鎶ヨ"; + //picUrl = isapiAlarm.getFaceCapture().get(0).getTargetAttrs().getBkgUrl(); + //facePicUrl = isapiAlarm.getFaceCapture().get(0).getFaces().get(0).getURL(); + // break; + case "safetyHelmetDetection": + chanNo = isapiAlarm.getChannelID(); + alarmType = "瀹夊叏甯戒簨浠舵姤璀�"; + alarmTime = fmt.format(isapiAlarm.getDateTime()); + //鍥剧墖淇濆瓨 + 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(); + switch (i) { + case 0: + picUrl = saveBinPicToMinio(struPicData.pPicData, struPicData.dwPicLen); + break; + case 1: + facePicUrl = saveBinPicToMinio(struPicData.pPicData, struPicData.dwPicLen); + break; + } } - } catch (Exception e) { - log.error("寮傚父琛屼负璇嗗埆淇℃伅鎶ヨ淇℃伅涓婃姤鍥剧墖淇濆瓨澶辫触" + e.getMessage()); - } + if (camera != null) { + switch (camera.getGdType()) { + case "3": + superBrainEventHandler(camera, chanNo, alarmName, alarmType, alarmTime, picUrl, facePicUrl); + break; + } + } + break; } } - } - if (ardEquipExternal != null) { - alarmName = "瀹夊叏甯芥娴�"; - alarmType = "瀹夊叏甯戒簨浠舵姤璀�"; - alarmTime = fmt.format(new Date()); - superBrainEventHandler(ardEquipExternal, 0, alarmName, alarmType, alarmTime, picUrl, ""); } //endregion break; @@ -643,24 +562,7 @@ //浜嬩欢鍥剧墖澶勭悊 dwPicDataLen = strACSInfo.dwPicDataLen; if (dwPicDataLen > 0) { - try { - //灏嗗瓧鑺傚啓鍏ユ枃浠� - long offset = 0; - ByteBuffer buffers = strACSInfo.pPicData.getByteBuffer(offset, strACSInfo.dwPicDataLen); - byte[] bytes = new byte[strACSInfo.dwPicDataLen]; - buffers.rewind(); - buffers.get(bytes); - InputStream input = new ByteArrayInputStream(bytes); - String bucketName = "pic"; - String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; - boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); - if (uploadObject) { - picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); - //log.debug("涓婁紶鏂囦欢鎴愬姛!" + url); - } - } catch (Exception e) { - log.error("鍥剧墖淇濆瓨澶辫触"); - } + picUrl = saveBinPicToMinio(strACSInfo.pPicData, strACSInfo.dwPicDataLen); } HCNetSDK.NET_DVR_ACS_EVENT_INFO struAcsEventInfo = strACSInfo.struAcsEventInfo; int byType = struAcsEventInfo.byType; @@ -725,36 +627,33 @@ 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); + switch (struFireDecAlarm.byAlarmSubType) { + case 0: + alarmType = "鐏偣妫�娴嬫姤璀�"; + break; + case 1: + alarmType = "鐑熼浘妫�娴嬫姤璀�"; + break; + case 2: + alarmType = "鐑熺伀鎶ヨ "; + break; + } + //String sFireDecAlarmInfo = "缁濆鏃堕棿锛�" + struFireDecAlarm.dwAbsTime + ",鎶ヨ瀛愮被鍨嬶細" + struFireDecAlarm.byAlarmSubType + ",鐏偣鏈�楂樻俯搴� :" + + // struFireDecAlarm.wFireMaxTemperature + ",鐏偣鐩爣璺濈锛�" + struFireDecAlarm.wTargetDistance; + //System.out.println(sFireDecAlarmInfo); //鍥剧墖淇濆瓨 if ((struFireDecAlarm.dwPicDataLen > 0) && (struFireDecAlarm.byPicTransType == 0)) { - long offset = 0; - ByteBuffer buffers = struFireDecAlarm.pBuffer.getByteBuffer(offset, struFireDecAlarm.dwPicDataLen); - byte[] bytes = new byte[struFireDecAlarm.dwPicDataLen]; - buffers.rewind(); - buffers.get(bytes); - InputStream input = new ByteArrayInputStream(bytes); - try { - String bucketName = "pic"; - String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; - boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, input.available(), "image/JPEG"); - if (uploadObject) { - picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); - //log.debug("涓婁紶鏂囦欢鎴愬姛!" + picUrl); - } - } catch (Exception e) { - log.error("鐏偣妫�娴嬩簨浠舵姤璀︿笂鎶ョ儹鎴愬儚鍥剧墖淇濆瓨澶辫触" + e.getMessage()); - } - + picUrl = saveBinPicToMinio(struFireDecAlarm.pBuffer, struFireDecAlarm.dwPicDataLen); } - if (ardEquipExternal != null) { + chanNo = struFireDecAlarm.dwVisibleChannel; + alarmTime = DateUtils.parseTime(struFireDecAlarm.dwAbsTime);//鎶ヨ鏃堕棿 + if (camera != null) { alarmName = "鐏劙妫�娴嬩俊鎭笂鎶�"; - alarmType = "鐏劙妫�娴嬩簨浠舵姤璀�"; - int dwVisibleChannel = struFireDecAlarm.dwVisibleChannel; - alarmTime = DateUtils.parseTime(struFireDecAlarm.dwAbsTime);//鎶ヨ鏃堕棿 - superBrainEventHandler(ardEquipExternal, dwVisibleChannel, alarmName, alarmType, alarmTime, picUrl, ""); + switch (camera.getGdType()) { + case "3": + superBrainEventHandler(camera, chanNo, alarmName, alarmType, alarmTime, picUrl, facePicUrl); + break; + } } //endregion break; @@ -769,14 +668,12 @@ return true; } - /** * 鐩告満浜嬩欢澶勭悊 * 鍒樿嫃涔� * 2023/12/5 12:56:47 */ - public void cameraEventHandler(ArdCameras camera, String alarmName, String alarmType, String alarmTime, String picUrl) { - + public void cameraEventHandler(ArdCameras camera, Integer chanNo, String alarmName, String alarmType, String alarmTime, String picUrl, String faceUrl) { CameraEventInfo cameraEventInfo = new CameraEventInfo(); cameraEventInfo.setAlarmName(alarmName); cameraEventInfo.setAlarmTime(alarmTime); @@ -785,7 +682,7 @@ cameraEventInfo.setCameraIp(camera.getIp()); cameraEventInfo.setCameraPort(camera.getPort()); cameraEventInfo.setCameraType(camera.getGdType()); - cameraEventInfo.setCameraChannel(camera.getChannel()); + cameraEventInfo.setCameraChannel(chanNo); cameraEventInfo.setLongitude(camera.getLongitude()); cameraEventInfo.setLatitude(camera.getLatitude()); cameraEventInfo.setAlarmType(alarmType); @@ -803,20 +700,33 @@ * 鍒樿嫃涔� * 2023/12/5 12:56:47 */ - public void superBrainEventHandler(ArdEquipExternal superBrainDevice, Integer chanNo, String alarmName, String alarmType, String alarmTime, String picUrl, String faceUrl) { + public void superBrainEventHandler(ArdCameras camera, Integer chanNo, String alarmName, String alarmType, String alarmTime, String picUrl, String faceUrl) { SuperBrainEventInfo superBrainEventInfo = new SuperBrainEventInfo(); superBrainEventInfo.setAlarmName(alarmName); superBrainEventInfo.setAlarmType(alarmType); superBrainEventInfo.setAlarmTime(alarmTime); - superBrainEventInfo.setDeviceId(superBrainDevice.getId()); - superBrainEventInfo.setDeviceName(superBrainDevice.getName()); + List<ChannelInfo> channelInfoList = GlobalVariable.deviceChanMap.get(camera.getId());//鑾峰彇瓒呰剳鐨勯�氶亾闆嗗悎 + if (channelInfoList.size() > 0) { + if (chanNo > 0) { + ChannelInfo channelInfo = channelInfoList.get(chanNo - 1);//鏍规嵁閫氶亾鍙疯幏鍙栭�氶亾淇℃伅 + if (channelInfo != null) { + Optional<ArdCameras> foundCamera = findArdCameraByIpAndPort(channelInfo.getIp(), channelInfo.getPort()); + if (foundCamera.isPresent()) { + camera = foundCamera.get(); + superBrainEventInfo.setDeviceId(camera.getId()); + superBrainEventInfo.setDeviceName(camera.getName()); + superBrainEventInfo.setLongitude(camera.getLongitude()); + superBrainEventInfo.setLatitude(camera.getLatitude()); + superBrainEventInfo.setAltitude(camera.getAltitude()); + } + } + } + } superBrainEventInfo.setChanNo(chanNo); - superBrainEventInfo.setLongitude(superBrainDevice.getLongitude()); - superBrainEventInfo.setLatitude(superBrainDevice.getLatitude()); superBrainEventInfo.setPicUrl(picUrl); superBrainEventInfo.setFaceUrl(faceUrl); - log.debug("澶勭悊閫氳秴鑴戜簨浠舵姤璀�:銆怤ame銆�" + alarmName + "銆怲ype銆�" + alarmType + "銆怲ime銆�" + alarmTime + "銆怐evice銆�" + superBrainDevice.getName() + "銆怳rl銆�" + picUrl + "銆恌aceUrl銆�" + faceUrl ); + log.debug("澶勭悊瓒呰剳浜嬩欢鎶ヨ:銆怤ame銆�" + alarmName + "銆怲ype銆�" + alarmType + "銆怲ime銆�" + alarmTime + "銆怐evice銆�" + camera.getName() + "銆怳rl銆�" + picUrl + "銆恌aceUrl銆�" + faceUrl); publishMqtt(superBrainEventInfo, "superBrain"); } @@ -930,4 +840,28 @@ return wYear + "-" + byMonth + "-" + byDay + " " + byHour + ":" + byMinute + ":" + bySecond; } + //浜岃繘鍒跺浘鐗囨帴鏀跺啓鍏inio杩斿洖url + private String saveBinPicToMinio(Pointer picData, int picDataLen) { + String picUrl = ""; + try { + //灏嗗瓧鑺傚啓鍏ユ枃浠� + long offset = 0; + ByteBuffer buffers = picData.getByteBuffer(offset, picDataLen); + byte[] bytes = new byte[picDataLen]; + buffers.rewind(); + buffers.get(bytes); + InputStream input = new ByteArrayInputStream(bytes); + String bucketName = "pic"; + String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg"; + boolean uploadObject = MinioUtil.uploadObject(bucketName, objectName, input, picDataLen, "image/JPEG"); + if (uploadObject) { + picUrl = MinioUtil.getBucketObjectUrl(bucketName, objectName); + //log.debug("涓婁紶鏂囦欢鎴愬姛!" + picUrl); + } + } catch (Exception e) { + log.error("鍥剧墖淇濆瓨澶辫触:" + e.getMessage()); + } + return picUrl; + } + } -- Gitblit v1.9.3