diff --git a/open-anpr-core/src/main/java/com/visual/open/anpr/core/extract/PlateExtractorImpl.java b/open-anpr-core/src/main/java/com/visual/open/anpr/core/extract/PlateExtractorImpl.java index 8c5259e..1ddd1a0 100644 --- a/open-anpr-core/src/main/java/com/visual/open/anpr/core/extract/PlateExtractorImpl.java +++ b/open-anpr-core/src/main/java/com/visual/open/anpr/core/extract/PlateExtractorImpl.java @@ -1,11 +1,11 @@ package com.visual.open.anpr.core.extract; +import com.visual.open.anpr.core.base.PlateDetection; +import com.visual.open.anpr.core.base.PlateRecognition; import com.visual.open.anpr.core.domain.ExtParam; import com.visual.open.anpr.core.domain.ImageMat; import com.visual.open.anpr.core.domain.PlateImage; import com.visual.open.anpr.core.domain.PlateInfo; -import com.visual.open.anpr.core.models.TorchPlateDetection; -import com.visual.open.anpr.core.models.TorchPlateRecognition; import com.visual.open.anpr.core.utils.CropUtil; import org.opencv.core.Mat; @@ -16,17 +16,17 @@ import java.util.Map; public class PlateExtractorImpl implements PlateExtractor { - private TorchPlateDetection torchPlateDetection; - private TorchPlateRecognition torchPlateRecognition; + private PlateDetection plateDetection; + private PlateRecognition plateRecognition; - public PlateExtractorImpl(TorchPlateDetection torchPlateDetection, TorchPlateRecognition torchPlateRecognition) { - this.torchPlateDetection = torchPlateDetection; - this.torchPlateRecognition = torchPlateRecognition; + public PlateExtractorImpl(PlateDetection plateDetection, PlateRecognition plateRecognition) { + this.plateDetection = plateDetection; + this.plateRecognition = plateRecognition; } @Override public PlateImage extract(ImageMat image, ExtParam extParam, Map params) { - List plateInfos = torchPlateDetection.inference(image, extParam.getScoreTh(),extParam.getIouTh(), new HashMap<>()); + List plateInfos = plateDetection.inference(image, extParam.getScoreTh(),extParam.getIouTh(), new HashMap<>()); //取人脸topK int topK = (extParam.getTopK() > 0) ? extParam.getTopK() : 5; if(plateInfos.size() > topK){ @@ -35,7 +35,7 @@ public class PlateExtractorImpl implements PlateExtractor { //解析车牌信息 for(PlateInfo plateInfo : plateInfos){ Mat crop = CropUtil.crop(image.toCvMat(), plateInfo.box); - plateInfo.parseInfo = torchPlateRecognition.inference(ImageMat.fromCVMat(crop), plateInfo.single, new HashMap<>()); + plateInfo.parseInfo = plateRecognition.inference(ImageMat.fromCVMat(crop), plateInfo.single, new HashMap<>()); } //清洗数据 Iterator iterator = plateInfos.iterator(); diff --git a/open-anpr-server/pom.xml b/open-anpr-server/pom.xml index cb3f2e8..ce1e8f1 100644 --- a/open-anpr-server/pom.xml +++ b/open-anpr-server/pom.xml @@ -12,4 +12,63 @@ open-anpr-server + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-validation + + + org.hibernate.validator + hibernate-validator + + + + + + org.hibernate.validator + hibernate-validator + + + + com.visual.open.anpr + open-anpr-core + + + + + org.apache.commons + commons-lang3 + + + org.apache.commons + commons-collections4 + + + + + io.springfox + springfox-boot-starter + + + com.github.xiaoymin + knife4j-spring-boot-starter + + + + + open-anpr-server + + + org.springframework.boot + spring-boot-maven-plugin + 2.6.0 + + + + \ No newline at end of file diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/OpenAnprApplication.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/OpenAnprApplication.java new file mode 100755 index 0000000..f355f68 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/OpenAnprApplication.java @@ -0,0 +1,15 @@ +package com.visual.open.anpr.server.bootstrap; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.scheduling.annotation.EnableScheduling; + +@SpringBootApplication +public class OpenAnprApplication { + + public static void main(String[] args) { + SpringApplication.run(OpenAnprApplication.class, args); + } + +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/Knife4jConfig.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/Knife4jConfig.java new file mode 100644 index 0000000..e8ccb3b --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/Knife4jConfig.java @@ -0,0 +1,39 @@ +package com.visual.open.anpr.server.bootstrap.conf; + +import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.oas.annotations.EnableOpenApi; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; + +@Configuration +@EnableOpenApi +@EnableKnife4j +public class Knife4jConfig { + + @Value("${visual.swagger.enable:true}") + private Boolean enable; + + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.OAS_30) + .enable(enable) + .apiInfo(new ApiInfoBuilder() + .title("车牌识别服务API") + .description("车牌识别服务API") + .version("1.0.0") + .build()) + .groupName("1.0.0") + .select() + .apis(RequestHandlerSelectors.basePackage("com.visual.open.anpr.server.controller.server")) + .paths(PathSelectors.any()) + .build(); + } +} + + diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/ModelConfig.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/ModelConfig.java new file mode 100755 index 0000000..f72c048 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/ModelConfig.java @@ -0,0 +1,96 @@ +package com.visual.open.anpr.server.bootstrap.conf; + +import com.visual.open.anpr.core.base.PlateDetection; +import com.visual.open.anpr.core.base.PlateRecognition; +import com.visual.open.anpr.core.extract.PlateExtractor; +import com.visual.open.anpr.core.extract.PlateExtractorImpl; +import com.visual.open.anpr.core.models.TorchPlateDetection; +import com.visual.open.anpr.core.models.TorchPlateRecognition; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration("visualModelConfig") +public class ModelConfig { + + @Value("${spring.profiles.active}") + private String profile; + + @Value("${visual.model.plateDetection.name:TorchPlateDetection}") + private String plateDetectionName; + @Value("${visual.model.plateDetection.modelPath}") + private String[] plateDetectionModel; + @Value("${visual.model.plateDetection.thread:4}") + private Integer plateDetectionThread; + + @Value("${visual.model.plateRecognition.name:TorchPlateRecognition}") + private String plateRecognitionName; + @Value("${visual.model.plateRecognition.modelPath}") + private String[] plateRecognitionNameModel; + @Value("${visual.model.plateRecognition.thread:4}") + private Integer plateRecognitionNameThread; + + /** + * 获取车牌检查模型 + * @return + */ + @Bean(name = "visualPlateDetection") + public PlateDetection getPlateDetection(){ + if(plateDetectionName.equalsIgnoreCase("TorchPlateDetection")){ + return new TorchPlateDetection(getModelPath(plateDetectionName, plateDetectionModel)[0], plateDetectionThread); + }else{ + return new TorchPlateDetection(getModelPath(plateDetectionName, plateDetectionModel)[0], plateDetectionThread); + } + } + + /** + * 人脸特征提取服务 + * @return + */ + @Bean(name = "visualPlateRecognition") + public PlateRecognition getPlateRecognition(){ + if(plateRecognitionName.equalsIgnoreCase("TorchPlateRecognition")){ + return new TorchPlateRecognition(getModelPath(plateRecognitionName, plateRecognitionNameModel)[0], plateRecognitionNameThread); + }else{ + return new TorchPlateRecognition(getModelPath(plateRecognitionName, plateRecognitionNameModel)[0], plateRecognitionNameThread); + } + } + + + /** + * 构建特征提取器 + * @param plateDetection 车牌检测模型 + * @param plateRecognition 车牌识别模型 + */ + @Bean(name = "visualPlateExtractor") + public PlateExtractor getPlateExtractor( + @Qualifier("visualPlateDetection")PlateDetection plateDetection, + @Qualifier("visualPlateRecognition")PlateRecognition plateRecognition + ){ + return new PlateExtractorImpl(plateDetection, plateRecognition); + } + + /** + * 获取模型路径 + * @param modelName 模型名称 + * @return + */ + private String[] getModelPath(String modelName, String modelPath[]){ + + String basePath = "open-anpr-core/src/main/resources/"; + if("docker".equalsIgnoreCase(profile)){ + basePath = "/app/open-anpr/"; + } + + if((null == modelPath || modelPath.length != 1) && "TorchPlateDetection".equalsIgnoreCase(modelName)){ + return new String[]{basePath + "models/plate_detect.onnx"}; + } + + if((null == modelPath || modelPath.length != 1) && "TorchPlateRecognition".equalsIgnoreCase(modelName)){ + return new String[]{basePath + "models/plate_rec_color.onnx"}; + } + + return modelPath; + } +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/ServerConfig.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/ServerConfig.java new file mode 100755 index 0000000..329514d --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/bootstrap/conf/ServerConfig.java @@ -0,0 +1,28 @@ +package com.visual.open.anpr.server.bootstrap.conf; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration("visualServerConfig") +public class ServerConfig { + + @Configuration + @ComponentScan("com.visual.open.anpr.server.utils") + public static class SearchUtils {} + + @Configuration + @ComponentScan("com.visual.open.anpr.server.config") + public static class SearchConfig {} + + @Configuration + @ComponentScan({"com.visual.open.anpr.server.service"}) + public static class ServiceConfig {} + + @Configuration + @ComponentScan({"com.visual.open.anpr.server.controller"}) + public static class ControllerConfig {} + + @Configuration + @ComponentScan({"com.visual.open.anpr.server.scheduler"}) + public static class SchedulerConfig {} +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/base/BaseController.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/base/BaseController.java new file mode 100755 index 0000000..9f856af --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/base/BaseController.java @@ -0,0 +1,10 @@ +package com.visual.open.anpr.server.controller.base; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public abstract class BaseController { + + public Logger logger = LoggerFactory.getLogger(getClass()); + +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/base/GlobalExceptionHandler.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/base/GlobalExceptionHandler.java new file mode 100755 index 0000000..267ed29 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/base/GlobalExceptionHandler.java @@ -0,0 +1,17 @@ +package com.visual.open.anpr.server.controller.base; + +import com.visual.open.anpr.server.domain.common.ResponseInfo; +import com.visual.open.anpr.server.utils.ResponseBuilder; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseInfo handleValidationExceptions(MethodArgumentNotValidException ex) { + return ResponseBuilder.error(ex.getBindingResult().getFieldError().getDefaultMessage()); + } + +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/health/HealthController.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/health/HealthController.java new file mode 100755 index 0000000..441cf0d --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/health/HealthController.java @@ -0,0 +1,25 @@ +package com.visual.open.anpr.server.controller.health; + +import com.visual.open.anpr.server.domain.common.ResponseInfo; +import com.visual.open.anpr.server.utils.ResponseBuilder; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + + +@Api(tags="02、公共服务-健康检测") +@RestController("healthController") +@RequestMapping("/common/health") +public class HealthController { + + @ApiOperation(value="公共-服务健康检测") + @ResponseBody + @RequestMapping(value = "/check", method = RequestMethod.GET) + public ResponseInfo check(){ + return ResponseBuilder.success("health check is ok"); + } + +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/package-info.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/package-info.java new file mode 100644 index 0000000..a422ed7 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/package-info.java @@ -0,0 +1 @@ +package com.visual.open.anpr.server.controller; \ No newline at end of file diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/common/BaseEntity.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/common/BaseEntity.java new file mode 100755 index 0000000..914ede0 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/common/BaseEntity.java @@ -0,0 +1,48 @@ +package com.visual.open.anpr.server.domain.common; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * Entity基类 + * + * @author diven + */ +public class BaseEntity implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 创建时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 更新时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + + public Date getCreateTime() + { + return createTime; + } + + public void setCreateTime(Date createTime) + { + this.createTime = createTime; + } + + + public Date getUpdateTime() + { + return updateTime; + } + + public void setUpdateTime(Date updateTime) + { + this.updateTime = updateTime; + } + + +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/common/ResponseInfo.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/common/ResponseInfo.java new file mode 100755 index 0000000..189e824 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/common/ResponseInfo.java @@ -0,0 +1,54 @@ +package com.visual.open.anpr.server.domain.common; + +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; + +/** + * des:接口返回对象 + * @author diven + * @date 上午9:34 2018/7/12 + */ +public class ResponseInfo implements Serializable{ + + private static final long serialVersionUID = -6919611972884058300L; + + @ApiModelProperty(value="返回代码",name="code",required = true, position = 0) + private Integer code; + @ApiModelProperty(value="返回信息",name="message",required = false, position = 1) + private String message; + @ApiModelProperty(value="数据信息",name="data",required = false, position = 2) + private T data; + + public ResponseInfo(){} + + public ResponseInfo(Integer code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public Integer getCode() { + return code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/package-info.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/package-info.java new file mode 100644 index 0000000..aff918a --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/package-info.java @@ -0,0 +1 @@ +package com.visual.open.anpr.server.domain; \ No newline at end of file diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/package-info.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/package-info.java new file mode 100644 index 0000000..91890ab --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/package-info.java @@ -0,0 +1 @@ +package com.visual.open.anpr.server; \ No newline at end of file diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/utils/ResponseBuilder.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/utils/ResponseBuilder.java new file mode 100755 index 0000000..8f6eb14 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/utils/ResponseBuilder.java @@ -0,0 +1,61 @@ +package com.visual.open.anpr.server.utils; + + +import com.visual.open.anpr.server.domain.common.ResponseInfo; + +public class ResponseBuilder { + + public static final Integer COMMON_SUCCESS_CODE = 0; + public static final String COMMON_SUCCESS_INFO = "success"; + + public static final Integer COMMON_EXCEPTION_CODE = 1; + public static final String COMMON_EXCEPTION_INFO = "exception"; + + public static final Integer COMMON_ERROR_CODE = 2; + public static final String COMMON_ERROR_INFO = "error"; + + public static ResponseInfo success(){ + return new ResponseInfo<>(COMMON_SUCCESS_CODE,COMMON_SUCCESS_INFO, null); + } + + public static ResponseInfo success(T data){ + return new ResponseInfo<>(COMMON_SUCCESS_CODE,COMMON_SUCCESS_INFO, data); + } + + public static ResponseInfo error(){ + return new ResponseInfo<>(COMMON_ERROR_CODE,COMMON_ERROR_INFO, null); + } + + public static ResponseInfo error(String errorInfo){ + return new ResponseInfo<>(COMMON_ERROR_CODE,errorInfo, null); + } + + public static ResponseInfo error(T data){ + return new ResponseInfo<>(COMMON_ERROR_CODE,COMMON_ERROR_INFO, data); + } + + public static ResponseInfo error(T data, String errorInfo){ + return new ResponseInfo<>(COMMON_ERROR_CODE,errorInfo, data); + } + + public static ResponseInfo exception(){ + return new ResponseInfo<>(COMMON_EXCEPTION_CODE, COMMON_EXCEPTION_INFO, null); + } + + public static ResponseInfo exception(T data){ + return new ResponseInfo<>(COMMON_EXCEPTION_CODE, COMMON_EXCEPTION_INFO, data); + } + + public static ResponseInfo exception(Exception e){ + return new ResponseInfo<>(COMMON_EXCEPTION_CODE, e.getMessage(), null); + } + + public static ResponseInfo exception(Exception e, T data){ + return new ResponseInfo<>(COMMON_EXCEPTION_CODE, e.getMessage(), data); + } + + public static ResponseInfo exception(String info, T data){ + return new ResponseInfo<>(COMMON_EXCEPTION_CODE, info, data); + } + +} diff --git a/open-anpr-server/src/main/resources/application-dev.yml b/open-anpr-server/src/main/resources/application-dev.yml new file mode 100755 index 0000000..96fbed2 --- /dev/null +++ b/open-anpr-server/src/main/resources/application-dev.yml @@ -0,0 +1,47 @@ +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为80 + port: 8080 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # tomcat最大线程数,默认为200 + max-threads: 10 + # Tomcat启动初始化的线程数,默认值25 + min-spare-threads: 5 + +# 日志配置 +logging: + level: + com.visual.open.anpr: info + org.springframework: warn + +# 模型配置 +visual: + model: + plateDetection: + name: TorchPlateDetection + modelPath: + thread: 1 + plateRecognition: + name: TorchPlateRecognition + modelPath: + thread: 1 + swagger: + enable: true + +# Spring配置 +spring: + jackson: + time-zone: GMT+8 + date-format: yyyy-MM-dd HH:mm:ss + # 文件上传 + servlet: + multipart: + # 单个文件大小 + max-file-size: 10MB + # 设置总上传的文件大小 + max-request-size: 20MB \ No newline at end of file diff --git a/open-anpr-server/src/main/resources/application-docker.yml b/open-anpr-server/src/main/resources/application-docker.yml new file mode 100755 index 0000000..6ff08e0 --- /dev/null +++ b/open-anpr-server/src/main/resources/application-docker.yml @@ -0,0 +1,47 @@ +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为80 + port: 8080 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # tomcat最大线程数,默认为200 + max-threads: 80 + # Tomcat启动初始化的线程数,默认值25 + min-spare-threads: 30 + +# 日志配置 +logging: + level: + com.visual.face.search: info + org.springframework: warn + +# 模型配置 +visual: + model: + plateDetection: + name: ${VISUAL_MODEL_PLATE_DETECTION_NAME:TorchPlateDetection} + modelPath: ${VISUAL_MODEL_PLATE_DETECTION_PATH:} + thread: ${VISUAL_MODEL_PLATE_DETECTION_THREAD:4} + plateRecognition: + name: ${VISUAL_MODEL_PLATE_RECOGNITION_NAME:TorchPlateRecognition} + modelPath: ${VISUAL_MODEL_PLATE_RECOGNITION_PATH:} + thread: ${VISUAL_MODEL_PLATE_RECOGNITION_THREAD:4} + swagger: + enable: ${VISUAL_SWAGGER_ENABLE:true} + +# Spring配置 +spring: + jackson: + time-zone: GMT+8 + date-format: yyyy-MM-dd HH:mm:ss + # 文件上传 + servlet: + multipart: + # 单个文件大小 + max-file-size: 10MB + # 设置总上传的文件大小 + max-request-size: 20MB \ No newline at end of file diff --git a/open-anpr-server/src/main/resources/application-local.yml b/open-anpr-server/src/main/resources/application-local.yml new file mode 100755 index 0000000..4c5a222 --- /dev/null +++ b/open-anpr-server/src/main/resources/application-local.yml @@ -0,0 +1,47 @@ +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为80 + port: 8080 + servlet: + # 应用的访问路径 + context-path: / + tomcat: + # tomcat的URI编码 + uri-encoding: UTF-8 + # tomcat最大线程数,默认为200 + max-threads: 10 + # Tomcat启动初始化的线程数,默认值25 + min-spare-threads: 5 + +# 日志配置 +logging: + level: + com.visual.open.anpr: info + org.springframework: warn + +# 模型配置 +visual: + model: + plateDetection: + name: TorchPlateDetection + modelPath: + thread: 1 + plateRecognition: + name: TorchPlateRecognition + modelPath: + thread: 1 + swagger: + enable: true + +# Spring配置 +spring: + jackson: + time-zone: GMT+8 + date-format: yyyy-MM-dd HH:mm:ss + # 文件上传 + servlet: + multipart: + # 单个文件大小 + max-file-size: 10MB + # 设置总上传的文件大小 + max-request-size: 20MB \ No newline at end of file diff --git a/open-anpr-server/src/main/resources/application.yml b/open-anpr-server/src/main/resources/application.yml new file mode 100755 index 0000000..6c39244 --- /dev/null +++ b/open-anpr-server/src/main/resources/application.yml @@ -0,0 +1,8 @@ +spring: + application: + name: open-anpr + mvc: + pathmatch: + matching-strategy: ant_path_matcher + profiles: + active: local diff --git a/open-anpr-server/src/main/resources/logback-spring.xml b/open-anpr-server/src/main/resources/logback-spring.xml new file mode 100755 index 0000000..a6753ad --- /dev/null +++ b/open-anpr-server/src/main/resources/logback-spring.xml @@ -0,0 +1,72 @@ + + + + + + + %d{yyyy-MM-dd HH:mm:ss} [%level] - %m%n + + + + + + ./logs/open-anpr-info.log + + + %d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n + + + + + + ./logs/open-anpr-info.%d{yyyy-MM-dd}.log + + 7 + + + + + + ./logs/open-anpr-error.log + + + %d{yyyy-MM-dd HH:mm:ss} [%class:%line] - %m%n + + + + + ERROR + + ACCEPT + + DENY + + + + + ./logs/open-anpr-error.%d{yyyy-MM-dd}.log + + 7 + + + + + + + + + + + + + + + + + + ${CONSOLE_LOG_PATTERN} + utf8 + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index f30d197..0b8f3f6 100644 --- a/pom.xml +++ b/pom.xml @@ -24,10 +24,10 @@ 4.6.0-0 1.13.1 - 1.2.58 - 6.0.13.Final + 1.2.67_noneautotype2 + 6.0.21.Final 3.6.1 - 4.1 + 4.3 3.0.0 3.0.3 8