🐸 青蛙编程网
首页 / AI / 文字识别 OCR / 3. EasyOCR:多语言识别

3. EasyOCR:多语言识别利器

这是什么:EasyOCR = 一个开箱即用的 Python OCR 库,一个 Reader 就能收下 80 多种语言。

为什么用:上一章你已经跑通了第一次识别,但那只是默认参数。真正干活时只会中英文还行,一遇到小语种、混进无关字符就露怯,参数得一个个调明白。

如何用:本章先练语言与混合识别,再用白名单、黑名单和 detail、paragraph 这几个重点参数把识别率调上去。

基线:EasyOCR 1.7.2(PyPI 上长期没大更新的稳定版,API 稳定,放心用)。

3.1 语言与混合识别

import easyocr

reader = easyocr.Reader(
    ['ch_sim', 'en'],     # 简体中文 + 英文,中英混排场景标配
)

常用语言代码速查:

代码 语言
ch_sim / ch_tra 简体 / 繁体中文
en 英文
ja / ko 日文 / 韩文
de / fr / ru 德 / 法 / 俄

多种语言一起写进列表即可。中英混排场景(['ch_sim', 'en'])必配——只写 ['ch_sim'] 的话,图里的英文报错信息会整段漏掉。

代价也要知道:语言越多,模型越大、推理越慢。中文 + 英文已经是常见上限,再加日韩只会拖慢速度,除非图里真的出现那些文字。

3.2 白名单与黑名单:只认该认的字

知道要出现哪些字符时,直接告诉模型,比事后过滤快得多:

# 只认数字和百分号(适合读表格数字、仪表盘)
reader.readtext('meter.png', allowlist='0123456789.%')

# 排除掉常见误识别字符(比如型号里的 O 和数字 0 常混)
reader.readtext('code.png', blocklist='OIl')

3.3 重点参数:detail 与 paragraph

# detail=0:只要文字,最简模式
print(reader.readtext('test.png', detail=0))
# ['青蛙编程网', 'frog blog v1.0']

# detail=1:完整三元组(坐标/文本/置信度),默认
result = reader.readtext('test.png', detail=1)

段落模式——把零散的小框按视觉关系合并成整段:

result = reader.readtext('article.png', paragraph=True)
print(result[0][1])        # 这一整段的文字

注意:开了 paragraph=True,每条结果就只剩「框 + 文本」两项,置信度被合并掉了。所以想要置信度时不要开段落模式。

场景 建议
做数据导出 / 搜索 detail=1 保留坐标和置信度
快速抓手本全文 detail=0 + paragraph=True
要复核可疑行 detail=1,别开 paragraph(没有置信度)

3.4 提升命中率的调参

reader.readtext('test.png',
    detail=0,
    decoder='beamsearch',       # 精细解码(默认 greedy 更快)
    text_threshold=0.7,         # 文字判定阈值,调低可捞更淡的文字
    mag_ratio=2.0               # 放大 2 倍再识别:小字救星
)
  • 小字、糊图:mag_ratio 放大是第一奇招
  • 艺术字 / 繁体书法:换 beamsearch,拿算力换准确率
  • 浓背景淡文字:调低 text_threshold

调参顺序建议:mag_ratio(放大)→ 阈值 → 解码器。先简单后复杂,一个 mag_ratio=2.0 常解 80% 烦恼。

另外两个影响「捞不捞得到」的参数:min_size(默认 20,小于这个高度的文字直接忽略)和 canvas_size(默认 2560,超大图会被缩放后再识别)。

3.5 GPU 加速(可选)

reader = easyocr.Reader(['ch_sim', 'en'], gpu=True)   # 默认自动检测显卡

有 CUDA 环境就能用(Google Colab 自带 GPU)。CPU 首跑数秒 vs GPU 毫秒级,学习阶段不装 CUDA 也不影响一切。

3.6 常见翻车现场

报错 / 现象 原因 修法
ImportError: ... libGL.so.1 Linux 缺图形库 sudo apt install libgl1
cv2 导入报错 同时装了多个 OpenCV 发行版 只留一个(见第 5 章 5.7)
中文漏识别 语言列表没带 ch_sim 加上 'ch_sim'
段落模式下取值报错 开了 paragraph 还想解包 3 项 改成 item[1],或关掉 paragraph
小字一个都没识别到 高度小于 min_size 调小 min_size 或先放大

3.7 动手改

  1. 三种模式全跑:detail=0 / detail=1 / paragraph=True,对比输出结构差异
  2. 找一张小字截图,mag_ratio=2.0 与不用对比识别率
  3. 试试 ['ja', 'en'] 识别一段日文截图

3.8 小结

  • 语言表列全即识别全;中英混排 ['ch_sim', 'en'] 是默认起手
  • 知道字符集就用 allowlist / blocklist,比事后过滤省事
  • detail 控制输出粒度,paragraph 合并段落(但会丢掉置信度)
  • mag_ratio 放大是对付小字的头号武器

下一章:PaddleOCR:中文识别的标杆 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。