目录
素材图片
pytesseract
easyocr
PaddleOCR
总结
pytesseract是google做的ocr库,一般用在验证码的识别。实测中文的识别速度最快,但是效果也是最差的。
安装:
pip install pytesseract
下载中文语言包,把语言包放在tessdata目录:
chi_sim.traineddata
编码:
def ocr_pytesseract(img):
import pytesseract
from PIL import Image
text = pytesseract.image_to_string(Image.open(img), lang='chi_sim')
print(text)
start_time = time.time()
ocr_pytesseract('ocr_test.jpg')
end_time = time.time()
print('\n ==== OCR cost time: {} ===='.format(end_time-start_time))
结果:
E r
a 口
律 吕 调 阳
丽 口 怀 八 唐 门
伟 y 目
==== OCR cost time: 1.413381814956665 ====
支持CUDA的显示进行运算,因笔者没有此类显卡,无法测出对应的运算情况。单纯使用CPU运算进行对素材图片进行识别,耗时16秒多,但是识别的效果是最好的。
第一次运行需要下载检测模型和识别模型,可能需要连VPN才能下载。
安装:
pip install easyocr
编码:
def ocr_easyocr(img):
import easyocr
reader = easyocr.Reader(['ch_sim'], gpu=False)
result = reader.readtext(img)
print(result)
start_time = time.time()
ocr_easyocr('ocr_test.jpg')
end_time = time.time()
print('\n ==== OCR cost time: {} ===='.format(end_time-start_time))
结果:
([[7, 77], [854, 77], [854, 251], [7, 251]], '秋收冬藏', 0.4780772924423218)
([[0, 371], [846, 371], [846, 545], [0, 545]], '闰馀成岁', 0.43691790103912354)
([[0, 672], [849, 672], [849, 837], [0, 837]], '律吕调阳', 0.9675037264823914)
([[27, 973], [867, 973], [867, 1133], [27, 1133]], '云腾致雨', 0.47716110944747925)
([[16, 1260], [840, 1260], [840, 1432], [16, 1432]], '露结为霜', 0.9142329692840576)
==== OCR cost time: 16.298426151275635 ====
基于飞桨的OCR工具库,包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。同时支持多种文本检测、文本识别的训练算法。
安装:
pip install paddlepaddle
pip install shapely
pip install paddleocr
编码:
def ocr_PaddleOCR(img):
from paddleocr import PaddleOCR, draw_ocr
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
result = ocr.ocr(img, cls=True)
for line in result:
print(line)
start_time = time.time()
ocr_PaddleOCR('ocr_test.jpg')
end_time = time.time()
print('\n ==== OCR cost time: {} ===='.format(end_time-start_time))
结果:
[[[31.0, 101.0], [825.0, 101.0], [825.0, 230.0], [31.0, 230.0]], ('秋收冬藏', 0.9912934899330139)]
[[[35.0, 401.0], [828.0, 396.0], [828.0, 519.0], [36.0, 524.0]], ('徐成岁', 0.8544955253601074)]
[[[37.0, 699.0], [833.0, 699.0], [833.0, 817.0], [37.0, 817.0]], ('律吕调阳', 0.9010504484176636)]
[[[39.0, 995.0], [836.0, 998.0], [835.0, 1114.0], [38.0, 1111.0]], ('云腾致雨', 0.916015625)]
[[[41.0, 1292.0], [822.0, 1292.0], [822.0, 1408.0], [41.0, 1408.0]], ('露结为霜', 0.9582253098487854)]
==== OCR cost time: 4.5573132038116455 ====
测试样例单一,数据仅供参考,感兴趣的可以自行测试其他样例。
本文虽然没有列举过多的测试样例,但是实际我自己测试了多个样例,目前来看从识别准确度和耗时上看,表现最好的是PaddleOCR