package com.dahua.netsdk.lib.callback.impl;
|
|
import java.io.ByteArrayInputStream;
|
import java.io.File;
|
import java.nio.charset.Charset;
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Objects;
|
|
import com.alibaba.fastjson.JSON;
|
import com.dahua.netsdk.lib.Utils;
|
import com.dahua.netsdk.lib.enumeration.EM_EVENT_IVS_TYPE;
|
import com.dahua.netsdk.lib.structure.*;
|
import com.sun.jna.Pointer;
|
import com.dahua.netsdk.lib.NetSDKLib;
|
import com.dahua.netsdk.lib.ToolKits;
|
import com.ycl.entity.video.VideoAlarmReport;
|
import com.ycl.entity.video.VideoPoint;
|
import com.ycl.service.caseHandler.IViolationsService;
|
import com.ycl.service.oss.OssService;
|
import com.ycl.service.video.IVideoAlarmReportService;
|
import com.ycl.service.video.impl.IVideoPointService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* 智能报警事件回调
|
*/
|
@Component
|
public class AnalyzerDataCB implements NetSDKLib.fAnalyzerDataCallBack {
|
|
|
@Autowired
|
private OssService ossService;
|
|
@Autowired
|
private IVideoPointService videoPointService;
|
|
@Autowired
|
private IVideoAlarmReportService videoAlarmReportService;
|
|
@Autowired
|
private IViolationsService violationsService;
|
|
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) {
|
instance = new AnalyzerDataCB();
|
}
|
return instance;
|
}
|
|
/**
|
* @param lAnalyzerHandle 订阅句柄
|
* @param dwAlarmType 事件类型枚举
|
* @param pAlarmInfo 事件信息,具体结构体视枚举而定,每个事件类型对应不同的事件结构体
|
* @param pBuffer 图片信息
|
* @param dwBufSize 图片长度
|
* @param dwUser 用户自定义数据
|
* @param nSequence 表示上传的相同图片情况,为0时表示是第一次出现,为2表示最后一次出现或仅出现一次,为1表示此次之后还有
|
* @param reserved 表示当前回调数据的状态,
|
* 为0表示当前数据为实时数据,为1表示当前回调数据是离线数据,为2时表示离线数据传送结束
|
* @return
|
*/
|
public int invoke(NetSDKLib.LLong lAnalyzerHandle, int dwAlarmType, Pointer pAlarmInfo, Pointer pBuffer,
|
int dwBufSize, Pointer dwUser, int nSequence, Pointer reserved) {
|
|
VideoAlarmReport videoAlarmReport = VideoAlarmReport.builder().ip("172.28.194.186").port(37777).user("admin").password("scdx@123").build();
|
if (lAnalyzerHandle == null || lAnalyzerHandle.longValue() == 0) {
|
return -1;
|
}
|
|
NetSDKLib.NET_EVENT_FILE_INFO stuFileInfo = null;
|
NetSDKLib.NET_PIC_INFO stPicInfo = null;
|
System.out.println("接收到事件报警类型: " + dwAlarmType);
|
// 1-机动车违停 2-非机动车违停 3-非法广告 4-群体事件 5-粘贴广告 6-违规撑伞 7-占道经营 8-店外经营 9-垃圾桶满溢 10-打包垃圾 11-暴露垃圾 12-沿街晾晒 13-乱堆物料 14-违规户外广告
|
switch (Objects.requireNonNull(EM_EVENT_IVS_TYPE.getEventType(dwAlarmType))) {
|
case EVENT_IVS_PARKINGDETECTION: // 非法停车事件
|
{
|
NetSDKLib.DEV_EVENT_PARKINGDETECTION_INFO msg = new NetSDKLib.DEV_EVENT_PARKINGDETECTION_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
stuFileInfo = msg.stuFileInfo;
|
stPicInfo = msg.stuObject.stPicInfo;
|
System.out.printf("【非法停车事件】 时间(UTC):%s 通道号:%d 开始时间:%s 结束时间:%s 事件触发累计次数:%d 事件源设备唯一标识:%s \n", msg.UTC,
|
msg.nChannelID, msg.stuObject.stuStartTime, msg.stuObject.stuEndTime, msg.nOccurrenceCount,
|
new String(msg.szSourceDevice));
|
break;
|
}
|
case EVENT_IVS_FIGHTDETECTION: // 斗殴事件
|
{
|
NetSDKLib.DEV_EVENT_FIGHT_INFO msg = new NetSDKLib.DEV_EVENT_FIGHT_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
String Picture = picturePath + "\\" + System.currentTimeMillis() + ".jpg";
|
ToolKits.savePicture(pBuffer, 0, dwBufSize, Picture);
|
System.out.println(" 斗殴事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID);
|
break;
|
}
|
case EVENT_IVS_RIOTERDETECTION: // 聚众事件
|
{
|
NetSDKLib.DEV_EVENT_RIOTERL_INFO msg = new NetSDKLib.DEV_EVENT_RIOTERL_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
stuFileInfo = msg.stuFileInfo;
|
stPicInfo = msg.stuObjectIDs[0].stPicInfo; // 取第一个
|
System.out.printf("【聚众事件】 时间(UTC):%s 通道号:%d 检测到的物体个数:%d 事件触发累计次数:%d 事件源设备唯一标识:%s \n", msg.UTC,
|
msg.nChannelID, msg.nObjectNum, msg.nOccurrenceCount, new String(msg.szSourceDevice));
|
break;
|
}
|
case EVENT_IVS_MAN_NUM_DETECTION: /// < 立体视觉区域内人数统计事件
|
{
|
NetSDKLib.DEV_EVENT_MANNUM_DETECTION_INFO msg = new NetSDKLib.DEV_EVENT_MANNUM_DETECTION_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
System.out.println(" 立体视觉区域内人数统计事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID + " 区域人员列表数量:"
|
+ msg.nManListCount + " 人员身高:" + msg.stuManList[0].nStature);
|
break;
|
}
|
case EVENT_IVS_CROWDDETECTION: /// < 人群密度检测事件
|
{
|
NetSDKLib.DEV_EVENT_CROWD_DETECTION_INFO msg = new NetSDKLib.DEV_EVENT_CROWD_DETECTION_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
System.out.println(" 人群密度检测事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID);
|
break;
|
}
|
case EVENT_IVS_CITY_MOTORPARKING: /// 1 城市机动车违停事件
|
{
|
NetSDKLib.DEV_EVENT_CITY_MOTORPARKING_INFO info = new NetSDKLib.DEV_EVENT_CITY_MOTORPARKING_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
|
videoAlarmReport.setAlarmObj(JSON.toJSONString(info));
|
videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond));
|
|
VideoPoint videoPoint = videoPointService.getByChannelId(info.nChannelID);
|
videoAlarmReport.setChannel(String.valueOf(info.nChannelID));
|
videoAlarmReport.setAlarmId(String.valueOf(info.nEventID));
|
videoAlarmReport.setAlarmName("非机动车乱停放");
|
if (videoPoint != null) {
|
videoAlarmReport.setPlatResourceId(videoPoint.getPlatResourceId());
|
}
|
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(" 城市机动车违停事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违停持续时长(单位秒):"
|
+ info.nParkingDuration + "检测到的物体个数:" + info.nObjectNum);
|
|
// if (stuFileInfo != null) { // 保存图片
|
// String bigPicture = picturePath + File.separator
|
// + String.format("Big_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType,
|
// stuFileInfo.stuFileTime.toStringTitle(), stuFileInfo.bCount, stuFileInfo.bIndex,
|
// stuFileInfo.bFileType, stuFileInfo.nGroupId);
|
// ToolKits.savePicture(pBuffer, 0, dwBufSize, bigPicture);
|
// if (stPicInfo != null && stPicInfo.dwFileLenth > 0) {
|
// String smallPicture = picturePath + File.separator
|
// + String.format("Small_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType,
|
// stuFileInfo.stuFileTime.toStringTitle(), stuFileInfo.bCount, stuFileInfo.bIndex,
|
// stuFileInfo.bFileType, stuFileInfo.nGroupId);
|
// ToolKits.savePicture(pBuffer, stPicInfo.dwOffSet, stPicInfo.dwFileLenth, smallPicture);
|
// }
|
// }
|
// if (msg.nImageInfoNum > 0) {
|
// System.out.println("Picture Arr got, number +" + msg.nImageInfoNum);
|
// NET_IMAGE_INFO_EX2[] pstuImageInfo = new NET_IMAGE_INFO_EX2[msg.nImageInfoNum];
|
// for (int i = 0; i < msg.nImageInfoNum; i++) {
|
// pstuImageInfo[i] = new NET_IMAGE_INFO_EX2();
|
// }
|
// ToolKits.GetPointerDataToStructArr(msg.pstuImageInfo, pstuImageInfo);
|
// for (int i = 0; i < msg.nImageInfoNum; i++) {
|
// System.out.println("pstuImageInfo[" + i + "].nOffset:" + pstuImageInfo[i].nOffset);
|
// System.out.println("pstuImageInfo[" + i + "].nLength:" + pstuImageInfo[i].nLength);
|
// if (pstuImageInfo != null && pstuImageInfo[i].nLength > 0) {
|
// System.out.println("pstuImageInfo[" + i + "] picture received!");
|
// String bigPicture = picturePath + "\\" + System.currentTimeMillis()
|
// + "related_MOTORPARKING_pstuImageInfo_" + i + ".jpg";
|
// ToolKits.savePicture(pBuffer, pstuImageInfo[i].nOffset, pstuImageInfo[i].nLength, bigPicture);
|
// }
|
// }
|
//
|
// }
|
|
break;
|
}
|
case EVENT_IVS_CITY_NONMOTORPARKING: /// 2 城市非机动车违停事件
|
{
|
NetSDKLib.DEV_EVENT_CITY_NONMOTORPARKING_INFO info = new NetSDKLib.DEV_EVENT_CITY_NONMOTORPARKING_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
|
videoAlarmReport.setAlarmObj(JSON.toJSONString(info));
|
videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond));
|
|
VideoPoint videoPoint = videoPointService.getByChannelId(info.nChannelID);
|
videoAlarmReport.setChannel(String.valueOf(info.nChannelID));
|
videoAlarmReport.setAlarmId(String.valueOf(info.nEventID));
|
videoAlarmReport.setAlarmName("非机动车乱停放");
|
if (videoPoint != null) {
|
videoAlarmReport.setPlatResourceId(videoPoint.getPlatResourceId());
|
}
|
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(
|
" 城市非机动车违停事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "检测到的物体个数:" + info.nObjectNum);
|
break;
|
}
|
case EVENT_IVS_HOLD_UMBRELLA: /// 6 违规撑伞检测事件
|
{
|
NetSDKLib.DEV_EVENT_HOLD_UMBRELLA_INFO info = new NetSDKLib.DEV_EVENT_HOLD_UMBRELLA_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
|
videoAlarmReport.setAlarmObj(JSON.toJSONString(info));
|
videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond));
|
|
VideoPoint videoPoint = videoPointService.getByChannelId(info.nChannelID);
|
videoAlarmReport.setChannel(String.valueOf(info.nChannelID));
|
videoAlarmReport.setAlarmId(String.valueOf(info.nEventID));
|
videoAlarmReport.setAlarmName("违规撑伞");
|
if (videoPoint != null) {
|
videoAlarmReport.setPlatResourceId(videoPoint.getPlatResourceId());
|
}
|
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(
|
" 违规撑伞检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违法持续时长(单位秒)" + info.nViolationDuration);
|
break;
|
}
|
case EVENT_IVS_SHOPPRESENCE: /// 7 占道经营
|
{
|
NetSDKLib.DEV_EVENT_SHOPPRESENCE_INFO info = new NetSDKLib.DEV_EVENT_SHOPPRESENCE_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
|
videoAlarmReport.setAlarmObj(JSON.toJSONString(info));
|
videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond));
|
|
VideoPoint videoPoint = videoPointService.getByChannelId(info.nChannelID);
|
videoAlarmReport.setChannel(String.valueOf(info.nChannelID));
|
videoAlarmReport.setAlarmId(String.valueOf(info.nEventID));
|
videoAlarmReport.setAlarmName("占道经营");
|
if (videoPoint != null) {
|
videoAlarmReport.setPlatResourceId(videoPoint.getPlatResourceId());
|
}
|
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(" 占道经营检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违法持续时长(单位秒)"
|
+ info.nViolationDuration + "检测到的物体个数" + info.nObjectNum);
|
break;
|
}
|
case EVENT_IVS_DUSTBIN_OVER_FLOW: /// 9 垃圾桶满溢检测事件
|
{
|
NetSDKLib.DEV_EVENT_DUSTBIN_OVER_FLOW_INFO info = new NetSDKLib.DEV_EVENT_DUSTBIN_OVER_FLOW_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
|
videoAlarmReport.setAlarmObj(JSON.toJSONString(info));
|
videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond));
|
|
VideoPoint videoPoint = videoPointService.getByChannelId(info.nChannelID);
|
videoAlarmReport.setChannel(String.valueOf(info.nChannelID));
|
videoAlarmReport.setAlarmId(String.valueOf(info.nEventID));
|
videoAlarmReport.setAlarmName("垃圾箱满溢");
|
if (videoPoint != null) {
|
videoAlarmReport.setPlatResourceId(videoPoint.getPlatResourceId());
|
}
|
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(" 垃圾桶满溢检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违法持续时长(单位秒)"
|
+ info.nViolationDuration + "检测到的物体个数" + info.nObjectNum);
|
break;
|
}
|
case EVENT_IVS_GARBAGE_PLASTICBAG: /// 10 打包垃圾
|
{
|
NetSDKLib.DEV_EVENT_GARBAGE_EXPOSURE_INFO info = new NetSDKLib.DEV_EVENT_GARBAGE_EXPOSURE_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
|
videoAlarmReport.setAlarmObj(JSON.toJSONString(info));
|
videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond));
|
|
VideoPoint videoPoint = videoPointService.getByChannelId(info.nChannelID);
|
videoAlarmReport.setChannel(String.valueOf(info.nChannelID));
|
videoAlarmReport.setAlarmId(String.valueOf(info.nEventID));
|
videoAlarmReport.setAlarmName("打包垃圾");
|
if (videoPoint != null) {
|
videoAlarmReport.setPlatResourceId(videoPoint.getPlatResourceId());
|
}
|
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(" 打包垃圾检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违法持续时长(单位秒)"
|
+ info.nViolationDuration + "检测到的物体个数" + info.nObjectNum);
|
break;
|
}
|
case EVENT_IVS_DOOR_FRONT_DIRTY: /// < 门前脏乱检测事件
|
{
|
NetSDKLib.DEV_EVENT_DOOR_FRONT_DIRTY_INFO msg = new NetSDKLib.DEV_EVENT_DOOR_FRONT_DIRTY_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
stuFileInfo = msg.stuFileInfo;
|
System.out.println(" 门前脏乱检测事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID + "违法持续时长(单位秒)"
|
+ msg.nViolationDuration + "检测到的物体个数" + msg.nObjectNum);
|
break;
|
}
|
case EVENT_IVS_GARBAGE_EXPOSURE: /// 11 垃圾暴露检测事件
|
{
|
NetSDKLib.DEV_EVENT_GARBAGE_EXPOSURE_INFO info = new NetSDKLib.DEV_EVENT_GARBAGE_EXPOSURE_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
|
videoAlarmReport.setAlarmObj(JSON.toJSONString(info));
|
videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond));
|
|
VideoPoint videoPoint = videoPointService.getByChannelId(info.nChannelID);
|
videoAlarmReport.setChannel(String.valueOf(info.nChannelID));
|
videoAlarmReport.setAlarmId(String.valueOf(info.nEventID));
|
videoAlarmReport.setAlarmName("暴露垃圾");
|
if (videoPoint != null) {
|
videoAlarmReport.setPlatResourceId(videoPoint.getPlatResourceId());
|
}
|
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(" 垃圾暴露检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + "违法持续时长(单位秒)"
|
+ info.nViolationDuration + "检测到的物体个数" + info.nObjectNum);
|
break;
|
}
|
case EVENT_IVS_VIOLENT_THROW_DETECTION: /// < 暴力抛物事件事件
|
{
|
NetSDKLib.DEV_EVENT_VIOLENT_THROW_DETECTION_INFO msg = new NetSDKLib.DEV_EVENT_VIOLENT_THROW_DETECTION_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, msg);
|
if (msg.stuSceneImage != null && msg.stuSceneImage.nLength > 0) {
|
String bigPicture = picturePath + "\\" + System.currentTimeMillis() + "big.jpg";
|
ToolKits.savePicture(pBuffer, msg.stuSceneImage.nOffSet, msg.stuSceneImage.nLength, bigPicture);
|
}
|
stuFileInfo = msg.stuFileInfo;
|
System.out.println(" 暴力抛物事件事件 时间(UTC):" + msg.UTC + " 通道号:" + msg.nChannelID + "暴力抛物检测区域名称"
|
+ new String(msg.szRegionName, Charset.forName(Utils.getPlatformEncode())));
|
break;
|
}
|
case EVENT_IVS_SHOP_WINDOW_POST:// 橱窗张贴事件
|
{
|
DEV_EVENT_SHOP_WINDOW_POST_INFO info = new DEV_EVENT_SHOP_WINDOW_POST_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(" 橱窗张贴事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + " 商铺地址: "
|
+ new String(info.szShopAddress, Charset.forName(Utils.getPlatformEncode())).trim() + " 违法持续时间: "
|
+ info.nViolationDuration + " 检测到的物体数量: " + info.nObjectNum);
|
for (int i = 0; i < info.nObjectNum; i++) {
|
stPicInfo = info.stuObjects[i].stPicInfo;
|
if (stPicInfo != null && stPicInfo.dwFileLenth > 0) {
|
String smallPicture = picturePath + File.separator
|
+ String.format("Small_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType,
|
stuFileInfo.stuFileTime.toStringTitle(), stuFileInfo.bCount, stuFileInfo.bIndex,
|
stuFileInfo.bFileType, stuFileInfo.nGroupId);
|
ToolKits.savePicture(pBuffer, stPicInfo.dwOffSet, stPicInfo.dwFileLenth, smallPicture);
|
}
|
}
|
|
break;
|
}
|
case EVENT_IVS_STREET_SUNCURE: // 12 沿街晾晒事件
|
{
|
DEV_EVENT_STREET_SUNCURE_INFO info = new DEV_EVENT_STREET_SUNCURE_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
|
videoAlarmReport.setAlarmObj(JSON.toJSONString(info));
|
videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond));
|
|
VideoPoint videoPoint = videoPointService.getByChannelId(info.nChannelID);
|
videoAlarmReport.setChannel(String.valueOf(info.nChannelID));
|
videoAlarmReport.setAlarmId(String.valueOf(info.nEventID));
|
videoAlarmReport.setAlarmName("沿街晾挂");
|
if (videoPoint != null) {
|
videoAlarmReport.setPlatResourceId(videoPoint.getPlatResourceId());
|
}
|
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(" 沿街晾晒事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + " 违法持续时间: "
|
+ info.nViolationDuration + " 检测到的物体数量: " + info.nObjectNum);
|
|
break;
|
}
|
case EVENT_IVS_OUTDOOR_ADVERTISEMENT: // 14 户外广告事件
|
{
|
DEV_EVENT_OUTDOOR_ADVERTISEMENT_INFO info = new DEV_EVENT_OUTDOOR_ADVERTISEMENT_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
|
videoAlarmReport.setAlarmObj(JSON.toJSONString(info));
|
videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond));
|
|
VideoPoint videoPoint = videoPointService.getByChannelId(info.nChannelID);
|
videoAlarmReport.setChannel(String.valueOf(info.nChannelID));
|
videoAlarmReport.setAlarmId(String.valueOf(info.nEventID));
|
videoAlarmReport.setAlarmName("违规户外广告");
|
if (videoPoint != null) {
|
videoAlarmReport.setPlatResourceId(videoPoint.getPlatResourceId());
|
}
|
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(" 户外广告事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + " 违法持续时间: "
|
+ info.nViolationDuration + " 检测到的物体数量: " + info.nObjectNum);
|
|
|
break;
|
}
|
case EVENT_IVS_HUDDLE_MATERIAL:// 13 乱堆物料检测事件 id 648 乱堆物料
|
{
|
DEV_EVENT_HUDDLE_MATERIAL_INFO info = new DEV_EVENT_HUDDLE_MATERIAL_INFO();
|
ToolKits.GetPointerData(pAlarmInfo, info);
|
videoAlarmReport.setAlarmObj(JSON.toJSONString(info));
|
videoAlarmReport.setAlarmTime(LocalDateTime.of(info.UTC.dwYear, info.UTC.dwMonth, info.UTC.dwDay, info.UTC.dwHour, info.UTC.dwMinute, info.UTC.dwSecond));
|
|
VideoPoint videoPoint = videoPointService.getByChannelId(info.nChannelID);
|
videoAlarmReport.setChannel(String.valueOf(info.nChannelID));
|
videoAlarmReport.setAlarmId(String.valueOf(info.nEventID));
|
videoAlarmReport.setAlarmName("乱堆物料");
|
if (videoPoint != null) {
|
videoAlarmReport.setPlatResourceId(videoPoint.getPlatResourceId());
|
}
|
|
stuFileInfo = info.stuFileInfo;
|
System.out.println(" 乱堆物料检测事件 时间(UTC):" + info.UTC + " 通道号:" + info.nChannelID + " 违法持续时间: "
|
+ info.nViolationDuration + " 检测到的物体数量: " + info.nObjectNum);
|
// for (int i = 0; i < info.nObjectNum; i++) {
|
// stPicInfo = info.stuObjects[i].stPicInfo;
|
// if (stPicInfo != null && stPicInfo.dwFileLenth > 0) {
|
// String smallPicture = picturePath + File.separator
|
// + String.format("Small_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType,
|
// stuFileInfo.stuFileTime.toStringTitle(), stuFileInfo.bCount, stuFileInfo.bIndex,
|
// stuFileInfo.bFileType, stuFileInfo.nGroupId);
|
// ToolKits.savePicture(pBuffer, stPicInfo.dwOffSet, stPicInfo.dwFileLenth, smallPicture);
|
// }
|
// }
|
break;
|
}
|
case EVENT_IVS_TRASH_WITHOUT_COVER_DETECTION: //垃圾桶未盖盖子检测事件
|
{
|
System.out.println("Trash without cover Event received.");
|
|
DEV_EVENT_TRASH_WITHOUT_COVER_DETECTION_INFO trashEvent = new DEV_EVENT_TRASH_WITHOUT_COVER_DETECTION_INFO();
|
|
ToolKits.GetPointerDataToStruct(pAlarmInfo, 0, trashEvent);
|
String date = trashEvent.UTC.toStringTime();
|
|
System.out.println("nChannelID = " + trashEvent.nChannelID);
|
System.out.println("szName(GBK) = " + new String(trashEvent.szName, Charset.forName("GBK")));
|
System.out.println("szName(UTF-8) = " + new String(trashEvent.szName, Charset.forName("UTF-8")));
|
System.out.println("nImageInfoNum = " + trashEvent.nImageInfoNum);
|
System.out.println("UTC = " + trashEvent.UTC.toStringTime());
|
// save the picture
|
String imageName = "trashEvent_" + trashEvent.UTC.toStringTitle() + ".jpg";
|
String savePath = picturePath + "/" + imageName;
|
|
ToolKits.savePicture(pBuffer, dwBufSize, savePath);
|
System.out.println("save picture to " + savePath);
|
break;
|
}
|
|
default: {
|
System.out.println("Other Event received: " + dwAlarmType);
|
break;
|
}
|
}
|
|
if (stuFileInfo != null) { // 保存图片
|
// String bigPicture = picturePath + File.separator
|
// + String.format("Big_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType, stuFileInfo.stuFileTime.toStringTitle(),
|
// stuFileInfo.bCount, stuFileInfo.bIndex, stuFileInfo.bFileType, stuFileInfo.nGroupId);
|
// ToolKits.savePicture(pBuffer, 0, dwBufSize, bigPicture);
|
// if (stPicInfo != null && stPicInfo.dwFileLenth > 0) {
|
// String smallPicture = picturePath + File.separator
|
// + String.format("Small_%d_%s_%d_%d_%d_%d.jpg", dwAlarmType,
|
// stuFileInfo.stuFileTime.toStringTitle(), stuFileInfo.bCount, stuFileInfo.bIndex,
|
// stuFileInfo.bFileType, stuFileInfo.nGroupId);
|
// ToolKits.savePicture(pBuffer, stPicInfo.dwOffSet, stPicInfo.dwFileLenth, smallPicture);
|
// }
|
try {
|
|
String extension = "jpg";
|
String picData = ossService.uploadImages(new ByteArrayInputStream(pBuffer.getByteArray(stPicInfo.dwOffSet, dwBufSize)), extension, 0);
|
videoAlarmReport.setPicData(picData);
|
|
} catch (Exception ex) {
|
System.out.println("保存图片错误:" + ex.getMessage());
|
}
|
}
|
videoAlarmReportService.save(videoAlarmReport);
|
|
List<VideoAlarmReport> videoAlarmReports = new ArrayList<>();
|
videoAlarmReports.add(videoAlarmReport);
|
violationsService.saveFromVideo(videoAlarmReports);
|
|
return 0;
|
}
|
}
|