2. 环境搭建与第一次识别
这是什么:OCR 第一次实战 = 装好识别库、喂进一张图、拿回可复制的文字,走通这一条流程就算入门。
为什么用:上一章说清了 OCR 能干什么,可概念再美也得亲手跑一次才算会用。装库、传图、读输出,每一步都躲不过。
如何用:本章从装 EasyOCR、准备图片到读懂三元组输出一步步来,先跑通,再回头看懂每一行。
2.1 环境建议(温故 venv)
按 虚拟环境 venv 教程建环境(OCR 依赖不轻,隔离更稳):
mkdir ocr-lab && cd ocr-lab
python -m venv .venv
.venv\Scripts\Activate.ps1 # (macOS/Linux: source .venv/bin/activate)
版本说明:全站基线是 Python 3.15,但本教程两条路线都有上限——PyTorch 2.14.1 只出到 3.14 的 wheel,PaddlePaddle 3.3.1 只出到 3.13。建环境请选 Python 3.12 或 3.13,否则装不上。
三大路线速览(后几章各有主场):
| 库 | 特点 | 何时用 |
|---|---|---|
| EasyOCR | 开箱即用、80+ 语言 | 入门首选,快速出成果 |
| PaddleOCR | 中文场景天花板 | 生产级中文识别 |
| Tesseract(pytesseract) | 老牌 C++ 引擎 | 已有部署集成、批量轻量任务 |
选 EasyOCR 的理由很实在:它把「装模型」这件事也包了。Tesseract 要自己额外装二进制并配好多语言包,PaddleOCR 则要先装推理引擎(第 4 章)。
2.2 安装 EasyOCR
pip install easyocr
你会看到 pip 一口气装几十个包——因为它拖来了 PyTorch(几百 MB)和 OpenCV。第一次装请耐心等,别中途 Ctrl+C。
国内网络慢就换清华源:
pip install easyocr -i https://pypi.tuna.tsinghua.edu.cn/simple
2.3 第一次识别
准备一张含文字截图(如上一章的 test.png),同一目录建 first_ocr.py:
import easyocr
# 第一次运行会自动下载模型(英文 EA + 中文 GB 简体)
reader = easyocr.Reader(['ch_sim', 'en'])
result = reader.readtext('test.png')
for box, text, conf in result:
print(f'{conf:.0%} {text}')
运行:
python first_ocr.py
你会看到(示例):
95% 青蛙编程网
92% frog blog v1.0
87% 部署成功!
第一次跑会比后续慢(要下载模型),之后每次识别也就数秒级。GPU 能加速但不是必需。
模型下载后会缓存在用户目录下的 ~/.EasyOCR/model/,换台电脑或删了虚拟环境才需要重下——所以第一次别急着重装。
2.4 读懂三元组输出
result 每行长这样:
(
[[左上x, 左上y], [右上x, 右上y], [右下x, 右下y], [左下x, 左下y]], # 文字框
'识别出的文字', # 文本
0.953 # 置信度
)
三个字段各有用处:文本拿去用,坐标能还原排版,置信度帮你挑出可疑行。三步玩法:
texts = [t for _, t, _ in result] # 只要文字
boxes = [b for b, _, _ in result] # 只要位置
susp = [r for r in result if r[2] < 0.8] # 低置信度,待人工复核
print('\n'.join(texts))
print(susp)
2.5 把结果存下来
识别出来只是第一步,想让文字能反复用,就落盘成文件:
with open('result.txt', 'w', encoding='utf-8') as f:
f.write('\n'.join(texts))
encoding='utf-8' 一定要写——不然 Windows 上中文会变成乱码,这是新手最常踩的坑之一。
2.6 常见翻车现场
| 报错 / 现象 | 原因 | 修法 |
|---|---|---|
| 下载模型超时 | 网络问题 | 重跑(已下载的会跳过)或挂代理 |
ModuleNotFoundError: torch |
pip 装到系统 Python 了 | 先激活 .venv 再装包 |
| 什么都识别不出 | 图里没有清晰文字 | 换高清一张先验证流程 |
| 中文全是乱码或漏识别 | 语言列表漏了 ch_sim |
Reader(['ch_sim', 'en']) 带上它 |
FileNotFoundError |
路径写错 | 用 os.path.exists('test.png') 先检查 |
2.7 动手改
- 换 3 张不同风格的截图(清晰截图 / 手机拍屏幕 / 天气 App)分别跑一遍
- 用 2.4 的代码打印每段文字的坐标,对照原图看看框得准不准
- 故意把语言列表改成
['en']再跑一次,观察中文是怎么「消失」的
2.8 小结
- EasyOCR 是入门最佳:装完 →
Reader(['ch_sim','en'])→readtext()三连 - 输出 = 坐标框 + 文本 + 置信度,三元组
- 模型首跑要下载并缓存,之后很快
- Python 版本选 3.12 / 3.13,别用 3.15
下一章:EasyOCR:多语言识别 🐸