Python OCR 图片转文字进阶:读光OCR之行检测模型+行识别模型

Python OCR 图片转文字进阶:读光OCR之行检测模型+行识别模型

介绍

什么是OCR?

OCR是"Optical Character Recognition"的缩写,中文意为"光学字符识别"。它是一种技术,可以识别和转换打印在纸张或图像上的文字和字符为机器可处理的格式,如计算机文本文件。通过使用OCR技术,可以快速地将纸质文档数字化,从而使文本可以被编辑、搜索和分析。这项技术广泛应用于各种场合,如图书馆和档案馆的文献数字化、 pdf 文件的文本搜索、以及扫描文档中的条形码和二维码等。

阿里云文字识别OCR(读光OCR)

阿里云文字识别OCR(读光OCR),是一款由阿里巴巴达摩院打造的OCR产品,用于识别图片、文档、卡证等文件所包含的文字信息。

前置条件

1、准备电脑环境(我当前用的是 4060 显卡)

2、安装环境(conda、python)

3、下载模型(通过下方链接地址下载模型)

模型1:行检测模型
bash 复制代码
https://www.modelscope.cn/models/iic/cv_resnet18_ocr-detection-db-line-level_damo/summary
模型1:行识别模型
bash 复制代码
https://www.modelscope.cn/models/iic/cv_convnextTiny_ocr-recognition-general_damo/summary

代码:main.py

bash 复制代码
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

from PIL import Image, ImageDraw

# 加载行检测模型
ocr_detection = pipeline(Tasks.ocr_detection, model='damo/cv_resnet18_ocr-detection-db-line-level_damo')

# 目标图片路径
pic_path = 'ipp.jpg'
result = ocr_detection(pic_path)
print(result)

# 多边形坐标
polygons = result["polygons"]
fg_name = "cropped_image_"
# 打开图片
image = Image.open(pic_path)

# 创建新图片
cropped_images = []

# 遍历每个多边形
for i, polygon_coords in enumerate(polygons):
    # 获取多边形边界框
    x_min, y_min = min(polygon_coords[::2]), min(polygon_coords[1::2])
    x_max, y_max = max(polygon_coords[::2]), max(polygon_coords[1::2])
    # 根据边界框裁剪图像
    cropped_region = image.crop((x_min, y_min, x_max, y_max))
    # 将裁剪后的图片保存到列表中
    cropped_images.append(cropped_region)

# 保存裁剪后的图片
for i, cropped_image in enumerate(cropped_images):
    cropped_image.save(f"{fg_name}{i}.jpg")

print("图片已成功裁剪并保存。")

# 加载行识别模型
ocr_recognition = pipeline(Tasks.ocr_recognition, model='damo/cv_convnextTiny_ocr-recognition-general_damo')

# 循环识别获取结果
for i, cropped_image in enumerate(cropped_images):
    img_url = f"{fg_name}{i}.jpg"
    result = ocr_recognition(img_url)
    print(result)
  1. from modelscope.pipelines import pipeline: 导入ModelScope的pipeline模块,这个模块允许用户通过配置任务类型和模型来快速构建一个模型管道。
  2. from modelscope.utils.constant import Tasks: 导入ModelScope的常量定义,其中Tasks是一个枚举类型,定义了不同的任务类型。
  3. ocr_detection = pipeline(Tasks.ocr_detection, model='damo/cv_resnet18_ocr-detection-db-line-level_damo'): 创建一个文本检测的管道,使用的是damo/cv_resnet18_ocr-detection-db-line-level_damo这个模型。
  4. pic_path = 'ipp.jpg': 设置要处理的图片的路径。
  5. result = ocr_detection(pic_path): 将图片路径输入到文本检测管道中,得到检测结果。
  6. polygons = result["polygons"]: 从结果中提取多边形坐标,这些坐标代表了文本区域的边界。
  7. image = Image.open(pic_path): 使用Pillow库打开指定的图片。
  8. cropped_images = []: 初始化一个空列表,用于存储裁剪后的图像。
  9. for i, polygon_coords in enumerate(polygons):: 遍历每个文本区域的多边形坐标。
  10. x_min, y_min = min(polygon_coords[::2]), min(polygon_coords[1::2]): 计算每个多边形的最小x和y坐标。
  11. x_max, y_max = max(polygon_coords[::2]), max(polygon_coords[1::2]): 计算每个多边形的最小x和y坐标。
  12. cropped_region = image.crop((x_min, y_min, x_max, y_max)): 根据计算出的边界框裁剪图像。
  13. cropped_images.append(cropped_region): 将裁剪后的图像保存到列表中。
  14. for i, cropped_image in enumerate(cropped_images):: 遍历裁剪后的图像列表。
  15. cropped_image.save(f"{fg_name}{i}.jpg"): 将每个裁剪后的图像保存到文件系统。
  16. print("图片已成功裁剪并保存。"): 打印成功消息。
  17. ocr_recognition = pipeline(Tasks.ocr_recognition, model='damo/cv_convnextTiny_ocr-recognition-general_damo'): 创建一个文本识别的管道,使用的是damo/cv_convnextTiny_ocr-recognition-general_damo这个模型。
  18. for i, cropped_image in enumerate(cropped_images):: 遍历裁剪后的图像列表。
  19. img_url = f"{fg_name}{i}.jpg": 为每个裁剪后的图像创建一个文件路径。
  20. result = ocr_recognition(img_url): 将裁剪后的图像路径输入到文本识别管道中,得到识别结果。
  21. print(result): 打印识别结果。
相关推荐
stm 学习ing5 分钟前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc1 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe2 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin2 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
哭泣的眼泪4082 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
Ysjt | 深2 小时前
C++多线程编程入门教程(优质版)
java·开发语言·jvm·c++
ephemerals__2 小时前
【c++丨STL】list模拟实现(附源码)
开发语言·c++·list
码农飞飞2 小时前
深入理解Rust的模式匹配
开发语言·后端·rust·模式匹配·解构·结构体和枚举