实践一下使用aspose.ocr来识别车牌号
admin 发布于: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("abcdefghijklmnopqrstuvwxyz0I");
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)持续关注吧,看看从哪个版本后对中文支持的比较好;
点赞