几种python入门级OCR开源库中文识别效果对比

目录

 

素材图片

pytesseract

easyocr

PaddleOCR

总结


素材图片

几种python入门级OCR开源库中文识别效果对比_第1张图片

pytesseract

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 ====

easyocr

支持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 ====

PaddleOCR

基于飞桨的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

你可能感兴趣的:(文字识别,图像识别,python,numpy,开发语言)