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): 打印识别结果。
相关推荐
夜幕龙3 分钟前
iDP3复现代码数据预处理全流程(二)——vis_dataset.py
人工智能·python·机器人
CT随6 分钟前
Redis内存碎片详解
java·开发语言
anlog15 分钟前
C#在自定义事件里传递数据
开发语言·c#·自定义事件
奶香臭豆腐28 分钟前
C++ —— 模板类具体化
开发语言·c++·学习
晚夜微雨问海棠呀36 分钟前
长沙景区数据分析项目实现
开发语言·python·信息可视化
graceyun37 分钟前
C语言初阶习题【9】数9的个数
c语言·开发语言
cdut_suye1 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
ONE米球兔1 小时前
OCR(四)windows 环境基于c++的 paddle ocr 编译【GPU版本】
ocr·paddle
dundunmm1 小时前
机器学习之scikit-learn(简称 sklearn)
python·算法·机器学习·scikit-learn·sklearn·分类算法
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(1)
人工智能·python·算法·机器学习·sklearn