Sfoglia il codice sorgente

镜屏推送ai识别返回结果坐标box

wangchao 4 anni fa
parent
commit
fde3a8e5b3

+ 29 - 23
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/service/impl/KafkaProcessImpl.java

@ -7,6 +7,8 @@ import java.util.HashMap;
7 7
import java.util.List;
8 8
import java.util.Map;
9 9
10
import com.ai.bss.monitorManage.utils.*;
11
import com.sun.javafx.collections.MappingChange;
10 12
import org.apache.commons.lang.StringUtils;
11 13
import org.apache.logging.log4j.util.Strings;
12 14
import org.slf4j.Logger;
@ -29,11 +31,6 @@ import com.ai.bss.monitorManage.model.IdenResultDto;
29 31
import com.ai.bss.monitorManage.model.MonitorVideoLogDto;
30 32
import com.ai.bss.monitorManage.service.interfaces.FileManageService;
31 33
import com.ai.bss.monitorManage.service.interfaces.KafkaProcess;
32
import com.ai.bss.monitorManage.utils.DateUtils;
33
import com.ai.bss.monitorManage.utils.FileUtils;
34
import com.ai.bss.monitorManage.utils.HttpServiceUtil;
35
import com.ai.bss.monitorManage.utils.KafkaProducerConfig;
36
import com.ai.bss.monitorManage.utils.SecurityProtectionMinioConfig;
37 34
import com.alibaba.fastjson.JSON;
38 35
import com.alibaba.fastjson.JSONArray;
39 36
import com.alibaba.fastjson.JSONObject;
@ -320,6 +317,10 @@ public class KafkaProcessImpl implements KafkaProcess {
320 317
							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
321 318
							idenResultDto.setAlarmType(aiClassName);
322 319
							idenResultDto.setAlarmMemo(aiClassName);
320
							Map resultMap = (Map)jsonoArray.get(i);
321
							int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray)resultMap.get("box"));
322
							idenResultDto.setBox(boxIntArr);
323
323 324
							idenResultDtoList.add(idenResultDto);
324 325
							// aiIdenLogDto.setIdenResult(idenResultDtoList);
325 326
							aiIdenLogDto.setIdenResult(JSON.toJSONString(idenResultDtoList));
@ -331,6 +332,11 @@ public class KafkaProcessImpl implements KafkaProcess {
331 332
							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
332 333
							idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_WEA);
333 334
							idenResultDto.setAlarmMemo("未戴安全帽");
335
336
							Map resultMap = (Map)jsonoArray.get(i);
337
							int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray)resultMap.get("box"));
338
							idenResultDto.setBox(boxIntArr);
339
334 340
							aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
335 341
							idenResultDtoList.add(idenResultDto);
336 342
							// aiIdenLogDto.setIdenResult(idenResultDtoList);
@ -434,12 +440,7 @@ public class KafkaProcessImpl implements KafkaProcess {
434 440
					resultDto.setSimi(score.setScale(4,BigDecimal.ROUND_HALF_UP).floatValue());
435 441
					resultDto.setIsMatch(0);
436 442
437
					JSONArray boxJSONArray = (JSONArray) resultMap.get("box");
438
					int[] boxIntArr=new int[boxJSONArray.size()];
439
					for(int i = 0;i<boxJSONArray.size();i++){
440
						BigDecimal boxValue=(BigDecimal) boxJSONArray.get(i);
441
						boxIntArr[i] =boxValue.intValue();
442
					}
443
					int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultMap.get("box"));
443 444
					resultDto.setBox(boxIntArr);
444 445
445 446
					aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT);
@ -449,12 +450,7 @@ public class KafkaProcessImpl implements KafkaProcess {
449 450
					resultDto.setSimi(score.setScale(4,BigDecimal.ROUND_HALF_UP).floatValue());
450 451
					resultDto.setIsMatch(1);
451 452
452
					JSONArray boxJSONArray = (JSONArray) resultMap.get("box");
453
					int[] boxIntArr=new int[boxJSONArray.size()];
454
					for(int i = 0;i<boxJSONArray.size();i++){
455
						BigDecimal boxValue=(BigDecimal) boxJSONArray.get(i);
456
						boxIntArr[i] =boxValue.intValue();
457
					}
453
					int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultMap.get("box"));
458 454
					resultDto.setBox(boxIntArr);
459 455
460 456
					aiIdenLogDto.setRelateEmployeeRoleId(faceId);
@ -512,12 +508,7 @@ public class KafkaProcessImpl implements KafkaProcess {
512 508
					idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_STA);
513 509
					idenResultDto.setAlarmMemo("陌生人");
514 510
515
					JSONArray boxJSONArray = (JSONArray) resultMap.get("box");
516
					int[] boxIntArr=new int[boxJSONArray.size()];
517
					for(int i = 0;i<boxJSONArray.size();i++){
518
						BigDecimal boxValue=(BigDecimal) boxJSONArray.get(i);
519
						boxIntArr[i] =boxValue.intValue();
520
					}
511
					int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultMap.get("box"));
521 512
					idenResultDto.setBox(boxIntArr);
522 513
523 514
					idenResultDtoList.add(idenResultDto);
@ -571,6 +562,11 @@ public class KafkaProcessImpl implements KafkaProcess {
571 562
                                    idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
572 563
                                    idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_VIO);
573 564
                                    idenResultDto.setAlarmMemo("违规吸烟");
565
566
								    Map resultMap = (Map) jsonArray.get(i);
567
									int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultMap.get("box"));
568
									idenResultDto.setBox(boxIntArr);
569
574 570
                                    log.info("检测到违规吸烟");
575 571
                                    aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
576 572
                                    idenResultDtoList.add(idenResultDto);
@ -621,6 +617,10 @@ private AiIdenLogDto workClothesDetect(AiIdenLogDto aiIdenLogDto, String aifileP
621 617
						idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_WEA);
622 618
						idenResultDto.setAlarmMemo("未穿工作服");
623 619
						log.info("未穿工作服");
620
621
						int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultList.get(i).get("box"));
622
						idenResultDto.setBox(boxIntArr);
623
624 624
						aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
625 625
						idenResultDtoList.add(idenResultDto);
626 626
						aiIdenLogDto.setIdenResult(JSON.toJSONString(idenResultDtoList));
@ -630,6 +630,10 @@ private AiIdenLogDto workClothesDetect(AiIdenLogDto aiIdenLogDto, String aifileP
630 630
						idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
631 631
						idenResultDto.setAlarmType(aiClassName);
632 632
						idenResultDto.setAlarmMemo(aiClassName);
633
634
						int[] boxIntArr = ArrayUtils.JsonToArray((JSONArray) resultList.get(i).get("box"));
635
						idenResultDto.setBox(boxIntArr);
636
633 637
						idenResultDtoList.add(idenResultDto);
634 638
						aiIdenLogDto.setIdenResult(JSON.toJSONString(idenResultDtoList));
635 639
						aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT);
@ -671,6 +675,8 @@ private AiIdenLogDto instrumentDetect(AiIdenLogDto aiIdenLogDto, String aifilePa
671 675
				aiIdenLogDto.setRelateEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
672 676
				log.info("返回的仪表信息为:"+jsonObjectpredictions.getString("Items"));
673 677
				aiIdenLogDto.setIdenResult(jsonObjectpredictions.getString("Items"));
678
679
674 680
				log.info("仪表识别成功,推送KAFKA消息");
675 681
				processKafka(aiIdenLogDto.getTopic(), JSONObject.toJSONString(aiIdenLogDto));
676 682
				log.info("消息推送完成");

+ 32 - 0
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/utils/ArrayUtils.java

@ -0,0 +1,32 @@
1
package com.ai.bss.monitorManage.utils;
2
3
import com.alibaba.fastjson.JSONArray;
4
5
import java.math.BigDecimal;
6
import java.util.Calendar;
7
import java.util.Date;
8
9
/**
10
 * @Auther: 王超
11
 * @Date: 2021/2/3 17:49
12
 * @Description:
13
 */
14
public class ArrayUtils {
15
16
    /**
17
     * JSONArray转int[]
18
     * @param jsonArray 原json
19
     *
20
     * @return boxIntArr
21
     */
22
    public static int[] JsonToArray(JSONArray jsonArray) {
23
        int[] boxIntArr=new int[jsonArray.size()];
24
        for(int i = 0;i<jsonArray.size();i++){
25
            BigDecimal boxValue=(BigDecimal) jsonArray.get(i);
26
            boxIntArr[i] =boxValue.intValue();
27
        }
28
        return boxIntArr;
29
    }
30
31
32
}

+ 1 - 1
monitor-manage-service/src/main/resources/application.properties

@ -74,7 +74,7 @@ logging.level.org.springframework.data=debug
74 74
75 75
76 76
camera.filePath=/home/puaiuc/data/DAHUA
77
#camera.filePath=E:\\data\\DAHUA
77
#camera.filePath=D:\\data\\DAHUA
78 78
79 79
#AI\u05b4\ufffd\u043d\ufffd\ufffd
80 80
#kafka.topic.aitask=topicTaskTest

+ 15 - 0
security-protection-service/src/main/java/com/ai/bss/security/protection/config/MyCorsFilter.java

@ -4,6 +4,8 @@ import com.ai.sso.filter.SessionUserFilter;
4 4
import org.springframework.boot.web.servlet.FilterRegistrationBean;
5 5
import org.springframework.context.annotation.Bean;
6 6
import org.springframework.context.annotation.Configuration;
7
import org.springframework.core.task.TaskExecutor;
8
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
7 9
import org.springframework.web.cors.CorsConfiguration;
8 10
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
9 11
import org.springframework.web.filter.CorsFilter;
@ -11,6 +13,7 @@ import org.springframework.web.filter.CorsFilter;
11 13
import java.util.Arrays;
12 14
import java.util.HashMap;
13 15
import java.util.Map;
16
import java.util.concurrent.ThreadPoolExecutor;
14 17
15 18
/**
16 19
 * 解决接口跨域问题
@ -58,4 +61,16 @@ public class MyCorsFilter {
58 61
        registrationBean.setInitParameters(initParameters);
59 62
        return registrationBean;
60 63
    }
64
65
    @Bean
66
    public ThreadPoolTaskExecutor executor(){
67
        ThreadPoolTaskExecutor executor=new ThreadPoolTaskExecutor();
68
        executor.setCorePoolSize(10); //核心线程数
69
        executor.setMaxPoolSize(20);  //最大线程数
70
        executor.setQueueCapacity(1000); //队列大小
71
        executor.setKeepAliveSeconds(300); //线程最大空闲时间
72
        executor.setThreadNamePrefix("fsx-Executor-"); //指定用于新创建的线程名称的前缀。
73
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
74
        return executor;
75
    }
61 76
}

+ 8 - 0
security-protection-service/src/main/java/com/ai/bss/security/protection/service/task/AiResultRecordKafkaTask.java

@ -2,11 +2,14 @@ package com.ai.bss.security.protection.service.task;
2 2
3 3
import java.util.List;
4 4
import java.util.Map;
5
import java.util.concurrent.FutureTask;
5 6
6 7
import org.apache.kafka.clients.consumer.ConsumerRecord;
7 8
import org.springframework.beans.factory.annotation.Autowired;
9
import org.springframework.core.task.TaskExecutor;
8 10
import org.springframework.kafka.annotation.KafkaListener;
9 11
import org.springframework.kafka.support.Acknowledgment;
12
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
10 13
import org.springframework.stereotype.Component;
11 14
import org.springframework.util.CollectionUtils;
12 15
@ -47,6 +50,7 @@ public class AiResultRecordKafkaTask {
47 50
	@Autowired
48 51
	private EmployeeService employeeService;
49 52
53
50 54
	@KafkaListener(containerFactory = "kafkaBatchListener6", topics = "${kafka.topic.aitask:topic_ai_task}", groupId = "ai_group")
51 55
	public void AiResultRecordListener(ConsumerRecord<String, String> records, Acknowledgment ack) throws Throwable {
52 56
	/*@KafkaListener(containerFactory = "kafkaBatchListener6", topics = "${kafka.topic.aitask:topicTaskTest}", groupId = "ai_group")
@ -60,6 +64,10 @@ public class AiResultRecordKafkaTask {
60 64
			AiIdenLog aiIdenLog = JSON.parseObject(message, new TypeReference<AiIdenLog>() {
61 65
			});
62 66
67
			//将结果使用一步方式用镜屏推送到前台
68
			FutureTask<Integer> integerFutureTask = new FutureTask<>(new MirrorSendAiDataThread(message));
69
			new Thread(integerFutureTask).start();
70
63 71
			JSONObject messageJson = JSONObject.parseObject(message);
64 72
			String resourceToolId = messageJson.getString("resourceToolId");
65 73
			String idenResultType = messageJson.getString("idenResultType");

+ 0 - 60
security-protection-service/src/main/java/com/ai/bss/security/protection/service/task/AlarmMirrorTask.java

@ -1,60 +0,0 @@
1
package com.ai.bss.security.protection.service.task;
2
3
import com.ai.abc.api.model.CommonRequest;
4
import com.ai.abc.api.model.CommonResponse;
5
import com.ai.bss.security.protection.service.interfaces.CharSpecService;
6
import com.ai.bss.security.protection.utils.EbcConstant;
7
import com.ai.bss.work.task.model.common.WorkTask;
8
import com.ai.bss.worker.service.api.EntityAlarmHandle;
9
import com.alibaba.fastjson.JSON;
10
import com.alibaba.fastjson.JSONObject;
11
import org.apache.commons.collections4.map.HashedMap;
12
import org.slf4j.Logger;
13
import org.slf4j.LoggerFactory;
14
import org.springframework.beans.factory.annotation.Autowired;
15
import org.springframework.stereotype.Component;
16
17
import java.util.Map;
18
19
@Component
20
public class AlarmMirrorTask implements EntityAlarmHandle {
21
	private Logger logger = LoggerFactory.getLogger(AlarmMirrorTask.class);
22
23
	@Autowired
24
	private CharSpecService charSpecService;
25
26
	/**
27
	 * 镜屏推送实时报警信息
28
	 *
29
	 * @param workTask
30
	 * @return
31
	 */
32
	@Override
33
	public CommonResponse<Map<String, Object>> alarmHandle(CommonRequest<WorkTask> workTask) {
34
		logger.debug("====================实时报警接收镜屏数据: " + JSON.toJSONString(workTask));
35
		try {
36
			String charValueSet = workTask.getData().getCharValueSet();
37
			JSONObject alarmJsonObj = JSONObject.parseObject(charValueSet);
38
39
			Map<String, String> resultMap = new HashedMap<String, String>();
40
41
42
			resultMap.put("workTaskId", workTask.getData().getWorkTaskId());
43
			resultMap.put("employeeName", workTask.getData().getTargetEmployeeRoleName());
44
			resultMap.put("longitude", alarmJsonObj.getString("longitude"));
45
			resultMap.put("latitude", alarmJsonObj.getString("latitude"));
46
47
			resultMap.put("businessType", alarmJsonObj.getString("businessType"));
48
49
50
			String msg = JSON.toJSONString(CommonResponse.ok(resultMap));
51
			logger.info("实时报警推送镜屏数据: " + msg);
52
			MirrorManagement.sendData(MirrorManagement.TOPIC_ALARM, msg);
53
54
		} catch (Exception e) {
55
			logger.error("实时报警推送镜屏失败: " + e.getMessage());
56
		}
57
58
		return null;
59
	}
60
}

+ 2 - 5
security-protection-service/src/main/java/com/ai/bss/security/protection/service/task/MirrorManagement.java

@ -15,11 +15,8 @@ import org.slf4j.LoggerFactory;
15 15
public class MirrorManagement {
16 16
	private static Logger logger = LoggerFactory.getLogger(MirrorManagement.class);
17 17
18
	// 定位topic
19
	public static final String TOPIC_LOCATION = "personnel";
20
21
	// 报警topic
22
	public static final String TOPIC_ALARM = "alarm";
18
	// ai返回结果topic
19
	public static final String SEND_AI_DATA = "sendAiData";
23 20
24 21
	public static void sendData(String topic, String msg) {
25 22
		logger.debug("推送镜屏数据: topic=" + topic + " , data=" + msg);

+ 54 - 0
security-protection-service/src/main/java/com/ai/bss/security/protection/service/task/MirrorSendAiDataThread.java

@ -0,0 +1,54 @@
1
package com.ai.bss.security.protection.service.task;
2
3
import com.ai.abc.api.model.CommonRequest;
4
import com.ai.abc.api.model.CommonResponse;
5
import com.ai.bss.security.protection.service.interfaces.CharSpecService;
6
import com.ai.bss.work.task.model.common.WorkTask;
7
import com.ai.bss.worker.service.api.EntityAlarmHandle;
8
import com.alibaba.fastjson.JSON;
9
import com.alibaba.fastjson.JSONObject;
10
import org.apache.commons.collections4.map.HashedMap;
11
import org.slf4j.Logger;
12
import org.slf4j.LoggerFactory;
13
import org.springframework.beans.factory.annotation.Autowired;
14
import org.springframework.beans.factory.annotation.Qualifier;
15
import org.springframework.stereotype.Component;
16
17
import java.util.Map;
18
import java.util.concurrent.Callable;
19
20
public class MirrorSendAiDataThread implements Callable<Integer> {
21
	private Logger logger = LoggerFactory.getLogger(MirrorSendAiDataThread.class);
22
23
	private String message;
24
25
	public MirrorSendAiDataThread(String aimessage) {
26
		this.message = aimessage;
27
	}
28
29
	@Override
30
	public Integer call() throws Exception {
31
		System.out.println("执行call。。。。。。。。。。。。。。方法");
32
		mirrorSendAiData(message);
33
		return null;
34
	}
35
36
	/**
37
	 * 镜屏推送ai识别数据
38
	 *
39
	 * @param message
40
	 * @return
41
	 */
42
	public Object mirrorSendAiData(String message) {
43
		logger.debug("====================实时报警接收镜屏数据: " + message);
44
		try {
45
			logger.info("实时报警推送镜屏数据: " + message);
46
			MirrorManagement.sendData(MirrorManagement.SEND_AI_DATA, message);
47
48
		} catch (Exception e) {
49
			logger.error("实时报警推送镜屏失败: " + e.getMessage());
50
		}
51
52
		return null;
53
	}
54
}