计算机视觉P5使用Python、OpenCV和EasyOCR进行文本检测与识别详解
·
使用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()
四、使用注意事项
- 图像路径:
img_path需替换为实际图片的路径(如'test.png'或'./images/ocr.jpg'),若路径错误会导致图像读取失败。 - 语言设置:如需识别其他语言,修改
easyocr.Reader()的参数,例如['ch_sim', 'en']支持中英混合识别。 - 性能优化:若有GPU,将
gpu=False改为gpu=True可显著提高识别速度。 - 阈值调整:根据实际识别效果调整
threshold(如识别结果混乱可提高阈值,漏识别可降低阈值)。
测试结果
文本识别系统

更多推荐
所有评论(0)