[!abstract]
项目需要实现一个识别图片中文字、数字的小功能,因此找了比较好用的开源库 easyocr,本文介绍其使用方法。

EasyOCR 介绍

EasyOCR 是一个可以直接使用的开源项目,目前在 Github 上已经有 20k+ 的 star,支持 80 多种语言的识别,精度非常高。

项目地址:https://github.com/JaidedAI/EasyOCR

EasyOCR 安装

注意:本实验默认在 Ubuntu 上进行测试,Windows 理论上可以同样操作。

(1)环境搭建

为了避免 python 包混乱冲突,一般先创建一个 conda 环境,参考此文章配置 anaconda。

1
conda create -n easyocr python=3.9

(2)安装 PyTorch

EasyOCR 依赖于 PyTorch,因此需要在环境中安装 PyTorch,此处以 1.12 版本为例,其他版本的安装命令可以从此处查看

1
2
conda activate easyocr
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.6 -c pytorch -c conda-forge

(3)安装 EasyOCR

安装 EasyOCR 非常简单,执行以下命令即可

1
pip install easyocr

EasyOCR 基本使用

Easy 使用示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 库
import os
import easyocr
import cv2
import numpy as np

# 1. 获取图像,既可以是在线图像,也可以是本地图像
# IMAGE_PATH = 'https://img.mahaofei.com/img/202401011439226.png'
image_path = './src/digital_recognition/image/digit/2000-1400-Trans.png'

# 2. 识别文字
# reader = easyocr.Reader(['ch_sim','en']) # 要识别的语言,ch_sim是简体中文,en是英文
reader = easyocr.Reader(['en'])
result = reader.readtext(image_path) # 也可以传入opencv的图像对象(numpy数组),detail为0表示只返回识别的文字,为1表示返回识别的文字和位置
print(result)

# 3. 绘制文字矩形框和文字
image = cv2.imread(image_path)
for detection in result:
# 提取文字框坐标和识别结果
(bbox, text, prob) = detection
# 将浮点数坐标转换为整数
bbox = np.array(bbox).astype(int)
# 在图像上绘制矩形框
cv2.rectangle(image, (bbox[0][0], bbox[0][1]), (bbox[2][0], bbox[2][1]), (0, 255, 0), 2)
# 在矩形框左上角绘制文字和置信度
text_position = (bbox[0][0], bbox[0][1] - 20)
confidence_position = (bbox[0][0], bbox[0][1] - 5)
cv2.putText(image, text, text_position, cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
cv2.putText(image, f"Confidence: {prob:.2f}", confidence_position, cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)

# 显示图像
cv2.imshow("OCR Result", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png