错误数量最后为什么是9,要怎么改,才能是0,代码如下 public static void main(String[] args) { // 多张车牌图片路径 String[] imgPaths = {"res/image/test_image/plate_locate.jpg", "res/image/test_image/test.jpg", "res/image/test_image/plate_detect.jpg"}; int sum = imgPaths.length; // 总共处理的图片数量 int errNum = 0; // 识别错误的数量 int sumTime = 0; // 总耗时 long longTime = 0; // 最长处理时长 for (int i = 0; i < sum; i++) { opencv_core.Mat src = opencv_imgcodecs.imread(imgPaths[i]); String ret = Arrays.toString(multiPlateRecognise(src)); long now = System.currentTimeMillis(); System.err.println(ret); long s = System.currentTimeMillis() - now; if (s > longTime) { longTime = s; } sumTime += s; System.out.println("识别车牌" + ret); if (!"苏EUK722".equals(ret)) { errNum++; } if (!"苏AOCP56".equals(ret)) { errNum++; } if (!"沪BS781".equals(ret)) { errNum++; } } BigDecimal errSum = new BigDecimal(errNum); BigDecimal sumNum = new BigDecimal(sum * 3); BigDecimal c = sumNum.subtract(errSum).divide(sumNum).multiply(new BigDecimal(100)); System.err.println("总耗时:" + sumTime + "ms,平均处理时长:" + sumTime / (sum * 3) + "ms,错误数量:" + errNum + ",正确识别率:" + c + "%"); } }
时间: 2024-02-14 08:16:10 浏览: 102
在这段代码中,错误数量是9的原因是每个图片都进行了三次车牌识别,所以总共识别的车牌数量是sum * 3。而在判断是否识别正确时,每个图片只有三个车牌号可判断。因此,应该将if语句合并,只判断是否有一个车牌号识别错误即可。修改后的代码如下:
```
public static void main(String[] args) {
// 多张车牌图片路径
String[] imgPaths = {"res/image/test_image/plate_locate.jpg", "res/image/test_image/test.jpg", "res/image/test_image/plate_detect.jpg"};
int sum = imgPaths.length; // 总共处理的图片数量
int errNum = 0; // 识别错误的数量
int sumTime = 0; // 总耗时
long longTime = 0; // 最长处理时长
for (int i = 0; i < sum; i++) {
opencv_core.Mat src = opencv_imgcodecs.imread(imgPaths[i]);
String[] ret = multiPlateRecognise(src);
long now = System.currentTimeMillis();
System.err.println(Arrays.toString(ret));
long s = System.currentTimeMillis() - now;
if (s > longTime) {
longTime = s;
}
sumTime += s;
boolean flag = false; // 是否有一个车牌号识别错误
for (String plate : ret) {
if (plate != null && !"苏EUK722".equals(plate) && !"苏AOCP56".equals(plate) && !"沪BS781".equals(plate)) {
flag = true;
break;
}
}
if (flag) {
errNum++;
}
}
BigDecimal errSum = new BigDecimal(errNum);
BigDecimal sumNum = new BigDecimal(sum);
BigDecimal c = sumNum.subtract(errSum).divide(sumNum).multiply(new BigDecimal(100));
System.err.println("总耗时:" + sumTime + "ms,平均处理时长:" + sumTime / sum + "ms,错误数量:" + errNum + ",正确识别率:" + c + "%");
}
```
阅读全文