首页Python【Python计算生态】E...

【Python计算生态】EasyOCR——基于深度学习的OCR库

Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。

本系列将会陆续整理分享一些有趣、有用的第三方库。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_Ecosystem





01
简介

EasyOCR是一个功能强大且易于使用的Python开源OCR库,用于从图像中提取文本,它支持80多种语言,包括中文、英文、法语、德语等。
官方文档地址:
https://github.com/JaidedAI/EasyOCR
官方Demo网站:
https://www.jaided.ai/easyocr/
安装的话可以直接使用pip安装:
pip install easyocr

需要注意的是,EasyOCR是一个基于深度学习的OCR,其内部使用PyTorch来构建和训练神经网络模型,从而实现对图像中文字的识别。因此,在使用EasyOCR之前,需要先安装PyTorch

关于PyTorch的安装可以参看之前发布的文章:

【深度学习(PyTorch篇)】1.PyTorch开发环境准备


02
使用

以下是一个使用 EasyOCR 来识别图像中的文本的基本步骤:
  • 导入 easyocr 库。
  • 初始化一个 Reader 对象,并指定了要识别的语言。该语句用于将模型加载到内存中,此时将自动下载所选语言的模型权重并将其放入“~/.EasyOCR/model “文件夹中(也可以从模型中心手动下载并将其放入相应文件夹中),因此初次运行时需要一些时间,但只需运行一次。
  • 读取图像文件,也可以传递 OpenCV 图像对象(numpy 数组)或图像文件字节,而不是文件路。
  • 使用 readtext 方法对图片进行OCR。输出结果将以列表形式显示,每个项目分别代表一个边界框坐标、检测到的文本和置信度。
import easyocr

# 初始化 OCR 读取器,指定读取的语言,例如 'ch_sim' 表示简体中文,'en' 表示英文
reader = easyocr.Reader(['ch_sim''en '])

# 读取图像文件
image_path = 'path_to_your_image.jpg'

# 使用 OCR 识别图像中的文本
result = reader.readtext(image_path)
另外,还可以设置 detail=0 以获得更简单的输出。此时,结果将只返回检测到的文本内容。
reader.readtext('chinese.jpg', detail = 0)
如果电脑没有 GPU 或 GPU 内存不足,可以通过添加 gpu=False 以纯 CPU 模式运行模型。
reader = easyocr.Reader(['ch_sim','en'], gpu=False)

03
示例

以下是一个使用easyocr 库进行图片中文本识别,并根据返回的边界框、文本结果在原始图像上进行标注的示例代码:

另外,由于本次识别的图像中包含中文文本,但是使用更方便的OpenCV库中的 cv2.putText()函数不支持中文,因此本次将使用 PIL库 来标注。

from PIL import Image, ImageDraw, ImageFont
import easyocr

# 使用EasyOCR进行识别
reader = easyocr.Reader(['ch_sim''en'])
result = reader.readtext('test.jpg')

# 打开原始图像
image = Image.open('test.jpg')

# 创建一个可以在给定图像上绘图的对象
draw = ImageDraw.Draw(image)

font_path = 'simhei.ttf'# 中文字体文件路径
font = ImageFont.truetype(font_path, 30)  # 字体大小为30

# 遍历识别结果,绘制每个文本区域的边界框和文本内容
for (bbox, text, prob) in result:
    # bbox 是一个包含四个坐标的列表 [x1, y1, x2, y2]
    # text 是识别出的文本
    # prob 是识别出文本的概率
    top_left = bbox[0]
    bottom_right = bbox[2]
    
    # 绘制边界框
    draw.rectangle([(top_left[0], top_left[1]), (bottom_right[0], bottom_right[1])], outline=(0, 255, 0), width=2)
    
    # 绘制文本内容
    text_x = top_left[0]
    text_y = top_left[1] - 15  # 5 pixels above the top of the box
    draw.text((text_x, text_y), text, font=font, fill=(255, 0, 0))

# 保存绘制后的图像
image.save('annotated_test.jpg')

# 显示图像
image

识别及标注结果如下图所示:




本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments