使用Python、OpenCV和EasyOCR进行文本检测与识别详解

一、环境准备:所需库及安装说明

要实现文本检测与识别,需先安装以下库,文档指定了具体版本(确保兼容性):

库名称 版本 作用
easyocr 1.6.2 核心OCR库,用于文本识别
matplotlib 3.6.2 用于图像显示
opencv-python-headless 4.5.4.60 轻量版OpenCV,用于图像处理(无GUI,适合服务器环境)

安装命令解析

pip install easyocr==1.6.2 matplotlib==3.6.2 opencv-python-headless==4.5.4.60 -i https://mirrors.aliyun.com/pypi/simple/
  • -i https://mirrors.aliyun.com/pypi/simple/:使用阿里云镜像源加速下载,解决官方源下载慢的问题。

二、代码分步详解

1. 导入依赖库

import cv2   # OpenCV库,用于图像读取、处理(画框、加文字等)
import easyocr   # EasyOCR库,用于文本识别
import matplotlib.pyplot as plt   # Matplotlib的pyplot模块,用于图像显示

2. 读取图像

img_path = 'Image/test1.png'   # 图像文件路径(需替换为实际图片路径)
img = cv2.imread(img_path)   # 用OpenCV读取图像,返回BGR格式的NumPy数组
  • 注意:OpenCV默认读取图像为BGR格式(蓝-绿-红),而人眼和Matplotlib默认使用RGB格式,后续显示时需转换。

3. 初始化EasyOCR识别器

# 创建文本检测系统实例,['en']表示只识别英文;gpu=False表示使用CPU(若有GPU且配置正确,可设为True加速)
reader = easyocr.Reader(['en'], gpu=False)
  • EasyOCR支持多语言识别,例如识别中文可改为['ch_sim', 'en'](中文简体+英文)。
  • GPU加速需满足:安装对应版本的CUDA和cuDNN,且EasyOCR编译时支持GPU。

4. 识别图像中的文本

text_ = reader.readtext(img)   # 对图像执行OCR识别,返回识别结果列表
  • 返回结果text_的结构:每个元素是一个元组(bbox, text, score),其中:
    • bbox:文本区域的边界框坐标,格式为[[x1,y1], [x2,y2], [x3,y3], [x4,y4]](四边形的四个顶点)。
    • text:识别出的文本内容。
    • score:识别置信度(0~1,越高越可靠)。

5. 过滤低置信度结果并标记文本

threshold = 0.25   # 置信度阈值,过滤低于该值的识别结果(可根据需求调整)

for t in text_:   # 遍历所有识别结果
    print(t[1])   # 打印识别到的文本内容
    bbox, text, score = t   # 解包边界框、文本、置信度
    
    if score > threshold:   # 只处理置信度高于阈值的结果
        # 画矩形框:参数为图像、左上角坐标(bbox[0])、右下角坐标(bbox[2])、颜色(0,255,0=绿色)、线宽2
        cv2.rectangle(img, bbox[0], bbox[2], (0,255,0), 2)
        
        # 在矩形框左上角添加文本:参数为图像、文本内容、坐标、字体、大小0.8、颜色(0,0,255=红色)、线宽4
        cv2.putText(img, text, bbox[0], cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,0,255), 4)
  • 阈值threshold的作用:剔除误识别(如将背景识别为文本)的结果,提高准确性。
  • 颜色参数说明:OpenCV中颜色为BGR格式,因此(0,255,0)是绿色(G=255),(0,0,255)是红色(R=255)。

6. 显示处理后的图像

# 转换图像格式:将OpenCV的BGR格式转为Matplotlib的RGB格式(否则颜色会偏差)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()   # 显示图像(在非交互环境中必须调用,否则图像不显示)
  • 关键说明:Matplotlib默认期望RGB格式图像,而OpenCV读取的是BGR格式,若不转换(cv2.COLOR_BGR2RGB),图像会出现蓝色和红色颠倒的问题。

三、完整代码

# 导入依赖库
import cv2
import easyocr
import matplotlib.pyplot as plt

# 读取图像(替换为实际图像路径)
img_path = 'Image/test1.png'
img = cv2.imread(img_path)

# 初始化EasyOCR识别器(识别英文,使用CPU)
reader = easyocr.Reader(['en'], gpu=False)

# 执行OCR识别
text_ = reader.readtext(img)

# 设置置信度阈值
threshold = 0.25

# 遍历识别结果,标记文本并过滤低置信度结果
for t in text_:
    print(t[1])  # 打印识别文本
    bbox, text, score = t
    if score > threshold:
        # 绘制文本区域矩形框
        cv2.rectangle(img, bbox[0], bbox[2], (0, 255, 0), 2)
        # 在矩形框左上角添加文本
        cv2.putText(img, text, bbox[0], cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 4)

# 转换图像格式并显示
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

四、使用注意事项

  1. 图像路径:img_path需替换为实际图片的路径(如'test.png''./images/ocr.jpg'),若路径错误会导致图像读取失败。
  2. 语言设置:如需识别其他语言,修改easyocr.Reader()的参数,例如['ch_sim', 'en']支持中英混合识别。
  3. 性能优化:若有GPU,将gpu=False改为gpu=True可显著提高识别速度。
  4. 阈值调整:根据实际识别效果调整threshold(如识别结果混乱可提高阈值,漏识别可降低阈值)。

测试结果

文本识别系统

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐