JaidedAI/EasyOCR · 上手攻略
- 仓库:JaidedAI/EasyOCR
- 链接:https://github.com/JaidedAI/EasyOCR
- 分类:computer-vision / ocr / pytorch
- 作者:Tom
- 更新:2026-08-18
是什么
EasyOCR 是一个用 PyTorch 开发的通用 OCR(光学字符识别)Python 库,开箱即用,支持 80+ 语言,涵盖 Latin、CJK(简繁体中文、日文、韩文)、Arabic、Devanagari、Cyrillic 等所有主流书写系统,同时处理自然场景文本和文档密集文本。
v1.7.2(2024 年 9 月)是当前最新正式版。自 2020 年起持续维护,GitHub Star 29.9k+,是开源 OCR 领域最受欢迎的项目之一。
解决什么问题
传统 OCR 方案(如 Tesseract)对非英语文本、多语言混合、弯曲或倾斜文本的支持往往很差,而且需要大量配置才能达到可用精度。
EasyOCR 的核心价值是一个函数调用解决多语言 OCR 问题——不需要调参数、不需要训练模型、不需要准备语言包(模型权重会自动下载),给一个图像路径就返回识别结果和置信度。
快速安装
标准安装(pip)
pip install easyocr
开发版(Git 直接安装)
pip install git+https://github.com/JaidedAI/EasyOCR.git
Windows 用户特别说明
⚠️ Windows 上建议先手动安装 PyTorch,再装 EasyOCR: ```bash
访问 https://pytorch.org,选择对应的 CUDA 版本
如果只用 CPU 模式:CUDA = None
pip install torch torchvision pip install easyocr ```
Docker(可选)
# 项目提供 Dockerfile,适合不想污染本地环境的用户
docker build -t easyocr https://github.com/JaidedAI/EasyOCR.git
核心用法
基础四行代码
import easyocr
reader = easyocr.Reader(['ch_sim', 'en']) # 只需执行一次,加载模型到内存
result = reader.readtext('chinese.jpg')
print(result)
输出格式(每项:边界框坐标、识别文本、置信度):
[
([[189, 75], [469, 75], [469, 165], [189, 165]], '愚园路', 0.375),
([[86, 80], [134, 80], [134, 128], [86, 128]], '西', 0.405),
([[517, 81], [565, 81], [565, 123], [517, 123]], '东', 0.999),
...
]
简化输出(不需要置信度时)
reader = easyocr.Reader(['ch_sim', 'en'])
result = reader.readtext('chinese.jpg', detail=0)
# 输出: ['愚园路', '西', '东', '315', '309', 'Yuyuan Rd.', 'W', 'E']
指定语言
# 英语 + 简体中文
reader = easyocr.Reader(['ch_sim', 'en'])
# 日语 + 英语
reader = easyocr.Reader(['jpn', 'en'])
# 阿拉伯语
reader = easyocr.Reader(['ar'])
# 俄语(西里尔文,推荐使用第二代模型)
reader = easyocr.Reader(['cyrillic'], recog_network='cyrillic_g2')
⚠️ 语言兼容规则:英语与所有语言兼容;共享字符集的语言通常可以一起使用(如英语+法语+德语);不兼容的语言组合会降低识别精度。
输入格式灵活
# 方式一:文件路径
reader.readtext('/path/to/image.jpg')
# 方式二:OpenCV 图像对象(numpy array)
import cv2
img = cv2.imread('image.jpg')
reader.readtext(img)
# 方式三:图片字节
with open('image.jpg', 'rb') as f:
reader.readtext(f.read())
# 方式四:URL(直链图片)
reader.readtext('https://example.com/image.jpg')
CPU 模式(无 GPU 或显存不足时)
reader = easyocr.Reader(['ch_sim', 'en'], gpu=False)
CLI 用法(无需写 Python)
easyocr -l ch_sim en -f chinese.jpg --detail=1 --gpu=True
参数说明:
- -l:语言列表(逗号分隔)
- -f:图像文件路径
- --detail=1:输出详细信息(边界框、置信度);=0 则只输出文本
- --gpu=True / False:是否启用 GPU
技术架构(机制说明)
EasyOCR 的识别管线分两个阶段,基于两篇经典论文:
第一阶段:文本检测(CRAFT) 来自 ClovaAI 的 CRAFT 论文,检测图像中文字区域的位置。不需要提前知道语言。
第二阶段:文本识别(CRNN) 来自 CRNN 论文,将检测到的文字区域识别为字符串。
识别模型结构(从官方文档): 1. 特征提取:ResNet + VGG(从图像中提取字符特征) 2. 序列标注:LSTM(对特征序列进行时序建模) 3. 解码输出:CTC Loss(Connectionist Temporal Classification,不需字符对齐的序列解码)
v1.6.0 新增:可选检测网络 DBNET(DBNet,论文 arxiv.org/abs/2202.10304),在部分场景下精度更高:
# 使用 DBNet 代替默认 CRAFT
reader = easyocr.Reader(['en'], detect_network='dbnet18')
模型权重管理
首次运行时会自动下载对应语言的模型权重(约数百 MB),存储路径:
~/.EasyOCR/model/
如需手动下载:访问 https://www.jaided.ai/easyocr/modelhub
典型适用场景
- 文档数字化:扫描 PDF / 照片 → 自动提取文字 → 进一步处理或检索。
- 多语言招牌 / 菜单识别:旅游场景下中英日韩阿混合文本一次性识别。
- 车牌 / 工业字符识别:自然场景下的文本检测,配合置信度过滤低质量识别。
- 手写文字识别:支持部分手写体(官方示例中已有演示),但精度低于印刷体。
- 批量图像 OCR 管道:Python 循环或批处理脚本,配合 pandas 输出结构化表格。
坑与注意
- 首次加载慢:模型首次加载到 GPU 内存需要 20-60 秒(取决于网络和 GPU),这是正常的;后续复用
reader对象无需重新加载。 - 第二代模型 vs 第一代:第二代模型体积更小、速度更快、字符覆盖更多,但部分语言仍只有第一代模型;选择时需参考官方文档。
- 弯曲 / 透视变形文本:默认 CRAFT 检测器对弯曲文本有一定鲁棒性,但严重透视变形的文档建议先用 OpenCV 预处理(
cv2.warpPerspective)。 - 置信度不等于准确率:低置信度字符大概率是识别错误,但高置信度也可能出错;生产环境建议配合规则校验。
- PyTorch 版本兼容性:PyTorch 2.x 可能存在一些兼容问题,如遇报错建议降级到 PyTorch 1.x 或参考官方 Issue。
- v1.7.2 后无新版本(截至 2026-08,距上一个正式版已近两年):项目目前以修复兼容性问题为主,大版本功能迭代放缓;PP-OCRv6(2026 年 5 月)等新版方案在部分benchmark上已超越 EasyOCR。
- 中文简繁体混合:简体中文 (
ch_sim) 和繁体中文 (ch_tra) 是两个独立模型,不可同时加载;如需识别两岸三地文本需分两次调用。 - 多语言组合限制:不是所有语言两两兼容,同时使用超过 3 种不相关语言时识别率会明显下降。
与同类对比
| EasyOCR | Tesseract | PaddleOCR | PaddleOCR-VL (2026) | |
|---|---|---|---|---|
| 开源时间 | 2020 | 1985(2006 开源) | 2020 | 2026 |
| 语言数量 | 80+ | 100+ | 100+ | 80+ |
| 多语言混合 | ✅ | ❌ | ✅ | ✅ |
| VLM 加持 | ❌ | ❌ | ❌ | ✅(94.5% OmniDocBench) |
| 本地运行 | ✅ | ✅ | ✅ | ✅(但大模型需显存) |
| 上手难度 | 低(四行代码) | 中 | 中 | 高 |
| 最新活跃度 | 较低(两年无大版本) | 低 | 高 | 高 |
| GPU 推荐 | RTX 2060+ | CPU 即可 | RTX 3060+ | RTX 3090+ |
一句话对比:EasyOCR 是最容易上手的本地多语言 OCR 方案(没有之一),但 2026 年的 PP-OCRv6 和 PaddleOCR-VL 在 benchmark 精度上已领先。如需生产级精度建议对比测试后再选型。
一句话推荐结论
EasyOCR 用四行 Python 代码搞定 80+ 语言 OCR,是快速原型 / POC / 个人项目里最省事的方案;但如果你在 2026 年要做正式产品,建议同时评估 PaddleOCR-VL(VLM 加持,OmniDocBench 94.5%)和 PP-OCRv6 的最新benchmark,因为 EasyOCR 本身已近两年无大版本更新,精度差距在逐步拉开。