Quellcode durchsuchen

增加监控设备采集数据kafka推送

wangdong6 vor 4 Jahren
Ursprung
Commit
edbe881418

+ 6 - 0
monitor-manage-service/pom.xml

@ -56,6 +56,12 @@
56 56
            <version>2.1.5-SNAPSHOT</version>
57 57
        </dependency>
58 58
59
        <dependency>
60
            <groupId>com.ai.bss</groupId>
61
            <artifactId>components-ai</artifactId>
62
            <version>2.1.5-SNAPSHOT</version>
63
        </dependency>
64
59 65
        <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
60 66
        <dependency>
61 67
            <groupId>commons-fileupload</groupId>

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

@ -1,100 +0,0 @@
1
//package com.ai.bss.monitorManage.constant;
2
//
3
///**
4
// * 公共常量类
5
// *
6
// * @author chencai
7
// */
8
//public class CommonConsts {
9
//    /**
10
//     * 接口调用返回的成功编码
11
//     */
12
//    public static final String RESULT_CODE_SUCCESSFUL = "0";
13
//
14
//    /**
15
//     * 接口调用返回的失败编码
16
//     */
17
//    public static final String RESULT_CODE_FAILED = "1";
18
//
19
//    /**
20
//     * 接口调用返回的成功描述信息
21
//     */
22
//    public static final String RESULT_MSG_SUCCESSFUL = "成功";
23
//
24
//    /**
25
//     * 接口调用返回的失败的描述信息
26
//     */
27
//    public static final String RESULT_MSG_FAILED = "失败";
28
//
29
//    /**
30
//     * CSV文件列分隔符
31
//     */
32
//    public static final String CSV_COLUMN_SEPARATOR = ",";
33
//    public static final String CSV_COLUMN_SEPARATOR2 = "|";
34
//
35
//
36
//    /**
37
//     * CSV文件列分隔符
38
//     */
39
//    public static final String CSV_RN = "\r\n";
40
//
41
//    /**
42
//     * 最小误差
43
//     */
44
//    public static final double EPSILON = 0.00000000000000022204;
45
//
46
//    /**
47
//     * 时间格式转化 yyyyMMdd_HHmmss
48
//     */
49
//    public static final String DATE_FORMAT_YYYYMMDD_HHMMSS = "yyyyMMdd_HHmmss";
50
//
51
//    /**
52
//     * 时间格式转化 yyyyMM
53
//     */
54
//    public static final String DATE_FORMAT_YYYYMM = "yyyyMM";
55
//
56
//    /**
57
//     * 时间格式转化 yyyyMMdd
58
//     */
59
//    public static final String DATE_FORMAT_YYYYMMDD = "yyyyMMdd";
60
//
61
//    /**
62
//     *
63
//     */
64
//    public static final String RESULT_MSG_CREATE_CSV_FAILED = "生成csv文件失败";
65
//
66
//    /**
67
//     * uspa组织类型-基础平台
68
//     */
69
//    public static final String USPA_ORG_TYPE_PLATFORM_ORG = "PLATFORM_ORG";
70
//
71
//    /**
72
//     * uspa组织类型-行业云
73
//     */
74
//    public static final String USPA_ORG_TYPE_INDUSTRY_ORG = "INDUSTRY_ORG";
75
//
76
//    /**
77
//     * uspa组织类型-客户
78
//     */
79
//    public static final String USPA_ORG_TYPE_CUSTOMER_ORG = "CUSTOMER_ORG";
80
//
81
//
82
//
83
//    public static final String CHARSET_UTF8 = "UTF-8";
84
//
85
//
86
//    public static final String HTTP_CONTENT_TYPE_JSON = "application/json; charset=utf-8";
87
//
88
//    private CommonConsts() {}
89
//
90
//
91
////
92
////    /** 
93
////     * callsTimesMap存放方法被调用的次数O 
94
////     */
95
////    public  static ThreadLocal<Map<String, Long >> callsTimesMap = new ThreadLocal<Map<String, Long>>();// new ThreadLocal<>();
96
////    /** 
97
////     * methodTotalTmieMap存放方法总耗时 
98
////     */
99
////    public  static ThreadLocal<Map<String, Long >> methodTotalTmieMap = new ThreadLocal<Map<String, Long>>();
100
//}

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

@ -0,0 +1,27 @@
1
package com.ai.bss.monitorManage.constant;
2
3
/**
4
 * 公共常量类
5
 *
6
 * @author chencai
7
 */
8
public class MonitorManageConsts {
9
    public static String FILE_TYPE_VIDEO = "videos";
10
    public static String FILE_TYPE_IMG = "images";
11
12
    public static String IdenResultType = "";
13
14
//    aiIdenModel   AI匹配模型
15
    //人脸识别
16
    public static String AI_MODEL_IDENTIFY_FACE =  "IDENTIFY_FACE" ;
17
    //多人体识别
18
    public static String AI_MODEL_IDENTIFY_MULTIPLE_HUMAN  = "IDENTIFY_MULTIPLE_HUMAN" ;
19
    //工作服识别
20
    public static String AI_MODEL_IDENTIFY_DRESS = "IDENTIFY_DRESS";
21
    //安全帽识别
22
    public static String AI_MODEL_IDENTIFY_HELMET = "IDENTIFY_HELMET";
23
    //吸烟识别
24
    public static String AI_MODEL_IDENTIFY_SMOKING = "IDENTIFY_SMOKING";
25
    // 仪表识别
26
    public static String AI_MODEL_IDENTIFY_INSTRUMENT = "IDENTIFY_INSTRUMENT";
27
}

+ 46 - 0
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/model/MonitorVideoLogDto.java

@ -0,0 +1,46 @@
1
package com.ai.bss.monitorManage.model;
2
3
import lombok.Data;
4
import lombok.Getter;
5
import lombok.NoArgsConstructor;
6
import lombok.Setter;
7
import org.hibernate.annotations.Where;
8
9
import javax.persistence.*;
10
import java.io.Serializable;
11
import java.util.Date;
12
13
@Data
14
public  class MonitorVideoLogDto implements Serializable {
15
	private static final long serialVersionUID = -1L;
16
17
18
 	/**
19
	* 设备视频文件记录标识
20
	*/
21
	private Long monitorVideoLogId;
22
 	/**
23
	* 工作工具标识
24
	*/
25
	private String resourceToolId;
26
27
	private String resourceToolCode;
28
 	/**
29
	* 视频地址(资源标识)(冗余)
30
	*/
31
	private String videoUrl;
32
 	/**
33
	* 视频采集开始时间
34
	*/
35
	private String beginTime;
36
 	/**
37
	* 视频采集结束时间
38
	*/
39
	private String endTime;
40
	private String topic;
41
42
/*
43
INSERT INTO se_monitor_video_log SET _MONITOR_VIDEO_LOG_ID='', RESOURCE_TOOL_ID='', VIDEO_URL='', BEGIN_TIME='', END_TIME='';
44
*/
45
46
}

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

@ -1,6 +1,7 @@
1 1
package com.ai.bss.monitorManage.service.impl;
2 2
3 3
import com.ai.bss.monitorManage.model.AiIdenLog;
4
import com.ai.bss.monitorManage.model.AiIdenLogDto;
4 5
import com.ai.bss.monitorManage.service.interfaces.KafkaProcess;
5 6
import com.ai.bss.monitorManage.utils.KafkaProducerConfig;
6 7
import com.alibaba.fastjson.JSONObject;
@ -25,29 +26,37 @@ public class KafkaProcessImpl implements KafkaProcess {
25 26
//    private static String kafkaServers = "47.105.160.21:9090";
26 27
    private static String kafkaServers = "10.19.90.34:9090";
27 28
28
29 29
    @Value("${kafka.producer.servers}")
30 30
    private static String servers;
31 31
32
33 32
    @Async
34 33
    @Override
35
    public void processKafka(List<AiIdenLog> aiIdenLogList){
34
    public void processKafka(String topic,List<String> msgList){
36 35
//        List<DataPoint> dataPointList =  parseDataPoint(mockScenarioDataList,topic0,topic1);
37 36
        try {
38
            for (AiIdenLog dataPoint : aiIdenLogList) {
39
                sendKafkaDataPoint(dataPoint);
37
            for (String msg : msgList) {
38
                sendKafkaDataPoint(topic,msg);
40 39
            }
41 40
        }catch (Exception e){
42 41
            e.printStackTrace();
43 42
        }
44 43
    }
45 44
45
    @Async
46
    @Override
47
    public void processKafka(String topic,String msg){
48
        try {
49
            sendKafkaDataPoint(topic,msg);
50
        }catch (Exception e){
51
            e.printStackTrace();
52
        }
53
    }
54
46 55
47 56
    private Map<String, KafkaTemplate> kafkaTemplateMap = new HashMap<>();
48 57
49 58
50
    private boolean sendKafkaDataPoint(AiIdenLog aiIdenLog){
59
    private boolean sendKafkaDataPoint(String topic,String msgStr){
51 60
        KafkaTemplate kafkaTemplate = kafkaTemplateMap.get(kafkaServers);
52 61
        if(kafkaTemplate == null){
53 62
            //new 实例
@ -57,7 +66,8 @@ public class KafkaProcessImpl implements KafkaProcess {
57 66
        }
58 67
59 68
        try {
60
            Object result = kafkaTemplate.send(aiIdenLog.getTopic(), JSONObject.toJSONString(aiIdenLog)).get();
69
            Object result = kafkaTemplate.send(topic, msgStr).get();
70
            System.out.println("发送kafka消息:topic="+topic + "msg: "+msgStr);
61 71
        } catch (Exception e) {
62 72
            log.error(e.getMessage());
63 73
            return false;

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

@ -1,16 +1,26 @@
1 1
package com.ai.bss.monitorManage.service.impl;
2 2
3
import cn.hutool.json.JSONUtil;
4
import com.ai.bss.components.common.util.ImageBase64Converter;
5
import com.ai.bss.components.ebcai.service.EbcAiService;
6
import com.ai.bss.monitorManage.constant.MonitorManageConsts;
3 7
import com.ai.bss.monitorManage.model.AiIdenLogDto;
8
import com.ai.bss.monitorManage.model.MonitorVideoLogDto;
4 9
import com.ai.bss.monitorManage.service.interfaces.FileManageService;
10
import com.ai.bss.monitorManage.service.interfaces.KafkaProcess;
5 11
import com.ai.bss.monitorManage.service.interfaces.ListeningFileDirectoryService;
6 12
import com.ai.bss.monitorManage.service.interfaces.MonitorManageService;
7 13
import com.ai.bss.monitorManage.utils.DateUtils;
8 14
import com.ai.bss.monitorManage.utils.FileUtils;
15
import com.ai.bss.monitorManage.utils.SecurityProtectionMinioConfig;
16
import com.alibaba.fastjson.JSON;
17
import com.alibaba.fastjson.JSONObject;
9 18
import lombok.SneakyThrows;
10 19
import lombok.extern.slf4j.Slf4j;
11 20
import org.apache.commons.fileupload.FileItem;
12 21
import org.apache.commons.fileupload.FileItemFactory;
13 22
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
23
import org.apache.logging.log4j.util.Strings;
14 24
import org.springframework.beans.factory.annotation.Autowired;
15 25
import org.springframework.beans.factory.annotation.Value;
16 26
import org.springframework.stereotype.Service;
@ -28,7 +38,7 @@ import java.util.*;
28 38
public class MonitorManageServiceImpl implements MonitorManageService {
29 39
30 40
	private final static String SPLIT_CHAR = "_";
31
	private static String bucketName =  "";
41
//	private static String bucketName =  "";
32 42
33 43
	@Autowired
34 44
	private FileManageService fileManageService;
@ -36,18 +46,34 @@ public class MonitorManageServiceImpl implements MonitorManageService {
36 46
	@Autowired
37 47
	private ListeningFileDirectoryService listeningFileDirectoryService;
38 48
49
	@Autowired
50
	private KafkaProcess kafkaProcess;
51
52
	@Autowired
53
	private EbcAiService ebcAiService;
54
39 55
	@Value("${camera.filePath}")
40 56
	private String filePath;
41 57
58
	@Value("${kafka.topic.aitask}")
59
	private String topicAiTask;
60
61
	@Value("${kafka.topic.aivideo}")
62
	private String topicAiVideo;
63
64
	@Autowired
65
	private SecurityProtectionMinioConfig minioConfig;
66
67
68
42 69
	@Override
43 70
	public void loadPictureFromDirectory() throws InterruptedException {
44 71
72
		//监听文件目录,加载文件
45 73
		loadFileList();
46
74
		//等到10秒
47 75
		Thread.sleep(10000);
48
49
//		listeningFileDirectoryService.getFile(filePath);
50
//		fileList.forEach( tmp -> {System.out.println(tmp.getName()+ ":" + tmp.isDirectory());});
76
		//保存文件并发送kafka
51 77
		saveFile();
52 78
53 79
	}
@ -64,7 +90,7 @@ public class MonitorManageServiceImpl implements MonitorManageService {
64 90
			}
65 91
66 92
			File[] devicefiles =file1.listFiles();
67
			System.out.println("deviceName()   " + file1.getName());
93
//			System.out.println("deviceName()   " + file1.getName());
68 94
			//图片、视频目录
69 95
			for(File deviceFile:devicefiles){
70 96
				if(!deviceFile.isDirectory()) {
@ -78,7 +104,6 @@ public class MonitorManageServiceImpl implements MonitorManageService {
78 104
	}
79 105
80 106
	private void saveFile(){
81
//		Timer timer = new Timer();
82 107
		new Timer().schedule(new TimerTask() {
83 108
			@SneakyThrows
84 109
			@Override
@ -89,79 +114,74 @@ public class MonitorManageServiceImpl implements MonitorManageService {
89 114
				String fileType = "";
90 115
				String filePath = "";
91 116
				String fileName = "";
117
				String dateTime = "";
118
				String[] keyArr;
92 119
				MultipartFile multipartFile = null;
93 120
				Map<String, String> minioFileMap = null;
94 121
				AiIdenLogDto aiIdenLogDto = null;
122
				List<String> fileList = null;
123
				Iterator<String> iterator = null;
124
				MonitorVideoLogDto monitorVideoLogDto = null;
125
				String time = "";
126
				String bucketName =  "";
127
				String aiResponseData = "";
95 128
				for(String key:keyList){
96
					System.out.println("key== " + key);
97
					String[] keyArr = key.split("~!@");
129
					keyArr = key.split("~!@");
98 130
					deviceCode = keyArr[0];
99 131
					fileType = keyArr[1];
100
					System.out.println("keyArr[0]: "+ deviceCode +"  keyArr[1]: "+ fileType);
101
102 132
103
					List<String> fileList = fileMap.get(key);
104
					Iterator<String> iterator = fileList.iterator();
133
					fileList = fileMap.get(key);
134
					iterator = fileList.iterator();
105 135
106 136
					while (iterator.hasNext()) {
107 137
						filePath = iterator.next();
108 138
						aiIdenLogDto = new AiIdenLogDto();
139
						monitorVideoLogDto = new MonitorVideoLogDto();
109 140
						fileName = filePath.substring(filePath.lastIndexOf("\\")+1,filePath.length());
110
						System.out.println("fileName=== " + fileName);
111
						String time = "";
112
						if(fileType.equals("videos")){
113
							bucketName = "ai-video";
141
						if(fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
142
							bucketName = minioConfig.getBucketAiVideo();
114 143
							time = fileName.substring(5,19);
115
							aiIdenLogDto.setTaskExecuteTime(DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIMEHHMM_PATTERN),DateUtils.NORM_DATETIME_PATTERN));
116
							aiIdenLogDto.setTopic("topic_ai_video");//视频历史记录TOPIC
144
							dateTime = DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIMEHHMM_PATTERN),DateUtils.NORM_DATETIME_HHMM_PATTERN);
145
							monitorVideoLogDto.setBeginTime(dateTime + ":00");
146
							monitorVideoLogDto.setEndTime(dateTime + ":59");
147
117 148
						}else{
118
							bucketName = "ai-image";
119
							time = fileName.substring(3,19);
120
							aiIdenLogDto.setTaskExecuteTime(DateUtils.formatDate(DateUtils.convertDate(fileName.substring(3,17),DateUtils.PURE_DATETIME_PATTERN),DateUtils.NORM_DATETIME_PATTERN));
121
							aiIdenLogDto.setTopic("topic_ai_task");//AI识别TOPIC
149
							bucketName = minioConfig.getBucketAiImage();
150
							time = fileName.substring(3,17);
151
							dateTime = DateUtils.formatDate(DateUtils.convertDate(time,DateUtils.PURE_DATETIMEHHMM_PATTERN),DateUtils.NORM_DATETIME_PATTERN);
152
							aiIdenLogDto.setTaskExecuteTime(dateTime);
122 153
						}
123
//						String minioFileName = bucketName + SPLIT_CHAR + deviceCode +"-"+ fileName;
124
//						multipartFile = new File(filePath);
125
154
						//文件上传到 minio文件服务器
126 155
						multipartFile = new CommonsMultipartFile(createFileItem(new File(filePath),fileName));
127
						minioFileMap = fileManageService.uploadFile(multipartFile,bucketName,deviceCode,null);
128
						System.out.println("fileId=== " + minioFileMap.get("fileId"));
129
						System.out.println("fileUrl=== " + minioFileMap.get("fileUrl"));
130 156
157
						minioFileMap = fileManageService.uploadFile(multipartFile,bucketName,deviceCode,null);
131 158
132
						aiIdenLogDto.setResourceToolCode(deviceCode);
133
						if(fileType.equals("videos")){
134
							aiIdenLogDto.setIdenVideoUrl(minioFileMap.get("fileId"));
159
						if(fileType.equals(MonitorManageConsts.FILE_TYPE_VIDEO)){
160
							monitorVideoLogDto.setTopic(topicAiVideo);//视频历史记录TOPIC
161
							monitorVideoLogDto.setVideoUrl(minioFileMap.get("fileId"));
162
							monitorVideoLogDto.setResourceToolCode(deviceCode);
163
							kafkaProcess.processKafka(monitorVideoLogDto.getTopic(), JSONObject.toJSONString(monitorVideoLogDto));
135 164
						}else{
165
							aiIdenLogDto.setIdenVideoUrl("");
136 166
							aiIdenLogDto.setIdenPictureUrl(minioFileMap.get("fileId"));
167
							aiIdenLogDto.setResourceToolCode(deviceCode);
168
							//安全帽识别
169
							aiIdenLogDto.setTopic(topicAiTask);//AI识别TOPIC
170
171
							aiResponseData = ebcAiService.helmetDetect(ImageBase64Converter.convertFileToBase64(filePath), Strings.EMPTY,Strings.EMPTY);
172
							System.out.println(JSONUtil.formatJsonStr(aiResponseData));
173
							log.info(JSONUtil.formatJsonStr(aiResponseData));
174
//							ebcAiService.helmetDetect()
175
							//AI模型
176
							aiIdenLogDto.setAiIdenModel(MonitorManageConsts.AI_MODEL_IDENTIFY_HELMET);
177
							aiIdenLogDto.setIdenResult(JSONUtil.formatJsonStr(aiResponseData));
178
							aiIdenLogDto.setIdenResultType("");
179
							kafkaProcess.processKafka(aiIdenLogDto.getTopic(), JSONObject.toJSONString(aiIdenLogDto));
137 180
						}
138 181
139
//						aiIdenLogDto.setTaskExecuteTime();
140
141
142 182
						iterator.remove();//使用迭代器的删除方法删除
143
144 183
					}
145 184
146
//					for(String filePath:fileList){
147
//						System.out.println("key: "+key+"  filePath: "+filePath);
148
//
149
//						String fileName = filePath.substring(filePath.lastIndexOf("\\"),filePath.length());
150
//						if(keyArr[1].equals("videos")){
151
//							bucketName = "ai-video";
152
//						}else{
153
//							bucketName = "ai-image";
154
//						}
155
//						String minioFileName = bucketName + SPLIT_CHAR + keyArr[0] +"-"+ fileName;
156
//
157
//						File multipartFile = new File(filePath);
158
//
159
//						MultipartFile mfile = new CommonsMultipartFile(createFileItem(multipartFile,minioFileName));
160
//						Map<String, String> minioFileMap = fileManageService.uploadFile(mfile,null);
161
//						System.out.println("pictureUrl=== " + minioFileMap.get("pictureUrl"));
162
//						fileList.remove(filePath);
163
//					}
164
165 185
				}
166 186
				System.out.println("-------设定要指定任务--------");
167 187
			}
@ -174,7 +194,6 @@ public class MonitorManageServiceImpl implements MonitorManageService {
174 194
		while (iter.hasNext()) {
175 195
			Map.Entry entry = (Map.Entry) iter.next();
176 196
			list.add(entry.getKey());
177
//			list.add(entry.getValue());
178 197
		}
179 198
		return list;
180 199
	}

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

@ -1,12 +1,12 @@
1 1
package com.ai.bss.monitorManage.service.interfaces;
2 2
3
import com.ai.bss.monitorManage.model.AiIdenLog;
4
5 3
import java.util.List;
6 4
7 5
public interface KafkaProcess {
8 6
//    void processMock(Long sId, List<AiIdenLog> mockScenarioDataList, Long frequency);
9 7
10 8
11
    void processKafka(List<AiIdenLog> aiIdenLogList);
9
    void processKafka(String topic,List<String> msgList);
10
11
    void processKafka(String topic,String msgStr);
12 12
}

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

@ -16,6 +16,7 @@ import java.util.Date;
16 16
public class DateUtils {
17 17
18 18
	public static final String NORM_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
19
	public static final String NORM_DATETIME_HHMM_PATTERN = "yyyy-MM-dd HH:mm";
19 20
	public static final String NORM_DATETIME_MS_PATTERN = "yyyy-MM-dd HH:mm:ss.SSS";
20 21
	public static final String NORM_YYYY_MM_PATTERN = "yyyy-MM";
21 22
	public static final String NORM_DATE_PATTERN = "yyyy-MM-dd";

+ 2 - 2
monitor-manage-service/src/main/java/com/ai/bss/monitorManage/utils/SecurityProtectionMinioConfig.java

@ -16,8 +16,8 @@ import org.springframework.stereotype.Component;
16 16
@ConfigurationProperties(prefix = "myminio")
17 17
public class SecurityProtectionMinioConfig {
18 18
19
	private String bucketWorkToolImage;
19
	private String bucketAiImage;
20 20
21
	private String bucketWorkToolView;
21
	private String bucketAiVideo;
22 22
23 23
}

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

@ -57,8 +57,8 @@ minio.faceAddServiceUrl=http://10.21.10.28:9018/api/face/add
57 57
minio.face-del-service-url=http://10.21.10.28:9018/api/face/del
58 58
minio.face-recog-service-url=http://10.21.10.28:9018/api/face/recog
59 59
60
myminio.bucketWorkToolImage=tool-image
61
myminio.bucketWorkToolView=tool-view
60
myminio.bucketAiImage=ai-image
61
myminio.bucketAiVideo=ai-video
62 62
63 63
# CACHE
64 64
#spring.cache.type=ehcache
@ -70,3 +70,19 @@ logging.level.org.springframework.data=debug
70 70
71 71
72 72
camera.filePath=E:\\data\\DAHUA
73
74
#AIÖ´Ðнá¹û
75
kafka.topic.aitask=topicTaskTest
76
#kafka.topic.aitask=topic_ai_task
77
#AIÊÓÆµ
78
kafka.topic.aivideo=topicVideoTest
79
#kafka.topic.aivideo=topic_ai_video
80
81
82
83
84
ebc.ai.head-det-url=http://10.1.251.211:7001/todo/api/v1.4/control/online/IMAGE/HEAD/PREDICT
85
ebc.ai.helmet-det-url=http://10.1.251.211:7003/todo/api/v1.4/control/online/IMAGE/HELMET/PREDICT
86
ebc.ai.smokingdet-url=http://10.1.251.213:5125/smokingdet
87
ebc.ai.instrument-det-url=http://10.1.251.213:19100/predict
88
ebc.ai.work-clothes-det-url=http://10.1.251.211:7003/todo/api/v1.4/control/online/IMAGE/HUMAN/PREDICT