实践一下使用aspose.ocr来识别车牌号
aspose.ocradmin 发布于:2024-11-20 10:22:46
阅读:loading
OCR识别我一直认为是门好东西,但是aspose.ocr组件虽然支持中文,但是它的中文识别结果我觉得真的非常不理想,我想更可能的是我了解的不够深入吧。尽管对中文的识别结果不够理想,但我仍然不想就这么结束了,还得是再深入的摸索摸索,所以本期是使用aspose.ocr来识别图片中的车牌号。
起初实践的是aspose.ocr的23.10.0的版本,后来又尝试过24.1.0的版本,到现在(2024年11月)最新版本是24.10.0,始终对中文支持的都不是非常科学(肯定是我的掌握深度不够),粗浅的说下这些版本给我的区别:
(1)23及以前的版本整个jar包比较大,都是100多M,200多M的大小;
(2)24及以后的版本整个jar包比较小,精简了一些文件,把一些语言识别文件单独给拆出去了,需要放置在项目下的aspose_data文件夹下,参考该目录的存放结构如下图所示:
(3)23的版本支持中文的语言为Language.Chi,在24的版本标注为过期了,提供了更为全面的中文支持,包含了普通话、粤语等其他地区性质的语言,Language.Cmn为普通话;
(1)咱们国家的车牌号的规则为中文、字母大写、数字的组合,分别尝试了上面的三个版本的车牌号识别效果,发现使用中文来识别的效果非常的不科学,使用英文的效果又只能识别出字母和数字。
(2)根据车牌号识别的API中提供的忽略字符函数,专门派出了小写字母和大写字母的O与I,因为它们与数字0和1比较相似,在实际车牌号码中并不存在。
(3)本次示例使用aspose.ocr内置的车牌号识别API,来验证从百度上搜索的含车辆车牌的一些图片。
@Test
public void test() throws Exception {
registerOcr24100();
//是否注册
System.out.println("License.isValid() = " + License.isValid());
//加载语言包
Resources.FetchAll();
//输出本地的语言包
final List<String> list = Resources.ListLocal();
System.out.println("list = " + list);
AsposeOCR ocr = new AsposeOCR();
OcrInput input = new OcrInput(InputType.SingleImage);
input.add(URLDecoder.decode(getClass().getResource("/car/ddd111.jpg").getPath() , StandardCharsets.UTF_8.name()));
input.add(URLDecoder.decode(getClass().getResource("/car/ddd222.jpg").getPath() , StandardCharsets.UTF_8.name()));
input.add(URLDecoder.decode(getClass().getResource("/car/ddd333.jpeg").getPath() , StandardCharsets.UTF_8.name()));
input.add(URLDecoder.decode(getClass().getResource("/car/ddd444.jpg").getPath() , StandardCharsets.UTF_8.name()));
input.add(URLDecoder.decode(getClass().getResource("/car/ddd555.jpg").getPath() , StandardCharsets.UTF_8.name()));
CarPlateRecognitionSettings carSettings = new CarPlateRecognitionSettings();
carSettings.setLanguage(Language.Eng);
carSettings.setAllowedCharacters(CharactersAllowedType.ALL);
carSettings.setIgnoredCharacters("abcdefghijklmnopqrstuvwxyzOI");
final ArrayList<RecognitionResult> results = ocr.RecognizeCarPlate(input, carSettings);
for (int i = 0; i < results.size(); i++) {
RecognitionResult result = results.get(i);
System.out.println("第[" + (i + 1) + "]张图片识别结果:" + result.recognitionAreasText + "---" + result.recognitionText);
}
}
License.isValid() = true
list = [aspose-ocr-advanced-recognition-v1, aspose-ocr-chinese-v1, aspose-ocr-chinese-v2, aspose-ocr-cyrillic-v1]
第[1]张图片识别结果:[BRSCHEGTO-YEU]---BRSCHE
GT
O-YEU
第[2]张图片识别结果:[A-88FC81]---
A-88FC8
1
第[3]张图片识别结果:[RSEMAXB-8LM39]---
RSEMAX
B-8LM39
第[4]张图片识别结果:[A-88FC8]---A-88FC8
第[5]张图片识别结果:[A-88FC8]---A-88FC8
(第一张)
(第二张)
(第三张)
(第四张)
(第五张)
(1)以上所有图片均来自百度搜索结果,如有异议联系删除;
(2)第一张图片识别的结果不理想,也许是因为它是车辆的车尾照;
(3)后面的几张图片识别结果中的字母和数字识别的还算不错,基本上正确;
(4)由于识别语言设置的为英文,所以只能够识别出字母与数字的结果;
(5)持续关注吧,看看从哪个版本后对中文支持的比较好;
这几天发现aspose.ocr又又又更新了,最新版本是24.11.1,看到语言包又增加了Language.Chinese(所有中文语言,还支持中英文混合语言文本),24版本的Language.Cmn对应的是普通话(中文),于是又把例子运行起来,发现这个版本较之于之前的老版本来说,简直是非常丝滑了,而且这个版本能够准确的识别中文了,所以除了上面的五张图外,又增加了几张包含车牌的车辆图片,参考示例图片和识别结果如下:
(第六张)
(第七张)
识别结果
第[1]张图片识别结果:[119H1E
DYEL
]---119H1E
DYEL
第[2]张图片识别结果:[辽A-88FC8
S
爱一卡汽车
]---
辽A-88FC8
S
爱一卡汽车
第[3]张图片识别结果:[军急避险点元
H
川B-8LM39
]---
军急避险点元
H
川B-8LM39
第[4]张图片识别结果:[辽A-88FC8
]---辽A-88FC8
第[5]张图片识别结果:[辽A·88FC8
]---辽A·88FC8
第[6]张图片识别结果:[保足天地人合销售服务店
中
勇
冀F·F01717
]---
保足天地人合销售服务店
中
勇
冀F·F01717
第[7]张图片识别结果:[918
1888
京Q·07ZX3
一海英中
口一
AB
]---
918
1888
京Q·07ZX3
一海英中
口一
AB
结果说明
(1)上述示例的识别结果是基于最新版本24.11.1运行的;
(2)上述示例的运行代码设置的语言是Language.Chinese,设置成Cmn识别结果也可以,语言包支持的都是中文汉字、拼字字母、阿拉伯数字;
(3)上述示例的扫描识别结果还是非常好的,除了第一张图片未能识别正确外(可以视为第一张图片自身的素材问题),其他的都比较好;
(4)《aspose.orc识别车牌图片.zip》含代码与图片,不含科学使用方式;
点赞