Selaa lähdekoodia

修改AI识别处理服务

wangdong6 4 vuotta sitten
vanhempi
commit
dc68bfa2ea

+ 1 - 0
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/constant/MonitorManageConsts.java

@ -10,6 +10,7 @@ import java.io.File;
10 10
public class MonitorManageConsts {
11 11
    public static String FILE_TYPE_VIDEO = "videos";
12 12
    public static String FILE_TYPE_IMG = "images";
13
    public static String FILE_TYPE_SPLIT = "images";
13 14
14 15
    public static String IdenResultType = "";
15 16

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

@ -1,19 +1,31 @@
1 1
package com.ai.bss.monitorManage.service.impl;
2 2
3
import com.ai.bss.monitorManage.model.AiIdenLog;
3
import com.ai.bss.components.common.util.ImageBase64Converter;
4
import com.ai.bss.components.ebcai.service.EbcAiService;
5
import com.ai.bss.monitorManage.constant.MonitorManageConsts;
4 6
import com.ai.bss.monitorManage.model.AiIdenLogDto;
7
import com.ai.bss.monitorManage.model.IdenResultDto;
8
import com.ai.bss.monitorManage.model.MonitorVideoLogDto;
9
import com.ai.bss.monitorManage.service.interfaces.FileManageService;
5 10
import com.ai.bss.monitorManage.service.interfaces.KafkaProcess;
11
import com.ai.bss.monitorManage.utils.DateUtils;
12
import com.ai.bss.monitorManage.utils.FileUtils;
6 13
import com.ai.bss.monitorManage.utils.KafkaProducerConfig;
14
import com.ai.bss.monitorManage.utils.SecurityProtectionMinioConfig;
15
import com.alibaba.fastjson.JSONArray;
7 16
import com.alibaba.fastjson.JSONObject;
8 17
import lombok.extern.slf4j.Slf4j;
18
import org.apache.logging.log4j.util.Strings;
19
import org.springframework.beans.factory.annotation.Autowired;
9 20
import org.springframework.beans.factory.annotation.Value;
10 21
import org.springframework.kafka.core.KafkaTemplate;
11 22
import org.springframework.scheduling.annotation.Async;
12 23
import org.springframework.stereotype.Service;
24
import org.springframework.web.multipart.MultipartFile;
25
import org.springframework.web.multipart.commons.CommonsMultipartFile;
13 26
14
import java.util.HashMap;
15
import java.util.List;
16
import java.util.Map;
27
import java.io.File;
28
import java.util.*;
17 29
18 30
19 31
@Slf4j
@ -29,6 +41,26 @@ public class KafkaProcessImpl implements KafkaProcess {
29 41
    @Value("${kafka.producer.servers}")
30 42
    private static String servers;
31 43
44
45
    @Value("${camera.filePath}")
46
    private String baseFilePath;
47
48
    @Value("${kafka.topic.aitask}")
49
    private String topicAiTask;
50
51
    @Value("${kafka.topic.aivideo}")
52
    private String topicAiVideo;
53
54
    @Autowired
55
    private EbcAiService ebcAiService;
56
57
    @Autowired
58
    private SecurityProtectionMinioConfig minioConfig;
59
60
61
    @Autowired
62
    private FileManageService fileManageService;
63
32 64
    @Async
33 65
    @Override
34 66
    public void processKafka(String topic,List<String> msgList){
@ -53,6 +85,126 @@ public class KafkaProcessImpl implements KafkaProcess {
53 85
    }
54 86
55 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
//		new Timer().schedule(new TimerTask() {
144
//			@SneakyThrows
145
//			@Override
146
//			public void run() {
147
        Map<String,List> videoFileMap = FileUtils.videoFileMap;
148
//        List<String> keyList = mapTransitionList(videoFileMap);
149
        String deviceCode = "";
150
        String fileType = "";
151
//				String filePath = "";
152
        String fileName = "";
153
        String dateTime = "";
154
        String[] keyArr;
155
        MultipartFile multipartFile = null;
156
        Map<String, String> minioFileMap = null;
157
        AiIdenLogDto aiIdenLogDto = null;
158
        List<String> fileList = null;
159
        Iterator<String> iterator = null;
160
        MonitorVideoLogDto monitorVideoLogDto = null;
161
        String time = "";
162
        String bucketName =  "";
163
        String aiResponseData = "";
164
//        for(String key:keyList){
165
            keyArr = fileKey.split("~!@");
166
            deviceCode = keyArr[0];
167
            fileType = keyArr[1];
168
169
//            fileList = videoFileMap.get(key);
170
            iterator = fileList.iterator();
171
172
//            while (iterator.hasNext()) {
173
//                filePath = iterator.next();
174
                aiIdenLogDto = new AiIdenLogDto();
175
                monitorVideoLogDto = new MonitorVideoLogDto();
176
                fileName = filePath.substring(filePath.lastIndexOf(MonitorManageConsts.getSystemSeparator())+1,filePath.length());
177
                if(fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
178
                    bucketName = minioConfig.getBucketAiVideo();
179
                    time = fileName.substring(5,19);
180
                    dateTime = DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIMEHHMM_PATTERN),DateUtils.NORM_DATETIME_HHMM_PATTERN);
181
                    monitorVideoLogDto.setBeginTime(dateTime + ":00");
182
                    monitorVideoLogDto.setEndTime(dateTime + ":59");
183
184
                }
185
                //文件上传到 minio文件服务器
186
                multipartFile = new CommonsMultipartFile(FileUtils.createFileItem(new File(filePath),fileName));
187
188
                log.info("保存文件");
189
                minioFileMap = fileManageService.uploadFile(multipartFile,bucketName,deviceCode,null);
190
191
                if(fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
192
                    monitorVideoLogDto.setTopic(topicAiVideo);//视频历史记录TOPIC
193
                    monitorVideoLogDto.setVideoUrl(minioFileMap.get("fileId"));
194
                    monitorVideoLogDto.setResourceToolCode(deviceCode);
195
                    processKafka(monitorVideoLogDto.getTopic(), JSONObject.toJSONString(monitorVideoLogDto));
196
                }
197
//                iterator.remove();//使用迭代器的删除方法删除
198
//            }
199
200
//        }
201
        log.info("-------等待任务--------");
202
//			}
203
//		}, 60000, 60000);
204
    }
205
206
207
56 208
    private Map<String, KafkaTemplate> kafkaTemplateMap = new HashMap<>();
57 209
58 210
@ -75,4 +227,93 @@ public class KafkaProcessImpl implements KafkaProcess {
75 227
76 228
        return true;
77 229
    }
230
231
232
    /**
233
     * AI头盔检查
234
     * @param aiIdenLogDto
235
     * @return
236
     */
237
    private AiIdenLogDto aiHelmetDetect(AiIdenLogDto aiIdenLogDto,String aifilePath){
238
        try {
239
            log.info("开始AI处理...");
240
            //安全帽识别
241
            String aiResponseData = ebcAiService.helmetDetect(ImageBase64Converter.convertFileToBase64(aifilePath), Strings.EMPTY, Strings.EMPTY);
242
//			String aiResponseData = ebcAiService.helmetDetect(ImageBase64Converter.convertInputStreamToBase64(multipartFile.getInputStream()), Strings.EMPTY, Strings.EMPTY);
243
            JSONObject jsonObject = JSONObject.parseObject(aiResponseData);// JSONUtil.formatJsonStr(aiResponseData);
244
            System.out.println("AI 识别结果: "+jsonObject);
245
            IdenResultDto idenResultDto = null;
246
            List<IdenResultDto> idenResultDtoList = null;
247
            if(jsonObject.getString("Status").equals("Ok")){
248
                idenResultDtoList = new ArrayList<>();
249
                JSONArray jsonoArray = JSONArray.parseArray(jsonObject.getString("Result"));
250
                if(jsonoArray.size()>0){
251
                    for(int i=0;i<jsonoArray.size();i++){
252
                        JSONObject resultObj = JSONObject.parseObject(jsonoArray.get(i).toString());
253
                        String aiClassName = resultObj.getString("class");
254
                        //										safety_hat表示安全帽;ordinart_hat表示普通帽子;chef_hat表示厨师帽;none表示未戴帽子
255
                        if(aiClassName.equals("none")){
256
                            idenResultDto =new IdenResultDto();
257
                            idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
258
                            idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_WEA);
259
                            idenResultDto.setAlarmMemo("未戴帽子");
260
                            aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
261
                            idenResultDtoList.add(idenResultDto);
262
                            aiIdenLogDto.setIdenResult(idenResultDtoList);
263
                            aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
264
                        }else{
265
                            //						if(aiClassName.equals("safety_hat")){
266
                            idenResultDto =new IdenResultDto();
267
                            idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
268
                            idenResultDto.setAlarmType(aiClassName);
269
                            idenResultDto.setAlarmMemo(aiClassName);
270
                            idenResultDtoList.add(idenResultDto);
271
                            aiIdenLogDto.setIdenResult(idenResultDtoList);
272
                            aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT);
273
                            aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
274
                        }
275
                    }
276
                    log.info("识别成功,推送KAFKA消息");
277
                    processKafka(aiIdenLogDto.getTopic(), JSONObject.toJSONString(aiIdenLogDto));
278
                }else{
279
                    log.info("没有识别到人,不推送KAFKA消息");
280
                }
281
            }
282
            //AI模型
283
//			aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
284
        }catch (Exception e){
285
            log.error("AI处理异常");
286
        }
287
        return aiIdenLogDto;
288
    }
289
290
    /**
291
     * AI人体识别
292
     * @param aifilePath
293
     * @return
294
     */
295
    private boolean aiworkHumanDetect(String aifilePath){
296
        boolean isHuman = false;
297
        try {
298
            //安全帽识别
299
            String aiResponseData = ebcAiService.workClothesDetect(ImageBase64Converter.convertFileToBase64(aifilePath),  true,true,0.9f);
300
301
            JSONObject jsonObject = JSONObject.parseObject(aiResponseData);// JSONUtil.formatJsonStr(aiResponseData);
302
            if(jsonObject.getString("Status").equals("Ok")){
303
                JSONArray jsonoArray = JSONArray.parseArray(jsonObject.getString("Result"));
304
                for(int i=0;i<jsonoArray.size();i++){
305
                    JSONObject resultObj = JSONObject.parseObject(jsonoArray.get(i).toString());
306
                    String aiClassName = resultObj.getString("lable");
307
//										safety_hat表示安全帽;ordinart_hat表示普通帽子;chef_hat表示厨师帽;none表示未戴帽子
308
                    if(aiClassName.equals("person")){
309
                        isHuman = true;
310
                    }
311
                }
312
            }
313
        }catch (Exception e){
314
            log.error("AI处理异常");
315
        }
316
        return isHuman;
317
    }
318
78 319
}

+ 30 - 6
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/service/impl/ListeningFileDirectoryServiceImpl.java

@ -3,6 +3,7 @@ package com.ai.bss.monitorManage.service.impl;
3 3
4 4
import com.ai.bss.monitorManage.constant.MonitorManageConsts;
5 5
import com.ai.bss.monitorManage.service.interfaces.FileManageService;
6
import com.ai.bss.monitorManage.service.interfaces.KafkaProcess;
6 7
import com.ai.bss.monitorManage.service.interfaces.ListeningFileDirectoryService;
7 8
import com.ai.bss.monitorManage.utils.FileUtils;
8 9
import com.mzlion.core.lang.StringUtils;
@ -27,9 +28,13 @@ public class ListeningFileDirectoryServiceImpl  implements ListeningFileDirector
27 28
    private String baseFilePath;
28 29
29 30
31
30 32
    @Autowired
31 33
    private FileManageService fileManageService;
32 34
35
    @Autowired
36
    private KafkaProcess kafkaProcess;
37
33 38
    @Override
34 39
    public void getFile(String filePath)  {
35 40
//        if(){
@ -59,13 +64,32 @@ public class ListeningFileDirectoryServiceImpl  implements ListeningFileDirector
59 64
//                                mapKey = filePath.replace(baseFilePath+ MonitorManageConsts.getSystemSeparator(),"");
60 65
                                mapKey = filePath.replace(baseFilePath+ MonitorManageConsts.getSystemSeparator(),"");
61 66
                                mapKey = mapKey.replace(MonitorManageConsts.getSystemSeparator(),"~!@");
62
                                if(FileUtils.fileMap.get(mapKey)==null){
63
                                    fileList = new ArrayList();
64
                                    fileList.add(fileName);
65
                                    FileUtils.fileMap.put(mapKey,fileList);
66
                                }else {
67
                                    FileUtils.fileMap.get(mapKey).add(fileName);
67
68
                                String[] mapKeyArr = mapKey.split("~!@");
69
                                if(mapKeyArr[1].equals(MonitorManageConsts.FILE_TYPE_IMG)){
70
                                    if(FileUtils.imgFileMap.get(mapKey)==null){
71
                                        fileList = new ArrayList();
72
                                        fileList.add(fileName);
73
                                        FileUtils.imgFileMap.put(mapKey,fileList);
74
                                    }else {
75
                                        FileUtils.imgFileMap.get(mapKey).add(fileName);
76
                                    }
77
78
                                    kafkaProcess.processImageFile(mapKey,fileName);
68 79
                                }
80
                                if(mapKeyArr[1].equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
81
                                    if(FileUtils.videoFileMap.get(mapKey)==null){
82
                                        fileList = new ArrayList();
83
                                        fileList.add(fileName);
84
                                        FileUtils.videoFileMap.put(mapKey,fileList);
85
                                    }else {
86
                                        FileUtils.videoFileMap.get(mapKey).add(fileName);
87
                                    }
88
                                    kafkaProcess.processVideoFile(mapKey,fileName);
89
                                }
90
91
92
69 93
//                                Path filePath = (Path) event.context();
70 94
////                                //输出新增文件名
71 95
//

+ 136 - 81
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/service/impl/MonitorManageServiceImpl.java

@ -75,9 +75,11 @@ public class MonitorManageServiceImpl implements MonitorManageService {
75 75
		//监听文件目录,加载文件
76 76
		loadFileList();
77 77
		//等到10秒
78
		Thread.sleep(10000);
79
		//保存文件并发送kafka
80
		saveFile();
78
//		Thread.sleep(10000);
79
//		//保存图片文件并发送kafka
80
//		saveImageFile();
81
//		//保存视频文件并发送kafka
82
//		saveVideoFile();
81 83
82 84
	}
83 85
@ -106,13 +108,13 @@ public class MonitorManageServiceImpl implements MonitorManageService {
106 108
		}
107 109
	}
108 110
109
	private void saveFile(){
111
	private void saveImageFile(){
110 112
		new Timer().schedule(new TimerTask() {
111 113
			@SneakyThrows
112 114
			@Override
113 115
			public void run() {
114
				Map<String,List> fileMap = FileUtils.fileMap;
115
				List<String> keyList = mapTransitionList(fileMap);
116
				Map<String,List> imgFileMap = FileUtils.imgFileMap;
117
				List<String> keyList = mapTransitionList(imgFileMap);
116 118
				String deviceCode = "";
117 119
				String fileType = "";
118 120
				String filePath = "";
@ -123,7 +125,7 @@ public class MonitorManageServiceImpl implements MonitorManageService {
123 125
				Map<String, String> minioFileMap = null;
124 126
				AiIdenLogDto aiIdenLogDto = null;
125 127
				List<String> fileList = null;
126
				Iterator<String> iterator = null;
128
				Iterator<String> imgiterator = null;
127 129
				MonitorVideoLogDto monitorVideoLogDto = null;
128 130
				String time = "";
129 131
				String bucketName =  "";
@ -133,22 +135,22 @@ public class MonitorManageServiceImpl implements MonitorManageService {
133 135
					deviceCode = keyArr[0];
134 136
					fileType = keyArr[1];
135 137
136
					fileList = fileMap.get(key);
137
					iterator = fileList.iterator();
138
					fileList = imgFileMap.get(key);
139
					imgiterator = fileList.iterator();
138 140
139
					while (iterator.hasNext()) {
140
						filePath = iterator.next();
141
					while (imgiterator.hasNext()) {
142
						filePath = imgiterator.next();
141 143
						aiIdenLogDto = new AiIdenLogDto();
142 144
						monitorVideoLogDto = new MonitorVideoLogDto();
143 145
						fileName = filePath.substring(filePath.lastIndexOf(MonitorManageConsts.getSystemSeparator())+1,filePath.length());
144
						if(fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
145
							bucketName = minioConfig.getBucketAiVideo();
146
							time = fileName.substring(5,19);
147
							dateTime = DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIMEHHMM_PATTERN),DateUtils.NORM_DATETIME_HHMM_PATTERN);
148
							monitorVideoLogDto.setBeginTime(dateTime + ":00");
149
							monitorVideoLogDto.setEndTime(dateTime + ":59");
150
151
						}else{
146
						if(fileType.equals(MonitorManageConsts.FILE_TYPE_IMG)){
147
//							bucketName = minioConfig.getBucketAiVideo();
148
//							time = fileName.substring(5,19);
149
//							dateTime = DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIMEHHMM_PATTERN),DateUtils.NORM_DATETIME_HHMM_PATTERN);
150
//							monitorVideoLogDto.setBeginTime(dateTime + ":00");
151
//							monitorVideoLogDto.setEndTime(dateTime + ":59");
152
//
153
//						}else{
152 154
							bucketName = minioConfig.getBucketAiImage();
153 155
							time = fileName.substring(3,17);
154 156
							dateTime = DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIMEHHMM_PATTERN),DateUtils.NORM_DATETIME_PATTERN);
@ -156,16 +158,18 @@ public class MonitorManageServiceImpl implements MonitorManageService {
156 158
							aiIdenLogDto.setIdenPictureSnapDate(dateTime);
157 159
						}
158 160
						//文件上传到 minio文件服务器
159
						multipartFile = new CommonsMultipartFile(createFileItem(new File(filePath),fileName));
161
						multipartFile = new CommonsMultipartFile(FileUtils.createFileItem(new File(filePath),fileName));
160 162
163
						log.info("保存图片文件");
161 164
						minioFileMap = fileManageService.uploadFile(multipartFile,bucketName,deviceCode,null);
162 165
163
						if(fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
164
							monitorVideoLogDto.setTopic(topicAiVideo);//视频历史记录TOPIC
165
							monitorVideoLogDto.setVideoUrl(minioFileMap.get("fileId"));
166
							monitorVideoLogDto.setResourceToolCode(deviceCode);
167
							kafkaProcess.processKafka(monitorVideoLogDto.getTopic(), JSONObject.toJSONString(monitorVideoLogDto));
168
						}else{
166
167
						if(fileType.equals(MonitorManageConsts.FILE_TYPE_IMG)){
168
//							monitorVideoLogDto.setTopic(topicAiVideo);//视频历史记录TOPIC
169
//							monitorVideoLogDto.setVideoUrl(minioFileMap.get("fileId"));
170
//							monitorVideoLogDto.setResourceToolCode(deviceCode);
171
//							kafkaProcess.processKafka(monitorVideoLogDto.getTopic(), JSONObject.toJSONString(monitorVideoLogDto));
172
//						}else{
169 173
							aiIdenLogDto.setIdenVideoUrl("");
170 174
							aiIdenLogDto.setIdenPictureUrl(minioFileMap.get("fileId"));
171 175
							aiIdenLogDto.setResourceToolCode(deviceCode);
@ -178,16 +182,80 @@ public class MonitorManageServiceImpl implements MonitorManageService {
178 182
							if(isHuman){
179 183
								aiIdenLogDto = aiHelmetDetect(aiIdenLogDto,filePath);
180 184
181
								kafkaProcess.processKafka(aiIdenLogDto.getTopic(), JSONObject.toJSONString(aiIdenLogDto));
185
//								kafkaProcess.processKafka(aiIdenLogDto.getTopic(), JSONObject.toJSONString(aiIdenLogDto));
182 186
							}
183 187
						}
188
						imgiterator.remove();//使用迭代器的删除方法删除
189
					}
190
191
				}
192
				log.info("-------等待任务--------");
193
			}
194
		}, 0, 5000);
195
	}
196
197
	private void saveVideoFile(){
198
		new Timer().schedule(new TimerTask() {
199
			@SneakyThrows
200
			@Override
201
			public void run() {
202
				Map<String,List> videoFileMap = FileUtils.videoFileMap;
203
				List<String> keyList = mapTransitionList(videoFileMap);
204
				String deviceCode = "";
205
				String fileType = "";
206
				String filePath = "";
207
				String fileName = "";
208
				String dateTime = "";
209
				String[] keyArr;
210
				MultipartFile multipartFile = null;
211
				Map<String, String> minioFileMap = null;
212
				AiIdenLogDto aiIdenLogDto = null;
213
				List<String> fileList = null;
214
				Iterator<String> iterator = null;
215
				MonitorVideoLogDto monitorVideoLogDto = null;
216
				String time = "";
217
				String bucketName =  "";
218
				String aiResponseData = "";
219
				for(String key:keyList){
220
					keyArr = key.split("~!@");
221
					deviceCode = keyArr[0];
222
					fileType = keyArr[1];
223
224
					fileList = videoFileMap.get(key);
225
					iterator = fileList.iterator();
226
227
					while (iterator.hasNext()) {
228
						filePath = iterator.next();
229
						aiIdenLogDto = new AiIdenLogDto();
230
						monitorVideoLogDto = new MonitorVideoLogDto();
231
						fileName = filePath.substring(filePath.lastIndexOf(MonitorManageConsts.getSystemSeparator())+1,filePath.length());
232
						if(fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
233
							bucketName = minioConfig.getBucketAiVideo();
234
							time = fileName.substring(5,19);
235
							dateTime = DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIMEHHMM_PATTERN),DateUtils.NORM_DATETIME_HHMM_PATTERN);
236
							monitorVideoLogDto.setBeginTime(dateTime + ":00");
237
							monitorVideoLogDto.setEndTime(dateTime + ":59");
238
239
						}
240
						//文件上传到 minio文件服务器
241
						multipartFile = new CommonsMultipartFile(FileUtils.createFileItem(new File(filePath),fileName));
242
243
						log.info("保存文件");
244
						minioFileMap = fileManageService.uploadFile(multipartFile,bucketName,deviceCode,null);
245
246
						if(fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
247
							monitorVideoLogDto.setTopic(topicAiVideo);//视频历史记录TOPIC
248
							monitorVideoLogDto.setVideoUrl(minioFileMap.get("fileId"));
249
							monitorVideoLogDto.setResourceToolCode(deviceCode);
250
							kafkaProcess.processKafka(monitorVideoLogDto.getTopic(), JSONObject.toJSONString(monitorVideoLogDto));
251
						}
184 252
						iterator.remove();//使用迭代器的删除方法删除
185 253
					}
186 254
187 255
				}
188 256
				log.info("-------等待任务--------");
189 257
			}
190
		}, 10000, 10000);
258
		}, 60000, 60000);
191 259
	}
192 260
193 261
	/**
@ -197,51 +265,59 @@ public class MonitorManageServiceImpl implements MonitorManageService {
197 265
	 */
198 266
	private AiIdenLogDto aiHelmetDetect(AiIdenLogDto aiIdenLogDto,String aifilePath){
199 267
		try {
268
			log.info("开始AI处理...");
200 269
			//安全帽识别
201 270
			String aiResponseData = ebcAiService.helmetDetect(ImageBase64Converter.convertFileToBase64(aifilePath), Strings.EMPTY, Strings.EMPTY);
202 271
//			String aiResponseData = ebcAiService.helmetDetect(ImageBase64Converter.convertInputStreamToBase64(multipartFile.getInputStream()), Strings.EMPTY, Strings.EMPTY);
203 272
			JSONObject jsonObject = JSONObject.parseObject(aiResponseData);// JSONUtil.formatJsonStr(aiResponseData);
273
			System.out.println("AI 识别结果: "+jsonObject);
204 274
			IdenResultDto idenResultDto = null;
205 275
			List<IdenResultDto> idenResultDtoList = null;
206 276
			if(jsonObject.getString("Status").equals("Ok")){
207 277
				idenResultDtoList = new ArrayList<>();
208 278
				JSONArray jsonoArray = JSONArray.parseArray(jsonObject.getString("Result"));
209
				for(int i=0;i<jsonoArray.size();i++){
210
					JSONObject resultObj = JSONObject.parseObject(jsonoArray.get(i).toString());
211
					String aiClassName = resultObj.getString("class");
212
//										safety_hat表示安全帽;ordinart_hat表示普通帽子;chef_hat表示厨师帽;none表示未戴帽子
213
					if(aiClassName.equals("none")){
214
						idenResultDto =new IdenResultDto();
215
						idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
216
						idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_WEA);
217
						idenResultDto.setAlarmMemo("未戴帽子");
218
						aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
219
						idenResultDtoList.add(idenResultDto);
220
						aiIdenLogDto.setIdenResult(idenResultDtoList);
221
						aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
222
					}else{
223
						if(aiClassName.equals("safety_hat")){
224
							idenResultDto =new IdenResultDto();
225
							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
226
							idenResultDto.setAlarmType("safety_hat");
227
							idenResultDto.setAlarmMemo("安全帽");
228
						}else if(aiClassName.equals("ordinart_hat")){
279
				if(jsonoArray.size()>0){
280
					for(int i=0;i<jsonoArray.size();i++){
281
						JSONObject resultObj = JSONObject.parseObject(jsonoArray.get(i).toString());
282
						String aiClassName = resultObj.getString("class");
283
	//										safety_hat表示安全帽;ordinart_hat表示普通帽子;chef_hat表示厨师帽;none表示未戴帽子
284
						if(aiClassName.equals("none")){
229 285
							idenResultDto =new IdenResultDto();
230 286
							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
231
							idenResultDto.setAlarmType("ordinart_hat");
232
							idenResultDto.setAlarmType("普通帽子");
233
						}else if(aiClassName.equals("chef_hat")){
234
							idenResultDto =new IdenResultDto();
235
							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
236
							idenResultDto.setAlarmType("chef_hat");
237
							idenResultDto.setAlarmType("厨师帽");
287
							idenResultDto.setAlarmType(MonitorManageConsts.AI_ALARM_TYPE_WEA);
288
							idenResultDto.setAlarmMemo("未戴帽子");
289
							aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT_ALARM);
290
							idenResultDtoList.add(idenResultDto);
291
							aiIdenLogDto.setIdenResult(idenResultDtoList);
292
							aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
293
						}else{
294
	//						if(aiClassName.equals("safety_hat")){
295
								idenResultDto =new IdenResultDto();
296
								idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
297
								idenResultDto.setAlarmType(aiClassName);
298
								idenResultDto.setAlarmMemo(aiClassName);
299
	//						}else if(aiClassName.equals("ordinart_hat")){
300
	//							idenResultDto =new IdenResultDto();
301
	//							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
302
	//							idenResultDto.setAlarmType("ordinart_hat");
303
	//							idenResultDto.setAlarmType("普通帽子");
304
	//						}else if(aiClassName.equals("chef_hat")){
305
	//							idenResultDto =new IdenResultDto();
306
	//							idenResultDto.setAlarmEmployeeRoleId(MonitorManageConsts.alarmEmployeeRoleId);
307
	//							idenResultDto.setAlarmType("chef_hat");
308
	//							idenResultDto.setAlarmType("厨师帽");
309
	//						}
310
311
							idenResultDtoList.add(idenResultDto);
312
							aiIdenLogDto.setIdenResult(idenResultDtoList);
313
							aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT);
314
							aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
238 315
						}
239
240
						idenResultDtoList.add(idenResultDto);
241
						aiIdenLogDto.setIdenResult(idenResultDtoList);
242
						aiIdenLogDto.setIdenResultType(MonitorManageConsts.AI_IDENTIFY_RESULT);
243
						aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_CLOTHING_CODE);
244 316
					}
317
					log.info("识别成功,推送KAFKA消息");
318
					kafkaProcess.processKafka(aiIdenLogDto.getTopic(), JSONObject.toJSONString(aiIdenLogDto));
319
				}else{
320
					log.info("没有识别到人,不推送KAFKA消息");
245 321
				}
246 322
			}
247 323
			//AI模型
@ -291,26 +367,5 @@ public class MonitorManageServiceImpl implements MonitorManageService {
291 367
		return list;
292 368
	}
293 369
294
	/*
295
   创建FileItem
296
    */
297
	private FileItem createFileItem(File file, String fieldName) {
298
		FileItemFactory factory = new DiskFileItemFactory(16, null);
299
		FileItem item = factory.createItem(fieldName, "text/plain", true, file.getName());
300
		int bytesRead = 0;
301
		byte[] buffer = new byte[8192];
302
		try {
303
			FileInputStream fis = new FileInputStream(file);
304
			OutputStream os = item.getOutputStream();
305
			while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
306
				os.write(buffer, 0, bytesRead);
307
			}
308
			os.close();
309
			fis.close();
310
		} catch (IOException e) {
311
			e.printStackTrace();
312
		}
313
		return item;
314
	}
315 370
316 371
}

+ 4 - 0
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/service/interfaces/KafkaProcess.java

@ -9,4 +9,8 @@ public interface KafkaProcess {
9 9
    void processKafka(String topic,List<String> msgList);
10 10
11 11
    void processKafka(String topic,String msgStr);
12
13
    void  processImageFile(String fileKey,String filePath) throws Exception;
14
15
    void processVideoFile(String fileKey,String filePath) throws Exception;
12 16
}

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

@ -2,6 +2,9 @@ package com.ai.bss.monitorManage.utils;
2 2
3 3
import cn.hutool.core.io.FileUtil;
4 4
import com.ai.ipu.basic.string.Base64;
5
import org.apache.commons.fileupload.FileItem;
6
import org.apache.commons.fileupload.FileItemFactory;
7
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
5 8
6 9
import java.io.*;
7 10
import java.nio.charset.Charset;
@ -14,6 +17,8 @@ public class FileUtils {
14 17
15 18
    public static List<String> deviceIds = new ArrayList<>();
16 19
    public static Map<String,List> fileMap = new HashMap();
20
    public static Map<String,List> imgFileMap = new HashMap();
21
    public static Map<String,List> videoFileMap = new HashMap();
17 22
18 23
    public static List<File> loadFile(String filePath){
19 24
//        File[] file = FileUtil.ls("G:/sts/spring-tool-suite-4-4.2.2/sts-4.2.2.RELEASE");
@ -555,4 +560,27 @@ public class FileUtils {
555 560
    }
556 561
557 562
563
    /*
564
   创建FileItem
565
    */
566
    public static FileItem createFileItem(File file, String fieldName) {
567
        FileItemFactory factory = new DiskFileItemFactory(16, null);
568
        FileItem item = factory.createItem(fieldName, "text/plain", true, file.getName());
569
        int bytesRead = 0;
570
        byte[] buffer = new byte[8192];
571
        try {
572
            FileInputStream fis = new FileInputStream(file);
573
            OutputStream os = item.getOutputStream();
574
            while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
575
                os.write(buffer, 0, bytesRead);
576
            }
577
            os.close();
578
            fis.close();
579
        } catch (IOException e) {
580
            e.printStackTrace();
581
        }
582
        return item;
583
    }
584
585
558 586
}