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

对于做爬虫、数据处理、或自动化的小伙伴,应该经常会遇到一个场景:网页中的图形验证码没法直接获取,简单的方式就是利用 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!
更多推荐
所有评论(0)