Py学习  »  Python

Python 中文 OCR 大比拼:谁才是识字最稳的神器?

AirPython • 9 月前 • 650 次点击  

 


对于做爬虫、数据处理、或自动化的小伙伴,应该经常会遇到一个场景:网页中的图形验证码没法直接获取,简单的方式就是利用 OCR,而 OCR 识别准确率、部署是否方便,直接影响开发体验。

今天我就带你聊聊 Python 里常见的几个OCR 框架,即:pytesseract、cnocr、paddleOCR

介绍

1、pytesseract

Google 的 Tesseract OCR 的 Python 封装,历史悠久,全球用户最多,安装起来相对简单。

优点是 “通用性强”,缺点就是对于中文识别准确率确实一般,需要我们额外去训练字库(稍微麻烦)

2、cnocr

出自国内开源作者,针对中文做了优化,支持简体和繁体,能直接上手跑中文识别,不用自己折腾语言包。安装也比较轻量。

3、paddleOCR

百度出品的 OCR 框架,基于飞桨深度学习框架。模型丰富,识别准确率高,支持多语言,还能做版面分析、表格识别等进阶玩法。

但相对来说,安装依赖多一些,对新手不算特别友好。

对比

下面对三种 OCR 常用功能写了一个对比表格,大家可以参考下

OCR
中文识别能力
模型大小
易用性
准确率
特色
pytesseract
很一般
中等
简单
4
出的早,使用广泛
cnocr
可以
小巧
更简单
8
更适用于中文OCR
paddleOCR
很强
很大
中等
9
功能更全,支持多场景

使用方式

1 - pytesseract

import pytesseract
from PIL import Image

img = Image.open("test_cn.png")
text = pytesseract.image_to_string(img, lang="chi_sim")
print(text)

需要注意的是,lang="chi_sim" 表示简体中文,我们安装 pytesseract 时需要提前下载中文语言包(或者使用其他人训练好的语言包进行本地文件替换)

项目地址:

https://github.com/tesseract-ocr/tesseract

2 - cnocr




    
from cnocr import CnOcr

ocr = CnOcr()
out = ocr.ocr("test_cn.png")
print("".join([x['text'for x in out]))

不得不说,cnocr 开箱即用,不用额外配置,识别中文很省心。

项目地址:

https://cnocr.readthedocs.io/zh-cn/stable/

3 - paddleOCR

from paddleocr import PaddleOCR

ocr = PaddleOCR(use_angle_cls=True, lang="ch")
result = ocr.ocr("test_cn.png", cls=True)
for line in result[0]:
    print(line[1][0])

除了文字识别,paddleOCR 还能返回坐标、角度,更适合做排版分析

项目地址:

https://github.com/PaddlePaddle/PaddleOCR

总结

三款市面常用的 OCR,就准确率来说:paddleOCR 最强,尤其是遇到弯曲文字、复杂背景的时候、cnocr 在常规场景也完全够用、pytesseract 经常掉链子。

在社区和生态方面,pytesseract 全球用户最多,遇到问题搜索基本都有答案;paddleOCR 背靠百度,文档详细;cnocr 相对小众,但中文识别体验好。

如果你只是偶尔处理中文OCR任务,更推荐大家使用 cnocr,因为它最省心;如果你需要工业级别的识别精度,比如发票、文档扫描,paddleOCR 才是硬核选择;而 pytesseract 更像是 “工具箱里的瑞士军刀”,通用但不专精,适合快速实验和多语言需求。

一句话:轻量用 cnocr,高精度推荐 paddleOCR,追求兼容性选择 pytesseract!

 

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/186708