对于做爬虫、数据处理、或自动化的小伙伴,应该经常会遇到一个场景:网页中的图形验证码没法直接获取,简单的方式就是利用 OCR,而 OCR 识别准确率、部署是否方便,直接影响开发体验。
今天我就带你聊聊 Python 里常见的几个OCR 框架,即:pytesseract、cnocr、paddleOCR
介绍 1、pytesseract
Google 的 Tesseract OCR 的 Python 封装,历史悠久,全球用户最多,安装起来相对简单。
优点是 “通用性强”,缺点就是对于中文识别准确率确实一般,需要我们额外去训练字库(稍微麻烦)
2、cnocr
出自国内开源作者,针对中文做了优化,支持简体和繁体,能直接上手跑中文识别,不用自己折腾语言包。安装也比较轻量。
3、paddleOCR
百度出品的 OCR 框架,基于飞桨深度学习框架。模型丰富,识别准确率高,支持多语言,还能做版面分析、表格识别等进阶玩法。
但相对来说,安装依赖多一些,对新手不算特别友好。
对比 下面对三种 OCR 常用功能写了一个对比表格,大家可以参考下
使用方式 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!