From 2b29ccafd9a2e0a34d4c7cdd97fcdba5bb340fa5 Mon Sep 17 00:00:00 2001 From: diven Date: Sun, 29 Jan 2023 10:42:28 +0800 Subject: [PATCH] init --- .../server/bootstrap/conf/Knife4jConfig.java | 2 +- .../controller/health/HealthController.java | 4 +- .../server/api/PlateControllerApi.java | 19 +++++++++ .../server/impl/PlateControllerImpl.java | 29 ++++++++++++++ .../controller/server/package-info.java | 1 + .../server/restful/PlateController.java | 26 +++++++++++++ .../server/domain/request/PlateInfoReqVo.java | 39 +++++++++++++++++++ .../domain/response/PlateInfoRepVo.java | 8 ++++ .../anpr/server/service/api/PlateService.java | 12 ++++++ .../server/service/impl/PlateServiceImpl.java | 30 ++++++++++++++ 10 files changed, 167 insertions(+), 3 deletions(-) create mode 100755 open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/api/PlateControllerApi.java create mode 100644 open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/impl/PlateControllerImpl.java create mode 100644 open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/package-info.java create mode 100644 open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/restful/PlateController.java create mode 100644 open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/request/PlateInfoReqVo.java create mode 100644 open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/response/PlateInfoRepVo.java 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 index e8ccb3b..b600cc6 100644 --- 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 @@ -30,7 +30,7 @@ public class Knife4jConfig { .build()) .groupName("1.0.0") .select() - .apis(RequestHandlerSelectors.basePackage("com.visual.open.anpr.server.controller.server")) + .apis(RequestHandlerSelectors.basePackage("com.visual.open.anpr.server.controller")) .paths(PathSelectors.any()) .build(); } 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 index 441cf0d..68ccdb5 100755 --- 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 @@ -10,12 +10,12 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; -@Api(tags="02、公共服务-健康检测") +@Api(tags="02、健康检测服务") @RestController("healthController") @RequestMapping("/common/health") public class HealthController { - @ApiOperation(value="公共-服务健康检测") + @ApiOperation(value="1、健康检测服务") @ResponseBody @RequestMapping(value = "/check", method = RequestMethod.GET) public ResponseInfo check(){ diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/api/PlateControllerApi.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/api/PlateControllerApi.java new file mode 100755 index 0000000..b9d82ff --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/api/PlateControllerApi.java @@ -0,0 +1,19 @@ +package com.visual.open.anpr.server.controller.server.api; + +import com.visual.open.anpr.server.domain.common.ResponseInfo; +import com.visual.open.anpr.server.domain.request.PlateInfoReqVo; +import com.visual.open.anpr.server.domain.response.PlateInfoRepVo; + +import java.util.List; + + +public interface PlateControllerApi { + + /** + * 识别车牌信息 + * @param plateInfoReq + * @return + */ + public ResponseInfo> recognition(PlateInfoReqVo plateInfoReq); + +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/impl/PlateControllerImpl.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/impl/PlateControllerImpl.java new file mode 100644 index 0000000..f7c0f35 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/impl/PlateControllerImpl.java @@ -0,0 +1,29 @@ +package com.visual.open.anpr.server.controller.server.impl; + +import com.visual.open.anpr.server.controller.base.BaseController; +import com.visual.open.anpr.server.controller.server.api.PlateControllerApi; +import com.visual.open.anpr.server.domain.common.ResponseInfo; +import com.visual.open.anpr.server.domain.request.PlateInfoReqVo; +import com.visual.open.anpr.server.domain.response.PlateInfoRepVo; +import com.visual.open.anpr.server.service.api.PlateService; +import com.visual.open.anpr.server.utils.ResponseBuilder; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +public class PlateControllerImpl extends BaseController implements PlateControllerApi { + + @Autowired + private PlateService plateService; + + @Override + public ResponseInfo> recognition(PlateInfoReqVo plateInfoReq) { + try { + return ResponseBuilder.success(plateService.recognition(plateInfoReq)); + }catch (Exception e){ + logger.error("plate recognition exception:", e); + return ResponseBuilder.exception(e.getMessage(), null); + } + } + +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/package-info.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/package-info.java new file mode 100644 index 0000000..4967fdd --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/package-info.java @@ -0,0 +1 @@ +package com.visual.open.anpr.server.controller.server; \ No newline at end of file diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/restful/PlateController.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/restful/PlateController.java new file mode 100644 index 0000000..e5c77e3 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/controller/server/restful/PlateController.java @@ -0,0 +1,26 @@ +package com.visual.open.anpr.server.controller.server.restful; + +import com.visual.open.anpr.server.controller.server.impl.PlateControllerImpl; +import com.visual.open.anpr.server.domain.common.ResponseInfo; +import com.visual.open.anpr.server.domain.request.PlateInfoReqVo; +import com.visual.open.anpr.server.domain.response.PlateInfoRepVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; + +@Api(tags="01、车牌识别服务") +@RestController("visualPlateController") +@RequestMapping("/visual/plate") +public class PlateController extends PlateControllerImpl { + + @ApiOperation(value="1、车牌识别", position = 1) + @Override + @ResponseBody + @RequestMapping(value = "/recognition", method = RequestMethod.POST) + public ResponseInfo> recognition(@RequestBody @Valid PlateInfoReqVo plateInfoReq) { + return super.recognition(plateInfoReq); + } +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/request/PlateInfoReqVo.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/request/PlateInfoReqVo.java new file mode 100644 index 0000000..0a9d1bc --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/request/PlateInfoReqVo.java @@ -0,0 +1,39 @@ +package com.visual.open.anpr.server.domain.request; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import org.hibernate.validator.constraints.Range; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@ApiModel(value = "PlateInfoReqVo", description="车牌识别参数") +public class PlateInfoReqVo implements Serializable { + + /**图像Base64编码值**/ + @NotNull(message = "image cannot be empty") + @ApiModelProperty(value="图像Base64编码值", position = 1,required = true) + private String image; + + /**搜索条数:默认5**/ + @Min(value = 0, message = "limit must greater than or equal to 0") + @ApiModelProperty(value="最大搜索条数:默认5", position = 3, required = false) + private Integer limit = 5; + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public Integer getLimit() { + return limit; + } + + public void setLimit(Integer limit) { + this.limit = limit; + } +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/response/PlateInfoRepVo.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/response/PlateInfoRepVo.java new file mode 100644 index 0000000..434cfec --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/response/PlateInfoRepVo.java @@ -0,0 +1,8 @@ +package com.visual.open.anpr.server.domain.response; + +import java.io.Serializable; + +public class PlateInfoRepVo implements Serializable { + + +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/service/api/PlateService.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/service/api/PlateService.java index ccc18ae..aca09fe 100644 --- a/open-anpr-server/src/main/java/com/visual/open/anpr/server/service/api/PlateService.java +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/service/api/PlateService.java @@ -1,5 +1,17 @@ package com.visual.open.anpr.server.service.api; +import com.visual.open.anpr.server.domain.request.PlateInfoReqVo; +import com.visual.open.anpr.server.domain.response.PlateInfoRepVo; + +import java.util.List; + public interface PlateService { + /** + * 识别车牌信息 + * @param plateInfoReq + * @return + */ + public List recognition(PlateInfoReqVo plateInfoReq); + } diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/service/impl/PlateServiceImpl.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/service/impl/PlateServiceImpl.java index 9aade08..5c549be 100644 --- a/open-anpr-server/src/main/java/com/visual/open/anpr/server/service/impl/PlateServiceImpl.java +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/service/impl/PlateServiceImpl.java @@ -1,9 +1,16 @@ package com.visual.open.anpr.server.service.impl; +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.extract.PlateExtractor; +import com.visual.open.anpr.server.domain.request.PlateInfoReqVo; +import com.visual.open.anpr.server.domain.response.PlateInfoRepVo; import com.visual.open.anpr.server.service.api.PlateService; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; @Service("plateServiceImpl") public class PlateServiceImpl implements PlateService { @@ -12,4 +19,27 @@ public class PlateServiceImpl implements PlateService { private PlateExtractor plateExtractor; + @Override + public List recognition(PlateInfoReqVo plateInfoReq) { + //模型检测车牌信息 + ImageMat imageMat = null; + PlateImage plateImage = null; + try { + int topK = (null == plateInfoReq.getLimit() || plateInfoReq.getLimit() <= 0) ? 5 : plateInfoReq.getLimit(); + ExtParam extParam = ExtParam.build().setTopK(topK); + imageMat = ImageMat.fromBase64(plateInfoReq.getImage()); + plateImage = plateExtractor.extract(imageMat, extParam, new HashMap<>()); + }finally { + if(null != imageMat){ + imageMat.release(); + } + } + if(null == plateImage){ + throw new RuntimeException("PlateExtractor extract error"); + } + //转换模型结果,并输出 + System.out.println(plateImage.PlateInfos().size()); + + return null; + } }