大家好,我是微学AI,今天给大家带来手写OCR识别的项目。手写的文稿在日常生活中较为常见,比如笔记、会议记录,合同签名、手写书信等,手写体的文字到处都有,所以针对手写体识别也是有较大的需求。目前手写体的识别相比印刷体识别率不是太高,主要有以下几个难点:
以上难点对手写体的识别都带来了很大难度。本项目先采用paddlehub第三方库包进行手写识别,让大家体验以下。
#模型导入
import paddlehub as hub
ocr = hub.Module(name="chinese_ocr_db_crnn_server")
import cv2
image_path = '123456.png'
# 读取测试文件夹test.txt中的照片路径
np_images =[cv2.imread(image_path)]
results = ocr.recognize_text(
images=np_images, # 图片数据,ndarray.shape 为 [H, W, C],BGR格式;
use_gpu=False, # 是否使用 GPU;若使用GPU,请先设置CUDA_VISIBLE_DEVICES环境变量
output_dir='ocr_result', # 图片的保存路径,默认设为 ocr_result;
visualization=True, # 是否将识别结果保存为图片文件;
box_thresh=0.5, # 检测文本框置信度的阈值;
text_thresh=0.5) # 识别中文文本置信度的阈值;
for result in results:
data = result['data']
save_path = result['save_path']
for infomation in data:
print('text: ', infomation['text'], '\nconfidence: ', infomation['confidence'], '\ntext_box_position: ', infomation['text_box_position'])
chinese_ocr_db_crnn_server 模型代码可以自动下载,一般在默认地址里:C:\Users\***\.paddlehub\modules\chinese_ocr_db_crnn_server,模型里面的文件结构:
手写识别测试图片样例:
识别结果:
text: 每一个人的生命中,都应该有一次,
confidence: 0.9856153130531311
text_box_position: [[162, 20], [836, 31], [835, 100], [161, 88]]
text: 为了某个人而忘了自己,不求有结果
confidence: 0.9664433598518372
text_box_position: [[62, 107], [849, 101], [849, 166], [62, 172]]
text: 不求同行,不求曾经拥有,甚至不求
confidence: 0.9502739906311035
text_box_position: [[52, 184], [850, 177], [850, 256], [52, 263]]
text: 他知道,只求在最美的年华里,遇见他。
confidence: 0.9504407048225403
text_box_position: [[31, 273], [887, 260], [888, 352], [32, 365]]
大家看到对上面的识别效果还行,也可以选择其他手写照片试试,主要识别率不是大家理想的,需要进一步根据相关数据进行训练,如果是字体特别潦草的识别效果不佳,对于正楷字,规范的行书等识别率较高。
同时我们也可以基于PP-OCRv3中英文超轻量预训练模型进行优化手写文字识别模型,将默认预训练模型的准确率从0.03%提升到54%。
小伙伴可以自己进行训练,可使用公开的手写文本识别数据集,包含Chinese OCR, 手写中文数据集CASIA-HWDB2.x等,可直接下载使用进行训练。训练的过程可根据参考文献进行训练,有具体问题可以私信交流哦。
参考文献:OCR手写文字识别 - 飞桨AI Studio