跳到主要内容
EasyOCR 入门指南:Python 开源 OCR 工具使用与实战 | 极客日志
Python AI 算法
EasyOCR 入门指南:Python 开源 OCR 工具使用与实战 EasyOCR 是一款基于深度学习的 Python 开源 OCR 库,支持 80 多种语言识别。安装需配置 Python 环境及 PyTorch 依赖,可通过 pip 一键完成。核心 API 简洁,初始化 Reader 后调用 readtext 即可提取图片文字。适用场景涵盖证件信息提取、PDF 批量处理及实时截图识别。常见问题包括精度低、速度慢及安装冲突,可通过调整对比度参数、开启 GPU 加速或指定镜像源解决。该工具无需深厚视觉知识,适合个人及企业快速集成图文识别功能。
随缘 发布于 2026/3/26 更新于 2026/4/25 4 浏览EasyOCR 入门指南:Python 开源 OCR 工具使用与实战
在日常开发与办公场景中,图文识别(OCR)需求无处不在——比如提取图片中的文字、识别身份证/发票信息、批量处理扫描件等。传统 OCR 工具要么收费高昂,要么配置复杂,而 EasyOCR 作为 Python 开源 OCR 库,凭借'安装简单、支持多语言、识别精度高'的优势,成为入门级 OCR 开发的首选工具。
本文将从核心特性、环境搭建、基础用法到实战场景,全方位解析 EasyOCR 的使用技巧,帮你快速实现图文识别功能,无需深厚的计算机视觉知识。
一、为什么选择 EasyOCR?
在众多 OCR 工具中,EasyOCR 的核心优势在于'轻量化 + 高性价比',具体体现在:
零门槛上手 :API 设计简洁,一行代码即可实现文字识别,无需复杂配置;
多语言支持 :默认支持 80+ 种语言(中文、英文、日文、韩文等),可通过参数灵活切换;
识别精度高 :基于深度学习模型(CNN+RNN),对印刷体、清晰手写体、截图文字均有较好识别效果;
无额外依赖 :底层依赖 OpenCV 和 PyTorch,但安装过程自动处理,无需手动配置;
开源免费 :完全免费商用,无需支付授权费用,适合个人开发与企业项目。
适用场景:
图片文字提取(如截图、海报、书籍扫描件);
证件识别(身份证、银行卡、营业执照关键信息提取);
批量文档处理(扫描件转文字、PDF 图片页提取文字);
自动化办公(自动识别发票金额、快递单号);
移动端/桌面端 OCR 工具开发(结合 PyQt、Flask 等框架)。
二、环境搭建:5 分钟完成安装
EasyOCR 的安装依赖 Python 环境(3.7+),且需安装 PyTorch(深度学习框架)和 OpenCV(图像处理),推荐通过 pip 一键安装。
1. 基础环境要求
Python 版本:3.7 ~ 3.10(过高版本可能不兼容部分依赖);
操作系统:Windows、macOS、Linux 均支持(Windows 需提前安装 Visual C++ Redistributable)。
2. 安装步骤
步骤 1:安装 PyTorch(核心依赖)
PyTorch 是 EasyOCR 的深度学习底层框架,需根据操作系统和显卡配置选择安装命令:
GPU 版本 (有 NVIDIA 显卡,加速识别):
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
需先安装 NVIDIA 驱动和 CUDA(推荐 11.8 版本)。
CPU 版本 (无 NVIDIA 显卡,通用):
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu
提示:GPU 版本可大幅提升识别速度(尤其是批量处理时),无显卡则用 CPU 版本即可(单张图片识别耗时约 1~3 秒)。
步骤 2:安装 EasyOCR
pip install easyocr
安装完成后,可通过以下命令验证是否成功:
import easyocr
print (easyocr.__version__)
3. 语言模型自动下载 EasyOCR 首次使用时,会自动下载对应语言的识别模型(约几十 MB~几百 MB),默认支持'英文 + 中文'模型。若需识别其他语言,可在初始化时指定,模型会自动下载。
三、基础用法:3 行代码实现文字识别 EasyOCR 的 API 极其简洁,核心流程为:初始化识别器 → 加载图片 → 执行识别,以下是最基础的文字识别示例。
1. 单张图片文字识别(中文 + 英文) import easyocr
reader = easyocr.Reader(['ch_sim' , 'en' ], gpu=False )
result = reader.readtext('test.jpg' )
for detection in result:
bbox, text, confidence = detection
print (f"识别文字:{text} ,置信度:{confidence:.2 f} " )
代码说明:
Reader() 参数:
第一个参数为语言列表,ch_sim 表示简体中文,en 表示英文,其他语言代码可参考 EasyOCR 官方文档;
gpu=False:关闭 GPU 加速(无显卡时必须设为 False),有显卡则设为 True。
识别结果 result 是列表,每个元素包含 3 个值:
bbox:文字的边界框坐标(左上、右上、右下、左下),格式为 [(x1,y1), (x2,y2), (x3,y3), (x4,y4)];
text:识别出的文字内容;
confidence:识别置信度(0~1),可用于过滤低精度结果。
2. 关键参数调整(提升识别效果) readtext() 方法支持多个参数,可根据图片质量调整,核心参数如下:
result = reader.readtext(
'test.jpg' ,
detail=1 ,
paragraph=False ,
min_size=10 ,
contrast_ths=0.1 ,
adjust_contrast=0.5 ,
filter_ths=0.01
)
实用示例:仅输出文字(不显示边界框和置信度) result = reader.readtext('test.jpg' , detail=0 )
print ("识别结果:" , ' ' .join([r[1 ] for r in result]))
3. 批量识别多张图片 import easyocr
import os
reader = easyocr.Reader(['ch_sim' , 'en' ], gpu=False )
image_dir = 'images/'
for filename in os.listdir(image_dir):
if filename.endswith(('.jpg' , '.png' , '.jpeg' )):
image_path = os.path.join(image_dir, filename)
result = reader.readtext(image_path, detail=0 )
print (f"【{filename} 】识别结果:" , ' ' .join([r[1 ] for r in result]))
四、实战场景:覆盖 4 大核心需求
案例 1:识别图片中的中文 + 英文混合文字 场景 :提取海报中的宣传文字(包含中文、英文和数字)。
图片示例: 海报内容包含'2025 新品上市 | New Product Launch'。
代码实现: import easyocr
reader = easyocr.Reader(['ch_sim' , 'en' ], gpu=False )
result = reader.readtext('poster.jpg' , detail=0 )
print ("海报文字提取:" , ' ' .join([r[1 ] for r in result]))
输出结果: 海报文字提取:2025 新品上市 New Product Launch
案例 2:身份证关键信息提取(姓名、身份证号) 场景 :识别身份证正反面的姓名、性别、民族、身份证号等关键信息,过滤无关文字。
实现思路:
识别身份证图片中的所有文字;
根据关键词(如'姓名''性别''公民身份号码')匹配对应值;
利用正则表达式提取身份证号(18 位数字 + 字母)。
代码实现: import easyocr
import re
def extract_id_card_info (image_path ):
reader = easyocr.Reader(['ch_sim' ], gpu=False )
texts = [item[1 ] for item in reader.readtext(image_path, detail=0 )]
text = ' ' .join(texts)
info = {}
name_match = re.search(r'姓名\s*([^\s]+)' , text)
if name_match:
info['姓名' ] = name_match.group(1 )
gender_match = re.search(r'性别\s*([男女])' , text)
if gender_match:
info['性别' ] = gender_match.group(1 )
id_match = re.search(r'([1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|30[1-9])\d{3}[\dXx])' , text)
if id_match:
info['身份证号' ] = id_match.group(1 )
return info
id_info = extract_id_card_info('id_card.jpg' )
print ("身份证信息提取:" , id_info)
输出结果: 身份证信息提取: {'姓名' : '张三' , '性别' : '男' , '身份证号' : '110101199001011234' }
案例 3:批量处理 PDF 图片页(提取文字) 场景 :PDF 文件由扫描件生成(无原生文字),需先将 PDF 转为图片,再用 EasyOCR 提取文字。
前置依赖:
Windows 系统需额外安装 Poppler,并配置环境变量;
macOS 系统:brew install poppler;
Linux 系统:sudo apt-get install poppler-utils。
代码实现: import easyocr
from pdf2image import convert_from_path
import os
def pdf_to_text (pdf_path, output_txt_path ):
images = convert_from_path(pdf_path, dpi=300 )
reader = easyocr.Reader(['ch_sim' , 'en' ], gpu=False )
with open (output_txt_path, 'w' , encoding='utf-8' ) as f:
for page_num, image in enumerate (images, 1 ):
f.write(f"=== 第{page_num} 页 ===\n" )
result = reader.readtext(image, detail=0 , paragraph=True )
f.write('\n' .join([r[1 ] for r in result]) + '\n\n' )
print (f"PDF 文字提取完成,保存至:{output_txt_path} " )
案例 4:实时截图识别(Windows/macOS) 场景 :截图当前屏幕指定区域,快速提取文字(如提取视频中的字幕、网页中的不可复制文字)。
前置依赖:
代码实现: import easyocr
import mss
import cv2
import numpy as np
def capture_and_ocr (monitor_num=1 ):
with mss.mss() as sct:
monitor = sct.monitors[monitor_num]
img = sct.grab(monitor)
img_np = np.array(img)
img_bgr = cv2.cvtColor(img_np, cv2.COLOR_RGBA2BGR)
reader = easyocr.Reader(['ch_sim' , 'en' ], gpu=False )
result = reader.readtext(img_bgr, detail=0 )
cv2.imshow('Screenshot' , img_bgr)
print ("截图识别结果:" , ' ' .join([r[1 ] for r in result]))
cv2.waitKey(0 )
cv2.destroyAllWindows()
执行效果:
自动捕获主屏幕截图;
弹出截图预览窗口;
控制台输出识别到的文字。
五、避坑指南:常见问题与解决方案
1. 识别精度低(文字识别错误、漏识别)
原因:
图片模糊、对比度低;
文字太小或有遮挡;
语言模型选择错误(如识别繁体中文用了简体模型)。
解决方案:
提升图片质量:放大图片、调整对比度(通过 adjust_contrast 参数);
过滤小尺寸文字:设置 min_size=15(根据实际文字大小调整);
选择正确的语言模型:识别繁体中文用 'ch_tra',日文用 'ja',韩文用 'ko';
分割图片:将长图按文字区域分割后逐块识别。
2. 识别速度慢(单张图片耗时超 5 秒)
原因:
未使用 GPU 加速(CPU 版本速度较慢);
图片分辨率过高(如 4K 图片);
批量识别时未优化循环逻辑。
解决方案:
有 NVIDIA 显卡则开启 GPU 加速(gpu=True);
缩小图片尺寸:通过 OpenCV 压缩图片(如 cv2.resize(img, (800, 600)));
批量识别时复用识别器(避免每次识别都初始化 Reader(),初始化一次即可)。
3. 安装失败(依赖冲突、缺少依赖)
问题 1:Windows 系统提示'找不到 Visual C++ Redistributable' 解决方案:安装 Visual C++ Redistributable for Visual Studio 2015-2022。
问题 2:安装 PyTorch 时超时 pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
问题 3:导入 easyocr 时提示'ImportError: libGL.so.1: cannot open shared object file'(Linux 系统) sudo apt-get install libgl1-mesa-glx
4. 中文乱码(识别结果显示问号'?')
原因:
输出终端不支持 UTF-8 编码;
写入文件时未指定编码为 utf-8。
解决方案:
终端编码设置为 UTF-8(Windows 终端可通过 chcp 65001 切换);
写入文件时明确指定编码:open('output.txt', 'w', encoding='utf-8')。
六、总结:开源 OCR 的最佳入门选择 EasyOCR 的核心价值在于'降低 OCR 开发门槛'——无需掌握复杂的深度学习算法,仅需几行 Python 代码即可实现高质量的文字识别。无论是个人日常使用(如提取图片文字),还是企业级项目开发(如证件识别、批量文档处理),它都能满足需求。
优先开启 GPU 加速(有显卡时),提升识别速度;
根据图片质量调整 adjust_contrast、min_size 等参数,优化识别精度;
批量处理时复用识别器,避免重复初始化;
复杂场景(如证件识别)需结合正则表达式过滤关键信息,提升实用性。
如果需要更高的识别精度(如手写体、复杂场景文字),可考虑商业 OCR 接口(如百度 OCR、阿里云 OCR),但对于大部分基础场景,EasyOCR 完全足够,且无需支付任何费用。
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
随机西班牙地址生成器 随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
Gemini 图片去水印 基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online