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 分钟前
GO语言学习(16)Gin后端框架
开发语言·笔记·学习·golang·gin
落榜程序员6 分钟前
Java 基础-29-final关键字-详解
java·开发语言
JavaPub-rodert26 分钟前
一道go面试题
开发语言·后端·golang
6<729 分钟前
【go】静态类型与动态类型
开发语言·后端·golang
带娃的IT创业者1 小时前
《Python实战进阶》No39:模型部署——TensorFlow Serving 与 ONNX
pytorch·python·tensorflow·持续部署
Bruce-li__1 小时前
深入理解Python asyncio:从入门到实战,掌握异步编程精髓
网络·数据库·python
九月镇灵将2 小时前
6.git项目实现变更拉取与上传
git·python·scrapy·scrapyd·gitpython·gerapy
车载小杜2 小时前
基于指针的线程池
开发语言·c++
沐知全栈开发2 小时前
Servlet 点击计数器
开发语言
m0Java门徒2 小时前
Java 递归全解析:从原理到优化的实战指南
java·开发语言