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

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

  • 介绍
      • 阿里云文字识别OCR(读光OCR)
      • 前置条件
        • 模型1:行检测模型
        • 模型1:行识别模型
      • 代码:main.py

介绍

什么是OCR?

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

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

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

前置条件

1、准备电脑环境(我当前用的是 4060 显卡)
2、安装环境(conda、python)
3、下载模型(通过下方链接地址下载模型)

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

代码:main.py

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasksfrom 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): 打印识别结果。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

德人合科技——@天锐绿盾 | -文档透明加密系统

天锐绿盾文档透明加密系统是一种先进的数据安全解决方案,旨在保护企业和组织的敏感信息,防止未经授权的访问和泄漏。 PC地址: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是该系统的一些关键特点和功…

[C++11/14新特性] tuple元组介绍

C11 标准新引入了一种类模板,命名为 tuple(中文可直译为元组)。tuple 最大的特点是:实例化的对象可以存储任意数量、任意类型的数据。tuple 的应用场景很广泛,例如当需要存储多个不同类型的元素时,可以使用…

3D目标检测入门:探索OpenPCDet框架

前言 在自动驾驶和机器人视觉这两个飞速发展的领域中,3D目标检测技术扮演着核心角色。随着深度学习技术的突破性进展,3D目标检测算法的研究和应用正日益深入。OpenPCDet,这个由香港中文大学OpenMMLab实验室精心打造的开源工具箱,…

【用Python画画】六一儿童节画爱心

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、代码示例三、知识点梳理四、总结 一、前言 本文介绍如何使用Python的海龟画图工具turtle&#xf…

堆排序的实现

在上一篇博客中,介绍了堆的实现,现在来介绍一下堆排序。 一.打印有序: 现在先给一个无序的数组,现在我们利用我们实现的堆的功能先完成一下打印排序: 在for循环里是一个建堆的过程,每来一个数据就放入堆中…

linux进程的加载和启动过程分析

我们的源代码通过预处理,编译,汇编,链接后形成可执行文件,那么当我们在终端敲下指令$ ./a.out argv1 argv2 后,操作系统是怎么将我们的可执行文件加载并运行的呢? 首先知道,计算机的操作系统的启动程序是写死在硬件上的,每次计算机上电时,都将自动加载启动程序,之后…

python第五次作业

1.请实现一个装饰器,每次调用函数时,将函数名字以及调用此函数的时间点写入文件中 # 导入datetime模块,用于获取当前时间并格式化输出 import datetime# 定义一个装饰器工厂函数log_funcName_time,它接受一个参数time def log_fu…

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中应用

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中的应用 由北京海特伟业科技有限公司任洪卓发布于2024年6月1日 红外语音听力广播(即红外听力教学考试系统)在英语四六级听力考试的应用正日益凸显出其重要性和优越性。在当前的高等教育…

xcode删除依赖包package,删除不必要的依赖项

点击项目,然后点击PROJECT项里面的Package DepenDependencies: 选中一个依赖项,然后点击减号,就可以把依赖项删除掉了,左侧项目下面的Package已经没有了这个依赖项 TARGET下面的package也要删除:在这里删除…

大数据分析统计

大数据分析统计 from datetime import datetimeimport pandas as pd import matplotlib.pyplot as pltpm25files [PM2.5_2021.csv, PM2.5_2022.csv, PM2.5_2023.csv] pm10files [PM10_2021.csv, PM10_2022.csv, PM10_2023.csv]def read_csv_file(files):# 每个文件都有表头…

C++之类(class)的三种成员修饰符(public、private、protected)总结

1、背景介绍 在C中,类(class)中成员的三种访问修饰符(access specifiers)用于控制类的成员(属性和方法)的访问权限。这些修饰符决定了类成员在类的外部和内部是否可以被访问。以下是这三种访问…

macOS上编译android的ffmpeg及ffmpeg.c

1 前言 前段时间介绍过使用xcode和qt creator编译调试ffmepg.c,运行平台是在macOS上,本文拟介绍下android平台如何用NDK编译链编译ffmepg库并使用。 macOS上使用qt creator编译调试ffmpeg.c macOS上将ffmpeg.c编译成Framework 大体思路: 其…

信息学奥赛初赛天天练-18-挑战程序阅读-最长公共子序列、字符串与数组越界的巧妙应用

PDF文档公众号回复关键字:20240601 1 2023 CSP-J 阅读程序2 阅读程序(程序输入不超过数组成字符串定义的范围:判断题正确填√,错误填;除特殊说明外,判断题1.5分,选择题3分,共计40分&#xff…

Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言: Dijkstra算法博客讲解分为两篇讲解,这两篇博客对所有有难点的问题都会讲解,小白也能很好理解。看完这两篇博客后保证收获满满。 第一篇博客讲解朴素Dijkstra算法Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(p…

计网ppt标黄知识点整理第(2)章节——谢希仁版本、期末复习自用

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。4 个特性: 机械特性:指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。 电气特性:指明在接口电缆的各条线上出现…

基于Springboot驾校预约平台小程序的设计与实现(源码+数据库+文档)

一.项目介绍 系统角色:管理员、教练、学员 小程序(仅限于学员注册、登录): 查看管理员发布的公告信息 查看管理员发布的驾校信息 查看所有教练信息、预约(需教练审核)、评论、收藏喜欢的教练 查看管理员发布的考试信息、预约考试(需管理…

2024年东北师范CCPC

文章目录 A.Paper WateringB.nIM gAMEE.Checksum A.Paper Watering 思路:题目说有平方和开方两种操作,如果这个数是平方数,那么它开方之后就只能开方,如果平方的话就重复了,反之就有开方和平方两种操作。 代码如下 //…

为了方便看公众号文章,我搭建了个博客,在线看公众号所有历史文章,想看哪天的文章一秒就能找到

公众号没有个网页版的文章列表,只能在电脑和手机客户端看,想看之前的历史文章只能一直往下拉,想找某篇文章非常费劲。 为了方便看公众号文章,我搭建了个博客,博客地址https://sushengbuhuo.github.io/blog &#xf…

通过 SFP 接口实现千兆光纤以太网通信1

基于米联客ARTIX-7 系列开发板及其开发手册。 总体实现框图如下: SFP 接口 SFP 信号定义如下图所示。 Tri Mode Ethernet MAC 设置 由于使用千兆通讯,因此将速率设为 1Gbps。如下图所示。 首先,由于该 IP 需要与 IP 核 1G/2.5G Ethernet …

基于IoTDB 平台的学习和研究

Apache IoTDB(物联网数据库)是一个针对物联网领域的高性能原生数据库,适用于数据管理和分析,并可在边缘计算和云端部署。由于它轻量级的架构、高性能和丰富的功能集,以及与Apache Hadoop、Spark和Flink的深度集成&…