实践一下使用aspose.ocr来识别车牌号


placeholder image
admin 发布于:2024-11-20 10:22:46
阅读:loading

OCR识别我一直认为是门好东西,但是aspose.ocr组件虽然支持中文,但是它的中文识别结果我觉得真的非常不理想,我想更可能的是我了解的不够深入吧。尽管对中文的识别结果不够理想,但我仍然不想就这么结束了,还得是再深入的摸索摸索,所以本期是使用aspose.ocr来识别图片中的车牌号。

1.23与24版本区别

起初实践的是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文件夹下,参考该目录的存放结构如下图所示:

image.png

(3)23的版本支持中文的语言为Language.Chi,在24的版本标注为过期了,提供了更为全面的中文支持,包含了普通话、粤语等其他地区性质的语言,Language.Cmn为普通话;

2.车牌号识别

(1)咱们国家的车牌号的规则为中文、字母大写、数字的组合,分别尝试了上面的三个版本的车牌号识别效果,发现使用中文来识别的效果非常的不科学,使用英文的效果又只能识别出字母和数字。

(2)根据车牌号识别的API中提供的忽略字符函数,专门派出了小写字母和大写字母的O与I,因为它们与数字0和1比较相似,在实际车牌号码中并不存在。

(3)本次示例使用aspose.ocr内置的车牌号识别API,来验证从百度上搜索的含车辆车牌的一些图片。

2.1参考代码

@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);
    }

}

2.2输出结果

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

2.3车辆图片素材

ddd111.jpg

(第一张)

ddd222.jpg

(第二张)

ddd333.jpeg

(第三张)

ddd444.jpg

(第四张)

ddd555.jpg

(第五张)

3.其它说明

(1)以上所有图片均来自百度搜索结果,如有异议联系删除;

(2)第一张图片识别的结果不理想,也许是因为它是车辆的车尾照;

(3)后面的几张图片识别结果中的字母和数字识别的还算不错,基本上正确;

(4)由于识别语言设置的为英文,所以只能够识别出字母与数字的结果;

(5)持续关注吧,看看从哪个版本后对中文支持的比较好;

 点赞


 发表评论

当前回复:作者

 评论列表


留言区