Sfoglia il codice sorgente

新增AI人脸识别判断

konghl 4 anni fa
parent
commit
469ee9814e

+ 26 - 4
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/model/AiIdenLogDto.java

@ -2,9 +2,6 @@ package com.ai.bss.monitorManage.model;
2 2
3 3
import lombok.Data;
4 4
5
import java.util.ArrayList;
6
import java.util.List;
7
8 5
@Data
9 6
public class AiIdenLogDto {
10 7
    private static final long serialVersionUID = -1L;
@ -12,18 +9,37 @@ public class AiIdenLogDto {
12 9
     * AI任务标识
13 10
     */
14 11
    private Long aiTaskId;
12
    
13
    /**
14
     * 监控场景归属的组织编码
15
     */
16
    private String organizationId;
17
    
15 18
    /**
16 19
     * AI匹配模型
17 20
     */
18 21
    private String aiIdenModel;
22
    
23
    /**
24
     * 工作工具标识
25
     */
26
    private String resourceToolId;
27
    
19 28
    /**
20 29
     * 工作工具编号
21 30
     */
22 31
    private String resourceToolCode;
32
    
33
    /**
34
     * '工作工具名称
35
     */
36
    private String resourceToolName;
37
    
23 38
    /**
24 39
     * 任务执行时间
25 40
     */
26 41
    private String taskExecuteTime;
42
    
27 43
    /**
28 44
     * 识别结果类型:AI执行结果、考勤和违规记录
29 45
     */
@ -31,7 +47,8 @@ public class AiIdenLogDto {
31 47
    /**
32 48
     * 识别结果详情
33 49
     */
34
    private List<IdenResultDto> idenResult;
50
    //private List<IdenResultDto> idenResult;
51
    private String idenResult;
35 52
    /**
36 53
     * 识别图片抓拍时间
37 54
     */
@ -50,4 +67,9 @@ public class AiIdenLogDto {
50 67
     */
51 68
    private String topic;
52 69
70
    
71
    /**
72
     * 关联员工号
73
     */
74
    private String relateEmployeeRoleId;
53 75
}

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

@ -1,5 +1,22 @@
1 1
package com.ai.bss.monitorManage.service.impl;
2 2
3
import java.io.File;
4
import java.util.ArrayList;
5
import java.util.HashMap;
6
import java.util.List;
7
import java.util.Map;
8
9
import org.apache.commons.lang.StringUtils;
10
import org.apache.logging.log4j.util.Strings;
11
import org.springframework.beans.factory.annotation.Autowired;
12
import org.springframework.beans.factory.annotation.Value;
13
import org.springframework.kafka.core.KafkaTemplate;
14
import org.springframework.scheduling.annotation.Async;
15
import org.springframework.stereotype.Service;
16
import org.springframework.util.CollectionUtils;
17
import org.springframework.web.multipart.MultipartFile;
18
import org.springframework.web.multipart.commons.CommonsMultipartFile;
19
3 20
import com.ai.bss.components.common.util.ImageBase64Converter;
4 21
import com.ai.bss.components.ebcai.service.EbcAiService;
5 22
import com.ai.bss.monitorManage.constant.MonitorManageConsts;
@ -10,295 +27,416 @@ import com.ai.bss.monitorManage.service.interfaces.FileManageService;
10 27
import com.ai.bss.monitorManage.service.interfaces.KafkaProcess;
11 28
import com.ai.bss.monitorManage.utils.DateUtils;
12 29
import com.ai.bss.monitorManage.utils.FileUtils;
30
import com.ai.bss.monitorManage.utils.HttpServiceUtil;
13 31
import com.ai.bss.monitorManage.utils.KafkaProducerConfig;
14 32
import com.ai.bss.monitorManage.utils.SecurityProtectionMinioConfig;
33
import com.alibaba.fastjson.JSON;
15 34
import com.alibaba.fastjson.JSONArray;
16 35
import com.alibaba.fastjson.JSONObject;
17
import lombok.extern.slf4j.Slf4j;
18
import org.apache.logging.log4j.util.Strings;
19
import org.springframework.beans.factory.annotation.Autowired;
20
import org.springframework.beans.factory.annotation.Value;
21
import org.springframework.kafka.core.KafkaTemplate;
22
import org.springframework.scheduling.annotation.Async;
23
import org.springframework.stereotype.Service;
24
import org.springframework.web.multipart.MultipartFile;
25
import org.springframework.web.multipart.commons.CommonsMultipartFile;
26
27
import java.io.File;
28
import java.util.*;
29 36
37
import lombok.extern.slf4j.Slf4j;
30 38
31 39
@Slf4j
32 40
@Service
33 41
public class KafkaProcessImpl implements KafkaProcess {
34 42
//    EBC设备tcp连接服务地址
35
    private static final String HOST = "47.105.130.83";
36
    private static final int PORT = 8042;
43
	private static final String HOST = "47.105.130.83";
44
	private static final int PORT = 8042;
37 45
38 46
//    private static String kafkaServers = "47.105.160.21:9090";
39
    private static String kafkaServers = "10.19.90.34:9090";
40
41
    @Value("${kafka.producer.servers}")
42
    private static String servers;
47
	private static String kafkaServers = "10.19.90.34:9090";
43 48
49
	@Value("${kafka.producer.servers}")
50
	private static String servers;
44 51
45
    @Value("${camera.filePath}")
46
    private String baseFilePath;
52
	@Value("${camera.filePath}")
53
	private String baseFilePath;
47 54
48
    @Value("${kafka.topic.aitask}")
49
    private String topicAiTask;
55
	@Value("${kafka.topic.aitask}")
56
	private String topicAiTask;
50 57
51
    @Value("${kafka.topic.aivideo}")
52
    private String topicAiVideo;
58
	@Value("${kafka.topic.aivideo}")
59
	private String topicAiVideo;
53 60
54
    @Autowired
55
    private EbcAiService ebcAiService;
61
	@Value("${ebc.protection.resource-url}")
62
	private String protectionResourceUrl;
56 63
57
    @Autowired
58
    private SecurityProtectionMinioConfig minioConfig;
64
	@Autowired
65
	private EbcAiService ebcAiService;
59 66
67
	@Autowired
68
	private SecurityProtectionMinioConfig minioConfig;
60 69
61
    @Autowired
62
    private FileManageService fileManageService;
70
	@Autowired
71
	private FileManageService fileManageService;
63 72
64
    @Async
65
    @Override
66
    public void processKafka(String topic,List<String> msgList){
73
	@Async
74
	@Override
75
	public void processKafka(String topic, List<String> msgList) {
67 76
//        List<DataPoint> dataPointList =  parseDataPoint(mockScenarioDataList,topic0,topic1);
68
        try {
69
            for (String msg : msgList) {
70
                sendKafkaDataPoint(topic,msg);
71
            }
72
        }catch (Exception e){
73
            e.printStackTrace();
74
        }
75
    }
76
77
    @Async
78
    @Override
79
    public void processKafka(String topic,String msg){
80
        try {
81
            sendKafkaDataPoint(topic,msg);
82
        }catch (Exception e){
83
            e.printStackTrace();
84
        }
85
    }
86
87
88
    @Async
89
    @Override
90
    public void processImageFile(String fileKey,String filePath) throws Exception {
91
        Thread.sleep(3000);
92
        String deviceCode = "";
93
        String fileType = "";
94
        String fileName = "";
95
        String dateTime = "";
96
        String[] keyArr;
97
        MultipartFile multipartFile = null;
98
        Map<String, String> minioFileMap = null;
99
        AiIdenLogDto aiIdenLogDto = null;
100
        String time = "";
101
        String bucketName =  "";
102
        keyArr = fileKey.split("~!@");
103
        deviceCode = keyArr[0];
104
        fileType = keyArr[1];
105
106
        aiIdenLogDto = new AiIdenLogDto();
107
        fileName = filePath.substring(filePath.lastIndexOf(MonitorManageConsts.getSystemSeparator())+1,filePath.length());
108
        if(fileType.equals(MonitorManageConsts.FILE_TYPE_IMG)){
109
            bucketName = minioConfig.getBucketAiImage();
110
            time = fileName.substring(3,17);
111
            dateTime = DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIMEHHMM_PATTERN),DateUtils.NORM_DATETIME_PATTERN);
112
            aiIdenLogDto.setTaskExecuteTime(DateUtils.getSysDateTime());
113
            aiIdenLogDto.setIdenPictureSnapDate(dateTime);
114
        }
115
        //文件上传到 minio文件服务器
116
        multipartFile = new CommonsMultipartFile(FileUtils.createFileItem(new File(filePath),fileName));
117
118
        log.info("保存图片文件");
119
        minioFileMap = fileManageService.uploadFile(multipartFile,bucketName,deviceCode,null);
120
121
        if(fileType.equals(MonitorManageConsts.FILE_TYPE_IMG)){
122
            aiIdenLogDto.setIdenVideoUrl("");
123
            aiIdenLogDto.setIdenPictureUrl(minioFileMap.get("fileId"));
124
            aiIdenLogDto.setResourceToolCode(deviceCode);
125
            //安全帽识别
126
            aiIdenLogDto.setTopic(topicAiTask);//AI识别TOPICs
127
128
            //人体识别
129
            boolean isHuman = aiworkHumanDetect(filePath);
130
            //AI头盔检查
131
            if(isHuman){
132
                aiIdenLogDto = aiHelmetDetect(aiIdenLogDto,filePath);
133
            }
134
        }
135
136
        log.info("-------等待任务--------");
137
    }
138
139
    @Async
140
    @Override
141
    public void processVideoFile(String fileKey,String filePath) throws Exception {
142
        Thread.sleep(70000);
143
        String deviceCode = "";
144
        String fileType = "";
145
        String fileName = "";
146
        String dateTime = "";
147
        String[] keyArr;
148
        MultipartFile multipartFile = null;
149
        Map<String, String> minioFileMap = null;
150
        MonitorVideoLogDto monitorVideoLogDto = null;
151
        String time = "";
152
        String bucketName =  "";
153
            keyArr = fileKey.split("~!@");
154
            deviceCode = keyArr[0];
155
            fileType = keyArr[1];
156
157
                monitorVideoLogDto = new MonitorVideoLogDto();
158
                fileName = filePath.substring(filePath.lastIndexOf(MonitorManageConsts.getSystemSeparator())+1,filePath.length());
159
                if(fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
160
                    bucketName = minioConfig.getBucketAiVideo();
161
                    time = fileName.substring(5,19);
162
                    dateTime = DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIME_PATTERN),DateUtils.NORM_DATETIME_HHMM_PATTERN);
163
                    monitorVideoLogDto.setBeginTime(dateTime + ":00");
164
                    monitorVideoLogDto.setEndTime(dateTime + ":59");
165
166
                }
167
                //文件上传到 minio文件服务器
168
                multipartFile = new CommonsMultipartFile(FileUtils.createFileItem(new File(filePath),fileName));
169
170
                log.info("保存文件");
171
                minioFileMap = fileManageService.uploadFile(multipartFile,bucketName,deviceCode,null);
172
173
                if(fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
174
                    monitorVideoLogDto.setTopic(topicAiVideo);//视频历史记录TOPIC
175
                    monitorVideoLogDto.setVideoUrl(minioFileMap.get("fileId"));
176
                    monitorVideoLogDto.setResourceToolCode(deviceCode);
177
                    processKafka(monitorVideoLogDto.getTopic(), JSONObject.toJSONString(monitorVideoLogDto));
178
                }
179
        log.info("-------等待任务--------");
180
    }
181
182
    public static void main(String[] args) throws Exception {
183
        String filePath = MonitorManageConsts.getSystemSeparator() + "home"+MonitorManageConsts.getSystemSeparator()+"puaiuc"+MonitorManageConsts.getSystemSeparator()+"data"+MonitorManageConsts.getSystemSeparator()
184
                +"DAHUA"+MonitorManageConsts.getSystemSeparator()+"5A02296PAKA885B"+MonitorManageConsts.getSystemSeparator()+"videos"+MonitorManageConsts.getSystemSeparator()+"video20201219151941.mp4";
185
       String  fileName = filePath.substring(filePath.lastIndexOf(MonitorManageConsts.getSystemSeparator())+1,filePath.length());
186
        String time = fileName.substring(5,19);
187
        String dateTime = DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIME_PATTERN),DateUtils.NORM_DATETIME_HHMM_PATTERN);
188
        System.out.println(dateTime);
189
    }
190
191
192
193
    private Map<String, KafkaTemplate> kafkaTemplateMap = new HashMap<>();
194
195
196
    private boolean sendKafkaDataPoint(String topic,String msgStr){
197
        KafkaTemplate kafkaTemplate = kafkaTemplateMap.get(kafkaServers);
198
        if(kafkaTemplate == null){
199
            //new 实例
200
            KafkaProducerConfig kafkaProducerConfig = new KafkaProducerConfig(kafkaServers);
201
            kafkaTemplate = kafkaProducerConfig.kafkaTemplate();
202
            kafkaTemplateMap.put(kafkaServers,kafkaTemplate);
203
        }
204
205
        try {
206
            Object result = kafkaTemplate.send(topic, msgStr).get();
207
            System.out.println("发送kafka消息:topic="+topic + "msg: "+msgStr);
208
        } catch (Exception e) {
209
            log.error(e.getMessage());
210
            return false;
211
        }
212
213
        return true;
214
    }
215
216
217
    /**
218
     * AI头盔检查
219
     * @param aiIdenLogDto
220
     * @return
221
     */
222
    private AiIdenLogDto aiHelmetDetect(AiIdenLogDto aiIdenLogDto,String aifilePath){
223
        try {
224
            log.info("开始AI处理...");
225
            //安全帽识别
226
            String aiResponseData = ebcAiService.helmetDetect(ImageBase64Converter.convertFileToBase64(aifilePath), Strings.EMPTY, Strings.EMPTY);
77
		try {
78
			for (String msg : msgList) {
79
				sendKafkaDataPoint(topic, msg);
80
			}
81
		} catch (Exception e) {
82
			e.printStackTrace();
83
		}
84
	}
85
86
	@Async
87
	@Override
88
	public void processKafka(String topic, String msg) {
89
		try {
90
			sendKafkaDataPoint(topic, msg);
91
		} catch (Exception e) {
92
			e.printStackTrace();
93
		}
94
	}
95
96
	@Async
97
	@Override
98
	public void processImageFile(String fileKey, String filePath) throws Exception {
99
		Thread.sleep(3000);
100
		String deviceCode = "";
101
		String fileType = "";
102
		String fileName = "";
103
		String dateTime = "";
104
		String[] keyArr;
105
		MultipartFile multipartFile = null;
106
		Map<String, String> minioFileMap = null;
107
		AiIdenLogDto aiIdenLogDto = null;
108
		String time = "";
109
		String bucketName = "";
110
		keyArr = fileKey.split("~!@");
111
		deviceCode = keyArr[0];
112
		fileType = keyArr[1];
113
114
		aiIdenLogDto = new AiIdenLogDto();
115
		fileName = filePath.substring(filePath.lastIndexOf(MonitorManageConsts.getSystemSeparator()) + 1,
116
				filePath.length());
117
		if (fileType.equals(MonitorManageConsts.FILE_TYPE_IMG)) {
118
			bucketName = minioConfig.getBucketAiImage();
119
			time = fileName.substring(3, 17);
120
			//dateTime = DateUtils.formatDate(DateUtils.convertDate(time, DateUtils.PURE_DATETIMEHHMM_PATTERN),
121
			//		DateUtils.NORM_DATETIME_PATTERN);
122
			// aiIdenLogDto.setTaskExecuteTime(DateUtils.getSysDateTime());
123
			dateTime = DateUtils.formatDate(DateUtils.convertDate(time, DateUtils.PURE_DATETIME_PATTERN),
124
					DateUtils.NORM_DATETIME_PATTERN);
125
			aiIdenLogDto.setTaskExecuteTime(StringUtils.isEmpty(dateTime) ? DateUtils.getSysDateTime() : dateTime);
126
			aiIdenLogDto.setIdenPictureSnapDate(dateTime);
127
		}
128
		// 文件上传到 minio文件服务器
129
		multipartFile = new CommonsMultipartFile(FileUtils.createFileItem(new File(filePath), fileName));
130
131
		log.info("保存图片文件");
132
		minioFileMap = fileManageService.uploadFile(multipartFile, bucketName, deviceCode, null);
133
134
		if (fileType.equals(MonitorManageConsts.FILE_TYPE_IMG)) {
135
			aiIdenLogDto.setIdenVideoUrl("");
136
			aiIdenLogDto.setIdenPictureUrl(minioFileMap.get("fileId"));
137
			aiIdenLogDto.setResourceToolCode(deviceCode);
138
139
			// 根据监控任务执行AI识别
140
			List<Map> resourceToolInfoList = getResourceToolAllInfo(deviceCode);
141
142
			for (Map resourceToolInfoMap : resourceToolInfoList) {
143
				if (resourceToolInfoMap.get("aiTaskId") != null && aiworkHumanDetect(filePath)) {
144
					String aiIdenModel = resourceToolInfoMap.get("aiIdenModel") == null ? ""
145
							: resourceToolInfoMap.get("aiIdenModel").toString();
146
147
					aiIdenLogDto.setAiTaskId(Long.valueOf(resourceToolInfoMap.get("aiTaskId").toString()));
148
					aiIdenLogDto.setAiIdenModel(aiIdenModel);
149
					aiIdenLogDto.setOrganizationId(resourceToolInfoMap.get("orgId") == null ? ""
150
							: resourceToolInfoMap.get("orgId").toString());
151
					aiIdenLogDto.setResourceToolId(resourceToolInfoMap.get("resourceToolId") == null ? ""
152
							: resourceToolInfoMap.get("resourceToolId").toString());
153
					aiIdenLogDto.setResourceToolName(resourceToolInfoMap.get("resourceToolName") == null ? ""
154
							: resourceToolInfoMap.get("resourceToolName").toString());
155
					aiIdenLogDto.setTopic(topicAiTask);
156
157
					if (MonitorManageConsts.AI_MODEL_FACE.equals(aiIdenModel)) {
158
						aiIdenLogDto = faceAiRecog(aiIdenLogDto, filePath);
159
160
					} else if (MonitorManageConsts.AI_MODEL_CLOTHING_CODE.equals(aiIdenModel)) {
161
						aiIdenLogDto = aiHelmetDetect(aiIdenLogDto, filePath);
162
163
					}
164
					/*else if (MonitorManageConsts.AI_MODEL_STRANGER.equals(aiIdenModel)) {
165
						
166
					} else {
167
						
168
					}*/
169
				}
170
			}
171
172
			/*// 安全帽识别
173
			aiIdenLogDto.setTopic(topicAiTask);// AI识别TOPICs
174
			
175
			// 人体识别
176
			boolean isHuman = aiworkHumanDetect(filePath);
177
			// AI头盔检查
178
			if (isHuman) {
179
				aiIdenLogDto = aiHelmetDetect(aiIdenLogDto, filePath);
180
			}*/
181
		}
182
183
		log.info("-------等待任务--------");
184
	}
185
186
	@Async
187
	@Override
188
	public void processVideoFile(String fileKey, String filePath) throws Exception {
189
		Thread.sleep(70000);
190
		String deviceCode = "";
191
		String fileType = "";
192
		String fileName = "";
193
		String dateTime = "";
194
		String[] keyArr;
195
		MultipartFile multipartFile = null;
196
		Map<String, String> minioFileMap = null;
197
		MonitorVideoLogDto monitorVideoLogDto = null;
198
		String time = "";
199
		String bucketName = "";
200
		keyArr = fileKey.split("~!@");
201
		deviceCode = keyArr[0];
202
		fileType = keyArr[1];
203
204
		monitorVideoLogDto = new MonitorVideoLogDto();
205
		fileName = filePath.substring(filePath.lastIndexOf(MonitorManageConsts.getSystemSeparator()) + 1,
206
				filePath.length());
207
		if (fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)) {
208
			bucketName = minioConfig.getBucketAiVideo();
209
			time = fileName.substring(5, 19);
210
			dateTime = DateUtils.formatDate(DateUtils.convertDate(time, DateUtils.PURE_DATETIME_PATTERN),
211
					DateUtils.NORM_DATETIME_HHMM_PATTERN);
212
			monitorVideoLogDto.setBeginTime(dateTime + ":00");
213
			monitorVideoLogDto.setEndTime(dateTime + ":59");
214
215
		}
216
		// 文件上传到 minio文件服务器
217
		multipartFile = new CommonsMultipartFile(FileUtils.createFileItem(new File(filePath), fileName));
218
219
		log.info("保存文件");
220
		minioFileMap = fileManageService.uploadFile(multipartFile, bucketName, deviceCode, null);
221
222
		if (fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)) {
223
			monitorVideoLogDto.setTopic(topicAiVideo);// 视频历史记录TOPIC
224
			monitorVideoLogDto.setVideoUrl(minioFileMap.get("fileId"));
225
			monitorVideoLogDto.setResourceToolCode(deviceCode);
226
			processKafka(monitorVideoLogDto.getTopic(), JSONObject.toJSONString(monitorVideoLogDto));
227
		}
228
		log.info("-------等待任务--------");
229
	}
230
231
	public static void main(String[] args) throws Exception {
232
		String filePath = MonitorManageConsts.getSystemSeparator() + "home" + MonitorManageConsts.getSystemSeparator()
233
				+ "puaiuc" + MonitorManageConsts.getSystemSeparator() + "data"
234
				+ MonitorManageConsts.getSystemSeparator() + "DAHUA" + MonitorManageConsts.getSystemSeparator()
235
				+ "5A02296PAKA885B" + MonitorManageConsts.getSystemSeparator() + "videos"
236
				+ MonitorManageConsts.getSystemSeparator() + "video20201219151941.mp4";
237
		String fileName = filePath.substring(filePath.lastIndexOf(MonitorManageConsts.getSystemSeparator()) + 1,
238
				filePath.length());
239
		String time = fileName.substring(5, 19);
240
		String dateTime = DateUtils.formatDate(DateUtils.convertDate(time, DateUtils.PURE_DATETIME_PATTERN),
241
				DateUtils.NORM_DATETIME_HHMM_PATTERN);
242
		System.out.println(dateTime);
243
	}
244
245
	private Map<String, KafkaTemplate> kafkaTemplateMap = new HashMap<>();
246
247
	private boolean sendKafkaDataPoint(String topic, String msgStr) {
248
		KafkaTemplate kafkaTemplate = kafkaTemplateMap.get(kafkaServers);
249
		if (kafkaTemplate == null) {
250
			// new 实例
251
			KafkaProducerConfig kafkaProducerConfig = new KafkaProducerConfig(kafkaServers);
252
			kafkaTemplate = kafkaProducerConfig.kafkaTemplate();
253
			kafkaTemplateMap.put(kafkaServers, kafkaTemplate);
254
		}
255
256
		try {
257
			Object result = kafkaTemplate.send(topic, msgStr).get();
258
			System.out.println("发送kafka消息:topic=" + topic + "msg: " + msgStr);
259
		} catch (Exception e) {
260
			log.error(e.getMessage());
261
			return false;
262
		}
263
264
		return true;
265
	}
266
267
	/**
268
	 * AI头盔检查
269
	 * @param aiIdenLogDto
270
	 * @return
271
	 */
272
	private AiIdenLogDto aiHelmetDetect(AiIdenLogDto aiIdenLogDto, String aifilePath) {
273
		try {
274
			log.info("开始AI处理...");
275
			// 安全帽识别
276
			String aiResponseData = ebcAiService.helmetDetect(ImageBase64Converter.convertFileToBase64(aifilePath),
277
					Strings.EMPTY, Strings.EMPTY);
227 278
//			String aiResponseData = ebcAiService.helmetDetect(ImageBase64Converter.convertInputStreamToBase64(multipartFile.getInputStream()), Strings.EMPTY, Strings.EMPTY);
228
            JSONObject jsonObject = JSONObject.parseObject(aiResponseData);// JSONUtil.formatJsonStr(aiResponseData);
229
            System.out.println("AI 识别结果: "+jsonObject);
230
            IdenResultDto idenResultDto = null;
231
            List<IdenResultDto> idenResultDtoList = null;
232
            if(jsonObject.getString("Status").equals("Ok")){
233
                idenResultDtoList = new ArrayList<>();
234
                JSONArray jsonoArray = JSONArray.parseArray(jsonObject.getString("Result"));
235
                if(jsonoArray.size()>0){
236
                    for(int i=0;i<jsonoArray.size();i++){
237
                        JSONObject resultObj = JSONObject.parseObject(jsonoArray.get(i).toString());
238
                        String aiClassName = resultObj.getString("class");
239
                        //										safety_hat表示安全帽;ordinart_hat表示普通帽子;chef_hat表示厨师帽;none表示未戴帽子
240
                        if(aiClassName.equals("none")){
241
                            idenResultDto =new IdenResultDto();
242
                            idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
243
                            idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_WEA);
244
                            idenResultDto.setAlarmMemo("未戴帽子");
245
                            aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
246
                            idenResultDtoList.add(idenResultDto);
247
                            aiIdenLogDto.setIdenResult(idenResultDtoList);
248
                            aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
249
                        }else{
250
                            //						if(aiClassName.equals("safety_hat")){
251
                            idenResultDto =new IdenResultDto();
252
                            idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
253
                            idenResultDto.setAlarmType(aiClassName);
254
                            idenResultDto.setAlarmMemo(aiClassName);
255
                            idenResultDtoList.add(idenResultDto);
256
                            aiIdenLogDto.setIdenResult(idenResultDtoList);
257
                            aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT);
258
                            aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
259
                        }
260
                    }
261
                    log.info("识别成功,推送KAFKA消息");
262
                    processKafka(aiIdenLogDto.getTopic(), JSONObject.toJSONString(aiIdenLogDto));
263
                }else{
264
                    log.info("没有识别到人,不推送KAFKA消息");
265
                }
266
            }
267
            //AI模型
279
			JSONObject jsonObject = JSONObject.parseObject(aiResponseData);// JSONUtil.formatJsonStr(aiResponseData);
280
			System.out.println("AI 识别结果: " + jsonObject);
281
			IdenResultDto idenResultDto = null;
282
			List<IdenResultDto> idenResultDtoList = null;
283
			if (jsonObject.getString("Status").equals("Ok")) {
284
				idenResultDtoList = new ArrayList<>();
285
				JSONArray jsonoArray = JSONArray.parseArray(jsonObject.getString("Result"));
286
				if (jsonoArray.size() > 0) {
287
					for (int i = 0; i < jsonoArray.size(); i++) {
288
						JSONObject resultObj = JSONObject.parseObject(jsonoArray.get(i).toString());
289
						String aiClassName = resultObj.getString("class");
290
						// safety_hat表示安全帽;ordinart_hat表示普通帽子;chef_hat表示厨师帽;none表示未戴帽子
291
						if (aiClassName.equals("none")) {
292
							idenResultDto = new IdenResultDto();
293
							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
294
							idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_WEA);
295
							idenResultDto.setAlarmMemo("未戴帽子");
296
							aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
297
							idenResultDtoList.add(idenResultDto);
298
							// aiIdenLogDto.setIdenResult(idenResultDtoList);
299
							aiIdenLogDto.setIdenResult(JSON.toJSONString(idenResultDtoList));
300
							// aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
301
							aiIdenLogDto.setRelateEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
302
						} else {
303
							// if(aiClassName.equals("safety_hat")){
304
							idenResultDto = new IdenResultDto();
305
							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
306
							idenResultDto.setAlarmType(aiClassName);
307
							idenResultDto.setAlarmMemo(aiClassName);
308
							idenResultDtoList.add(idenResultDto);
309
							// aiIdenLogDto.setIdenResult(idenResultDtoList);
310
							aiIdenLogDto.setIdenResult(JSON.toJSONString(idenResultDtoList));
311
							aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT);
312
							// aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
313
							aiIdenLogDto.setRelateEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
314
						}
315
					}
316
					log.info("识别成功,推送KAFKA消息");
317
					processKafka(aiIdenLogDto.getTopic(), JSONObject.toJSONString(aiIdenLogDto));
318
				} else {
319
					log.info("没有识别到人,不推送KAFKA消息");
320
				}
321
			}
322
			// AI模型
268 323
//			aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
269
        }catch (Exception e){
270
            log.error("AI处理异常");
271
        }
272
        return aiIdenLogDto;
273
    }
274
275
    /**
276
     * AI人体识别
277
     * @param aifilePath
278
     * @return
279
     */
280
    private boolean aiworkHumanDetect(String aifilePath){
281
        boolean isHuman = false;
282
        try {
283
            //安全帽识别
284
            String aiResponseData = ebcAiService.workClothesDetect(ImageBase64Converter.convertFileToBase64(aifilePath),  true,true,0.9f);
285
286
            JSONObject jsonObject = JSONObject.parseObject(aiResponseData);// JSONUtil.formatJsonStr(aiResponseData);
287
            if(jsonObject.getString("Status").equals("Ok")){
288
                JSONArray jsonoArray = JSONArray.parseArray(jsonObject.getString("Result"));
289
                for(int i=0;i<jsonoArray.size();i++){
290
                    JSONObject resultObj = JSONObject.parseObject(jsonoArray.get(i).toString());
291
                    String aiClassName = resultObj.getString("lable");
292
//										safety_hat表示安全帽;ordinart_hat表示普通帽子;chef_hat表示厨师帽;none表示未戴帽子
293
                    if(aiClassName.equals("person")){
294
                        isHuman = true;
295
                    }
296
                }
297
            }
298
        }catch (Exception e){
299
            log.error("AI处理异常");
300
        }
301
        return isHuman;
302
    }
324
		} catch (Exception e) {
325
			log.error("AI处理异常");
326
		}
327
		return aiIdenLogDto;
328
	}
329
330
	/**
331
	 * AI人体识别(照片中是否有人)
332
	 * @param aifilePath
333
	 * @return
334
	 */
335
	private boolean aiworkHumanDetect(String aifilePath) {
336
		boolean isHuman = false;
337
		try {
338
			/*// 安全帽识别
339
			String aiResponseData = ebcAiService.workClothesDetect(ImageBase64Converter.convertFileToBase64(aifilePath),
340
					true, true, 0.9f);
341
			
342
			JSONObject jsonObject = JSONObject.parseObject(aiResponseData);// JSONUtil.formatJsonStr(aiResponseData);
343
			if (jsonObject.getString("Status").equals("Ok")) {
344
				JSONArray jsonoArray = JSONArray.parseArray(jsonObject.getString("Result"));
345
				for (int i = 0; i < jsonoArray.size(); i++) {
346
					JSONObject resultObj = JSONObject.parseObject(jsonoArray.get(i).toString());
347
					String aiClassName = resultObj.getString("lable");
348
			//										safety_hat表示安全帽;ordinart_hat表示普通帽子;chef_hat表示厨师帽;none表示未戴帽子
349
					if (aiClassName.equals("person")) {
350
						isHuman = true;
351
					}
352
				}
353
			}*/
354
355
			log.info("开始AI人数识别处理...");
356
			String aiResponseData = ebcAiService.headDetect(ImageBase64Converter.convertFileToBase64(aifilePath), true,
357
					0.9f);
358
359
			JSONObject jsonObject = JSONObject.parseObject(aiResponseData);
360
			JSONArray jsonArray = jsonObject.getJSONArray("Result");
361
			if (!CollectionUtils.isEmpty(jsonArray)) {
362
				isHuman = true;
363
				log.info("AI人数识别结果:有" + jsonArray.size() + "人");
364
			} else {
365
				log.info("AI人数识别结果:没有人");
366
			}
367
368
		} catch (Exception e) {
369
			log.error("AI处理异常");
370
		}
371
		return isHuman;
372
	}
373
374
	/**
375
	 * 人脸识别
376
	 * @param aiIdenLogDto
377
	 * @param aifilePath
378
	 * @return
379
	 */
380
	private AiIdenLogDto faceAiRecog(AiIdenLogDto aiIdenLogDto, String aifilePath) {
381
		try {
382
			log.info("开始AI人脸识别处理...");
383
			// 人脸识别
384
			String aiResponseData = ebcAiService.faceAiRecog(ImageBase64Converter.convertFileToBase64(aifilePath));
385
386
			JSONObject jsonObject = JSONObject.parseObject(aiResponseData);
387
			System.out.println("AI人脸识别结果: " + aiResponseData);
388
389
			if ("1".equals(jsonObject.getString("errorcode")) && "success".equals(jsonObject.getString("message"))) {
390
				JSONObject resultJsonObject = JSONObject.parseObject(jsonObject.getString("result"));
391
392
				if (resultJsonObject.getIntValue("is_match") == 0) {
393
					aiIdenLogDto.setIdenResult(jsonObject.getString("result"));
394
					aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT);
395
396
				} else {
397
					aiIdenLogDto.setIdenResult(jsonObject.getString("result"));
398
					aiIdenLogDto.setRelateEmployeeRoleId(resultJsonObject.getString("user_id"));
399
					aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ATTENDANCE);
400
401
				}
402
403
				log.info("识别成功,推送KAFKA消息");
404
				processKafka(aiIdenLogDto.getTopic(), JSONObject.toJSONString(aiIdenLogDto));
405
			} else {
406
				log.info("没有识别到人,不推送KAFKA消息");
407
				return aiIdenLogDto;
408
			}
409
		} catch (Exception e) {
410
			log.error("AI处理异常");
411
		}
412
		return aiIdenLogDto;
413
	}
414
415
	/**
416
	 * 根据设备code获取监控任务详情
417
	 * @param deviceCode
418
	 * @return
419
	 */
420
	private List<Map> getResourceToolAllInfo(String deviceCode) {
421
		List<Map> resourceToolInfoList = new ArrayList<Map>();
422
		try {
423
			String url = protectionResourceUrl + "?resourceToolCode=" + deviceCode;
424
			log.info("getResourceToolAllInfo method params: resourceToolCode=" + deviceCode + ", url=" + url);
425
426
			String resultJson = HttpServiceUtil.sendRequest(url);
427
			JSONObject resultData = JSON.parseObject(resultJson);
428
			if (StringUtils.isEmpty(resultData.getString("data"))) {
429
				log.info("getResourceToolAllInfo method returns an empty result");
430
				return resourceToolInfoList;
431
			}
432
433
			resourceToolInfoList = JSON.parseArray(resultData.getString("data"), Map.class);
434
			log.info("getResourceToolAllInfo method return result: " + resultData.getString("data"));
435
		} catch (Exception e) {
436
			log.error("getResourceToolAllInfo is error");
437
		}
438
439
		return resourceToolInfoList;
440
	}
303 441
304 442
}

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

@ -27,8 +27,8 @@ spring.main.allow-bean-definition-overriding=true
27 27
#kafka
28 28
#kafka.bootstrap-servers=47.105.160.21:9090
29 29
kafka.bootstrap-servers=10.19.90.34:9090
30
kafka.topic.deviceLocation=Topic_IoT_DeviceLocation_111
31
kafka.topic.alarm=Topic_IoT_IndividualAlarm_111
30
#kafka.topic.deviceLocation=Topic_IoT_DeviceLocation_111
31
#kafka.topic.alarm=Topic_IoT_IndividualAlarm_111
32 32
#kafka.topic.deviceLocation=DeviceLocationA
33 33
#kafka.topic.alarm=IndividualAlarmA
34 34
kafka.producer.batch-size=16785
@ -69,23 +69,26 @@ logging.level.com.ai=debug
69 69
logging.level.org.springframework.data=debug
70 70
71 71
72
#camera.filePath=/home/puaiuc/data/DAHUA
73
camera.filePath=E:\\data\\DAHUA
74
75
#AIÖ´Ðнá¹û
76
kafka.topic.aitask=topicTaskTest
77
#kafka.topic.aitask=topic_ai_task
78
#AIÊÓÆµ
79
kafka.topic.aivideo=topicVideoTest
80
#kafka.topic.aivideo=topic_ai_video
81
72
camera.filePath=/home/puaiuc/data/DAHUA
73
#camera.filePath=E:\\data\\DAHUA
82 74
75
#AI\u05b4\ufffd\u043d\ufffd\ufffd
76
#kafka.topic.aitask=topicTaskTest
77
kafka.topic.aitask=topic_ai_task
78
#AI\ufffd\ufffd\u01b5
79
#kafka.topic.aivideo=topicVideoTest
80
kafka.topic.aivideo=topic_ai_video
83 81
84 82
83
#AI\u5931\u8d25\u8bf7\u6c42\u5730\u5740
85 84
ebc.ai.head-det-url=http://10.1.251.211:7001/todo/api/v1.4/control/online/IMAGE/HEAD/PREDICT
86 85
ebc.ai.helmet-det-url=http://10.1.251.211:7003/todo/api/v1.4/control/online/IMAGE/HELMET/PREDICT
87 86
ebc.ai.smokingdet-url=http://10.1.251.213:5125/smokingdet
88 87
ebc.ai.instrument-det-url=http://10.1.251.213:19100/predict
89 88
ebc.ai.work-clothes-det-url=http://10.1.251.211:7003/todo/api/v1.4/control/online/IMAGE/HUMAN/PREDICT
90 89
90
ebc.ai.face-recog-service-url=http://10.21.10.28:9018/api/face/recog
91
92
93
#AI\u4efb\u52a1\u8bf7\u6c42\u5730\u5740
91 94
ebc.protection.resource-url=http://10.19.90.34:8018/sp/resourceTool/getResourceToolAllInfo

+ 1 - 1
security-protection-service/src/main/java/com/ai/bss/security/protection/controller/ResourceToolManageController.java

@ -166,7 +166,7 @@ public class ResourceToolManageController {
166 166
	}
167 167
168 168
	/**
169
	 * 根据设备CODE获取场景、AI任务等相关信息
169
	 * 根据设备CODE获取AI任务等相关信息
170 170
	 * @param meFile
171 171
	 * @return
172 172
	 * @throws Exception

+ 1 - 1
security-protection-service/src/main/java/com/ai/bss/security/protection/service/interfaces/ResourceToolManageService.java

@ -84,7 +84,7 @@ public interface ResourceToolManageService {
84 84
	Map<String, String> uploadResourceToolPicture(MultipartFile meFile, String pictureUrl) throws Exception;
85 85
	
86 86
	/**
87
	 * 根据设备CODE获取场景、AI任务等相关信息
87
	 * 根据设备CODE获取AI任务等相关信息
88 88
	 * @param resourceToolCode
89 89
	 * @return
90 90
	 */