From 0b014488aff1808dfd342f179ffc2114a39873ee Mon Sep 17 00:00:00 2001 From: diven Date: Sun, 29 Jan 2023 11:14:10 +0800 Subject: [PATCH] init --- .../anpr/server/domain/extend/PlateColor.java | 31 ++++++++ .../server/domain/extend/PlateLayout.java | 8 +++ .../server/domain/extend/PlateLocation.java | 72 +++++++++++++++++++ .../server/domain/extend/RecognitionInfo.java | 41 +++++++++++ .../domain/response/PlateInfoRepVo.java | 38 ++++++++++ .../server/service/impl/PlateServiceImpl.java | 29 +++++++- 6 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateColor.java create mode 100644 open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateLayout.java create mode 100755 open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateLocation.java create mode 100644 open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/RecognitionInfo.java diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateColor.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateColor.java new file mode 100644 index 0000000..00407b7 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateColor.java @@ -0,0 +1,31 @@ +package com.visual.open.anpr.server.domain.extend; + +public enum PlateColor { + + BLACK("黑色"), + BLUE("蓝色"), + GREEN("绿色"), + WHITE("白色"), + YELLOW("黄色"), + UNKNOWN("未知"); + + private String name; + + PlateColor(String name){ + this.name = name; + } + + public String getName(){ + return this.name; + } + + public static PlateColor valueOfName(String name){ + for (PlateColor item : PlateColor.values()){ + if(item.name.equals(name)){ + return item; + } + } + return UNKNOWN; + } + +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateLayout.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateLayout.java new file mode 100644 index 0000000..97d1e9b --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateLayout.java @@ -0,0 +1,8 @@ +package com.visual.open.anpr.server.domain.extend; + +public enum PlateLayout { + + SINGLE, //单排 + DOUBLE, //双排 + UNKNOWN; //未知 +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateLocation.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateLocation.java new file mode 100755 index 0000000..dc8cfbb --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/PlateLocation.java @@ -0,0 +1,72 @@ +package com.visual.open.anpr.server.domain.extend; + +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; + +public class PlateLocation implements Serializable { + /**左上角x坐标**/ + @ApiModelProperty(value="左上角x坐标", position = 1, required = true) + private int x; + /**左上角y坐标**/ + @ApiModelProperty(value="左上角y坐标", position = 2, required = true) + private int y; + /**宽度**/ + @ApiModelProperty(value="车牌宽度", position = 3, required = true) + private int w; + /**高度**/ + @ApiModelProperty(value="车牌高度", position = 4, required = true) + private int h; + + /** + * 构建坐标 + * @param x + * @param y + * @param w + * @param h + * @return + */ + public static PlateLocation build(int x, int y, int w, int h){ + return new PlateLocation().setX(x).setY(y).setW(w).setH(h); + } + + public static PlateLocation build(float x, float y, float w, float h){ + return new PlateLocation().setX((int) x).setY((int) y).setW((int) w).setH((int) h); + } + + public int getX() { + return x; + } + + public PlateLocation setX(int x) { + this.x = x; + return this; + } + + public int getY() { + return y; + } + + public PlateLocation setY(int y) { + this.y = y; + return this; + } + + public int getW() { + return w; + } + + public PlateLocation setW(int w) { + this.w = w; + return this; + } + + public int getH() { + return h; + } + + public PlateLocation setH(int h) { + this.h = h; + return this; + } +} diff --git a/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/RecognitionInfo.java b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/RecognitionInfo.java new file mode 100644 index 0000000..ff3a5f6 --- /dev/null +++ b/open-anpr-server/src/main/java/com/visual/open/anpr/server/domain/extend/RecognitionInfo.java @@ -0,0 +1,41 @@ +package com.visual.open.anpr.server.domain.extend; + +import io.swagger.annotations.ApiModelProperty; + +import java.io.Serializable; + +public class RecognitionInfo implements Serializable { + /**车牌布局,单排还是双排**/ + @ApiModelProperty(value="车牌布局,单排还是双排", position = 1, required = true) + private PlateLayout layout; + /**车牌文本信息**/ + @ApiModelProperty(value="车牌文本信息", position = 3, required = true) + private String plateNo; + /**车牌的颜色信息**/ + @ApiModelProperty(value="车牌的颜色信息", position = 5, required = true) + private PlateColor plateColor; + + public PlateLayout getLayout() { + return layout; + } + + public void setLayout(PlateLayout layout) { + this.layout = layout; + } + + public String getPlateNo() { + return plateNo; + } + + public void setPlateNo(String plateNo) { + this.plateNo = plateNo; + } + + public PlateColor getPlateColor() { + return plateColor; + } + + public void setPlateColor(PlateColor plateColor) { + this.plateColor = plateColor; + } +} 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 index 434cfec..3014880 100644 --- 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 @@ -1,8 +1,46 @@ package com.visual.open.anpr.server.domain.response; +import com.visual.open.anpr.server.domain.extend.PlateLocation; +import com.visual.open.anpr.server.domain.extend.RecognitionInfo; +import io.swagger.annotations.ApiModelProperty; + import java.io.Serializable; public class PlateInfoRepVo implements Serializable { + /**车牌置信分数**/ + @ApiModelProperty(value="车牌置信分数:[0,100]", position = 1, required = true) + private Float plateScore; + + /**车牌位置信息**/ + @ApiModelProperty(value="车牌位置信息", position = 3, required = true) + private PlateLocation location; + + /**车牌识别信息**/ + @ApiModelProperty(value="车牌识别信息", position = 5, required = true) + private RecognitionInfo recognition; + + + public Float getPlateScore() { + return plateScore; + } + + public void setPlateScore(Float plateScore) { + this.plateScore = plateScore; + } + + public PlateLocation getLocation() { + return location; + } + + public void setLocation(PlateLocation location) { + this.location = location; + } + public RecognitionInfo getRecognition() { + return recognition; + } + public void setRecognition(RecognitionInfo recognition) { + this.recognition = recognition; + } } 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 5c549be..f6fcbb6 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 @@ -3,12 +3,18 @@ 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.domain.PlateInfo; import com.visual.open.anpr.core.extract.PlateExtractor; +import com.visual.open.anpr.server.domain.extend.PlateColor; +import com.visual.open.anpr.server.domain.extend.PlateLayout; +import com.visual.open.anpr.server.domain.extend.PlateLocation; +import com.visual.open.anpr.server.domain.extend.RecognitionInfo; 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.ArrayList; import java.util.HashMap; import java.util.List; @@ -40,6 +46,27 @@ public class PlateServiceImpl implements PlateService { //转换模型结果,并输出 System.out.println(plateImage.PlateInfos().size()); - return null; + List plates = new ArrayList<>(); + if(null != plateImage.PlateInfos() && !plateImage.PlateInfos().isEmpty()){ + for(PlateInfo plateInfo : plateImage.PlateInfos()){ + //检测信息 + PlateInfoRepVo plate = new PlateInfoRepVo(); + plate.setPlateScore((float)Math.floor(plateInfo.score * 1000000)/10000); + PlateLocation location = PlateLocation.build( + plateInfo.box.x1(), plateInfo.box.y1(), + plateInfo.box.width(), plateInfo.box.height() + ); + plate.setLocation(location); + //识别信息 + RecognitionInfo recognition = new RecognitionInfo(); + recognition.setLayout(plateInfo.single ? PlateLayout.SINGLE : PlateLayout.DOUBLE); + recognition.setPlateNo(plateInfo.parseInfo.plateNo); + recognition.setPlateColor(PlateColor.valueOfName(plateInfo.parseInfo.plateColor)); + plate.setRecognition(recognition); + //添加车牌 + plates.add(plate); + } + } + return plates; } }