跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI算法

EasyOCR Python 开源 OCR 工具实战指南

EasyOCR 是 Python 开源 OCR 库,支持多语言高精度识别。内容涵盖环境搭建、基础 API 调用、身份证与 PDF 批量处理实战,以及 GPU 加速配置和常见报错解决。适合希望快速集成文字识别功能的开发者参考。

黑客帝国发布于 2026/3/16更新于 2026/4/272 浏览

在日常开发与办公场景中,图文识别(OCR)需求无处不在——比如提取图片中的文字、识别身份证或发票信息、批量处理扫描件等。传统 OCR 工具要么收费高昂,要么配置复杂,而 EasyOCR 作为 Python 开源 OCR 库,凭借安装简单、支持多语言、识别精度高等优势,成为入门级 OCR 开发的首选。

本文将从核心特性、环境搭建、基础用法到实战场景,全方位解析 EasyOCR 的使用技巧,帮你快速实现图文识别功能,无需深厚的计算机视觉知识。

一、为什么选择 EasyOCR?

在众多 OCR 工具中,EasyOCR 的核心优势在于轻量化和高性价比,具体体现在:

  1. 零门槛上手:API 设计简洁,几行代码即可实现文字识别,无需复杂配置;
  2. 多语言支持:默认支持 80+ 种语言(中文、英文、日文、韩文等),可通过参数灵活切换;
  3. 识别精度高:基于深度学习模型(CNN+RNN),对印刷体、清晰手写体、截图文字均有较好识别效果;
  4. 无额外依赖:底层依赖 OpenCV 和 PyTorch,但安装过程自动处理,无需手动配置;
  5. 开源免费:完全免费商用,无需支付授权费用,适合个人开发与企业项目。
适用场景:
  • 图片文字提取(如截图、海报、书籍扫描件);
  • 证件识别(身份证、银行卡、营业执照关键信息提取);
  • 批量文档处理(扫描件转文字、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__) # 输出版本号即成功(如 1.7.1)
3. 语言模型自动下载

EasyOCR 首次使用时,会自动下载对应语言的识别模型(约几十 MB~几百 MB),默认支持'英文 + 中文'模型。若需识别其他语言,可在初始化时指定,模型会自动下载。

三、基础用法:3 行代码实现文字识别

EasyOCR 的 API 极其简洁,核心流程为:初始化识别器 → 加载图片 → 执行识别,以下是最基础的文字识别示例。

1. 单张图片文字识别(中文 + 英文)
import easyocr

# 1. 初始化识别器(指定语言,默认中文 + 英文:['ch_sim', 'en'])
reader = easyocr.Reader(['ch_sim', 'en'], gpu=False) 
# gpu=True 表示使用 GPU 加速

# 2. 识别图片(支持本地路径、网络图片 URL)
result = reader.readtext('test.jpg') # 本地图片路径
# result = reader.readtext('https://example.com/text-image.png') # 网络图片

# 3. 输出识别结果
for detection in result:
    bbox, text, confidence = detection # 边界框、识别文字、置信度(0~1,越接近 1 越准确)
    print(f"识别文字:{text},置信度:{confidence:.2f}")
代码说明:
  • Reader() 参数:
    • 第一个参数为语言列表,ch_sim 表示简体中文,en 表示英文,其他语言代码可参考官方文档;
    • 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,           # 输出详细信息(1=包含边界框和置信度,0=仅输出文字)
    paragraph=False,    # 是否合并段落(True=合并相邻文字为段落,False=分开输出)
    min_size=10,        # 最小识别文字尺寸(过滤过小的噪点文字)
    contrast_ths=0.1,   # 对比度阈值(调整以适应模糊图片)
    adjust_contrast=0.5,# 对比度调整系数(增强模糊图片的识别效果)
    filter_ths=0.01     # 置信度过滤阈值(仅保留置信度>0.01 的结果)
)
实用示例:仅输出文字(不显示边界框和置信度)
result = reader.readtext('test.jpg', detail=0)
print("识别结果:", ' '.join(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(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(result))
输出结果:
海报文字提取:2025 新品上市 New Product Launch
案例 2:身份证关键信息提取(姓名、身份证号)

场景:识别身份证正反面的姓名、性别、民族、身份证号等关键信息,过滤无关文字。

实现思路:
  1. 识别身份证图片中的所有文字;
  2. 根据关键词(如'姓名''性别''公民身份号码')匹配对应值;
  3. 利用正则表达式提取身份证号(18 位数字 + 字母)。
代码实现:
import easyocr
import re

def extract_id_card_info(image_path):
    reader = easyocr.Reader(['ch_sim'], gpu=False)
    # 获取所有识别文字并拼接成字符串
    raw_text = ' '.join(reader.readtext(image_path, detail=0))
    
    # 提取关键信息
    info = {}
    
    # 姓名(匹配'姓名'后到下一个关键词前的内容)
    name_match = re.search(r'姓名\s*([^限民族身份])', raw_text)
    if name_match:
        info['姓名'] = name_match.group(1)
    
    # 性别
    gender_match = re.search(r'性别\s*([男女])', raw_text)
    if gender_match:
        info['性别'] = gender_match.group(1)
    
    # 身份证号(18 位,支持最后一位为 X)
    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|3[01])\d{3}[\dXx])', raw_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 提取文字。

前置依赖:

安装 PDF 转图片库 pdf2image:

pip install pdf2image
  • 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):
    # 1. PDF 转为图片(每页一张图)
    images = convert_from_path(pdf_path, dpi=300) # dpi 越高,图片越清晰,识别效果越好
    
    # 2. 初始化 OCR 识别器
    reader = easyocr.Reader(['ch_sim', 'en'], gpu=False)
    
    # 3. 逐页识别并写入文本文件
    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) # paragraph=True 合并段落
            f.write('\n'.join(result) + '\n\n')
            
    print(f"PDF 文字提取完成,保存至:{output_txt_path}")

# 测试
pdf_to_text('scan_document.pdf', 'output.txt')
案例 4:实时截图识别(Windows/macOS)

场景:截图当前屏幕指定区域,快速提取文字(如提取视频中的字幕、网页中的不可复制文字)。

前置依赖:

安装截图库 mss(跨平台支持):

pip install mss
代码实现:
import easyocr
import mss
import cv2
import numpy as np

def capture_and_ocr(monitor_num=1):
    # 1. 截图屏幕(monitor_num=1 表示主屏幕,0 表示所有屏幕)
    with mss.mss() as sct:
        monitor = sct.monitors[monitor_num]
        # 捕获整个屏幕(可自定义区域:monitor={'top': 100, 'left': 100, 'width': 800, 'height': 600})
        img = sct.grab(monitor)
        
        # 转换为 OpenCV 格式(BGR)
        img_np = np.array(img)
        img_bgr = cv2.cvtColor(img_np, cv2.COLOR_RGBA2BGR)
        
        # 2. OCR 识别
        reader = easyocr.Reader(['ch_sim', 'en'], gpu=False)
        result = reader.readtext(img_bgr, detail=0)
        
        # 3. 显示截图和识别结果
        cv2.imshow('Screenshot', img_bgr)
        print("截图识别结果:", ' '.join(result))
        
        # 等待按键关闭窗口
        cv2.waitKey(0)
        cv2.destroyAllWindows()

# 测试
capture_and_ocr()
执行效果:
  • 自动捕获主屏幕截图;
  • 弹出截图预览窗口;
  • 控制台输出识别到的文字。

五、避坑指南:常见问题与解决方案

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 代码即可实现高质量的文字识别。无论是个人日常使用(如提取图片文字),还是企业级项目开发(如证件识别、批量文档处理),它都能满足需求。

使用时需牢记:

  1. 优先开启 GPU 加速(有显卡时),提升识别速度;
  2. 根据图片质量调整 adjust_contrast、min_size 等参数,优化识别精度;
  3. 批量处理时复用识别器,避免重复初始化;
  4. 复杂场景(如证件识别)需结合正则表达式过滤关键信息,提升实用性。

如果需要更高的识别精度(如手写体、复杂场景文字),可考虑商业 OCR 接口(如百度 OCR、阿里云 OCR),但对于大部分基础场景,EasyOCR 完全足够,且无需支付任何费用。动手尝试,解锁图文识别的高效玩法吧!

目录

  1. 一、为什么选择 EasyOCR?
  2. 适用场景:
  3. 二、环境搭建:5 分钟完成安装
  4. 1. 基础环境要求
  5. 2. 安装步骤
  6. 步骤 1:安装 PyTorch(核心依赖)
  7. 步骤 2:安装 EasyOCR
  8. 3. 语言模型自动下载
  9. 三、基础用法:3 行代码实现文字识别
  10. 1. 单张图片文字识别(中文 + 英文)
  11. 1. 初始化识别器(指定语言,默认中文 + 英文:['ch_sim', 'en'])
  12. gpu=True 表示使用 GPU 加速
  13. 2. 识别图片(支持本地路径、网络图片 URL)
  14. result = reader.readtext('https://example.com/text-image.png') # 网络图片
  15. 3. 输出识别结果
  16. 代码说明:
  17. 2. 关键参数调整(提升识别效果)
  18. 实用示例:仅输出文字(不显示边界框和置信度)
  19. 3. 批量识别多张图片
  20. 遍历目录下所有图片文件
  21. 四、实战场景:覆盖 4 大核心需求
  22. 案例 1:识别图片中的中文 + 英文混合文字
  23. 图片示例:
  24. 代码实现:
  25. 输出结果:
  26. 案例 2:身份证关键信息提取(姓名、身份证号)
  27. 实现思路:
  28. 代码实现:
  29. 测试
  30. 输出结果:
  31. 案例 3:批量处理 PDF 图片页(提取文字)
  32. 前置依赖:
  33. 代码实现:
  34. 测试
  35. 案例 4:实时截图识别(Windows/macOS)
  36. 前置依赖:
  37. 代码实现:
  38. 测试
  39. 执行效果:
  40. 五、避坑指南:常见问题与解决方案
  41. 1. 识别精度低(文字识别错误、漏识别)
  42. 原因:
  43. 解决方案:
  44. 2. 识别速度慢(单张图片耗时超 5 秒)
  45. 原因:
  46. 解决方案:
  47. 3. 安装失败(依赖冲突、缺少依赖)
  48. 问题 1:Windows 系统提示“找不到 Visual C++ Redistributable”
  49. 问题 2:安装 PyTorch 时超时
  50. 问题 3:导入 easyocr 时提示“ImportError: libGL.so.1: cannot open shared object file”(Linux 系统)
  51. 4. 中文乱码(识别结果显示问号“?”)
  52. 原因:
  53. 解决方案:
  54. 六、总结:开源 OCR 的最佳入门选择
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 飞算 JavaAI:从需求到源码的一小时实战指南
  • GitHub Copilot 完整使用指南:从安装配置到高级技巧
  • 无人机遥感滑坡与泥石流图像识别数据集
  • AIGC 结合 Photoshop 实现 Spine 2D 角色拆件与补图高效工作流
  • GitHub 使用指南:环境配置与版本控制流程
  • 循环神经网络 RNN 与序列数据处理实战
  • 前端表格性能优化:虚拟滚动实现百万级数据流畅渲染
  • Python 网站开发框架大全:主流 Web 框架优缺点对比与选型指南
  • 扩散模型原理与图像生成实战
  • 使用 LLaMA-Factory 微调 Qwen3 模型流程与评估
  • 基于 Vue3 的大文件分片加密上传与断点续传方案
  • 2026 年 3 月全球 AI 前沿动态与技术突破
  • GenSE:基于分层建模的生成式语音增强语言模型方法
  • Sam Altman:超级人工智能将在几年后诞生
  • C++ 搜索引擎 Searcher 模块:正倒排索引与 Boost 实现
  • 人工智能常见面试题及答案汇总
  • RK3588 MIPI 摄像头采集与 WebRTC 低延迟推流实战
  • 十个实用的 Python 自动化脚本
  • 大厂 Git 提交规范实践指南
  • GitHub Copilot 学生身份认证教程(非校园网)

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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