前言
前段时间,项目中的一个核心模块中需要中文OCR功能,走过弯路趟过坑,这里分享出来。
实战
- 常见网络架构
- cnn + blstm + ctc
- cnn + ctc
- crnn + self_attetion + ctc
- crnn + attetion + ctc
-
github上面测试的结果
-
经验分享
1、使用DenseNet + CTC 架构搭建模型,在500万+的数据集上面训练,准确率0.97
2、词典:使用GB2312 + 常见特殊字符 + 数字 + 英文
3、实际测试中,DenseNet + CTC 比带Attention架构的模型整体识别率要高比较多,带Attention架构的模型一是容易误识别,二是容易漏识别
4、平衡整体性能,优先选 DenseNet + CTC
5、DenseNet + CTC模型存在的问题:无法区分字形很相近的字,如“ _ ”和 “ - ”, y和v等。带Attention架构的模型在这块有较大的优势。
- 详细介绍:DenseNet—Dense卷积网络
参考git源码
- CTPN + DenseNet + CTC : https://github.com/YCG09/chinese_ocr
- crnn_self_attetion : https://github.com/koibiki/crnn_self_attetion
- CRNN_Attention_OCR : https://github.com/wushilian/CRNN_Attention_OCR_Chinese