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,一经查实,立即删除!

相关文章

Leetcode:字符串转换整数 (atoi)

题目链接:8. 字符串转换整数 (atoi) - 力扣(LeetCode) 普通版本(条件限制) class Solution { public:int myAtoi(string s) {int res 0;int i 0;int flag 1;//假设整数为正while(s[i] )//跳过空格{i;}if(s[i] …

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

天锐绿盾文档透明加密系统是一种先进的数据安全解决方案,旨在保护企业和组织的敏感信息,防止未经授权的访问和泄漏。 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实验室精心打造的开源工具箱,…

加密算法简述

目录 1 加密算法的分类 2 对称加密 3 非对称加密 4 哈希算法 1 加密算法的分类 数据加密的基本过程是将原本的明文数据依照某种算法进行一定的处理,使之成为一段不可读的密文,只有通过相应的密钥与算法进行计算后才可显示出原文。而这个过程中的算法…

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

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

linux中如和查找端口是否被占用

在Linux系统中&#xff0c;可以使用以下命令来查找特定端口是否被占用&#xff1a; 使用netstat命令&#xff1a; netstat -tuln | grep <port_number>其中&#xff0c;-t表示TCP协议&#xff0c;-u表示UDP协议&#xff0c;-l表示监听状态&#xff0c;-n表示显示端口号…

Docker从安装开始精通

从虚拟机到容器 1.环境配置的难题 软件开发最大的麻烦事之一&#xff0c;就是环境配置。用户计算机的环境都不相同&#xff0c;你怎么知道自家的软件&#xff0c;能在那些机器跑起来&#xff1f; 用户必须保证两件事&#xff1a;操作系统的设置&#xff0c;各种库和组件的安装…

堆排序的实现

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

c++ map/multimap容器

在C中&#xff0c;std::map 和 std::multimap 是两种关联容器&#xff0c;它们包含了可重复的&#xff08;对于 multimap&#xff09;或唯一的&#xff08;对于 map&#xff09;键值对。这些容器都根据它们的键自动排序&#xff0c;并允许非常快速地根据键查找、插入和删除元素…

监控易监测对象及指标之:深入监测Exchange 2013邮件服务器的关键指标

在当今的信息化时代&#xff0c;Exchange 2013邮件服务器因其高效、稳定的特点被广泛应用于企业通信中。为了确保邮件服务器的持续稳定运行&#xff0c;及时发现并解决潜在问题至关重要。监控易作为一款功能强大的监控工具&#xff0c;为Exchange 2013邮件服务器提供了一系列细…

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

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

python第五次作业

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

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

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

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

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

【C++】【Windows】程序加载DLL库时依次查找哪些目录

搜索的顺序通常如下&#xff1a; 应用程序目录&#xff1a;首先&#xff0c;系统会在包含可执行文件&#xff08;EXE&#xff09;的目录中查找DLL。系统目录&#xff1a;接下来&#xff0c;系统会在Windows系统目录中查找&#xff0c;比如 C:\Windows\System32。16位系统目录&…

人工智能与未来工作:未来已来,你准备好了吗?

1. 引言 随着人工智能技术的飞速发展&#xff0c;它正在逐渐渗透到我们生活的方方面面&#xff0c;尤其是工作领域。本文将探讨人工智能的基本概念&#xff0c;它在不同行业的应用&#xff0c;以及它对未来就业市场和教育体系可能带来的影响。 2. 人工智能的基本概念 2.1 定…

ESP32S3外设学习笔记

GPIO ESP32的GPIO&#xff08;通用输入输出&#xff09;引脚非常灵活&#xff0c;支持多种工作模式。这些模式可以通过编程来配置&#xff0c;以适应不同的应用需求。以下是ESP32 GPIO引脚的主要工作模式&#xff1a; 1. 输入模式 普通输入模式&#xff1a;在这种模式下&…

dubbo复习:(14)通过上下文传递附加数据

服务调用和响应时&#xff0c;除了请求的方法和返回的响应&#xff0c;还可以通过上下文(Context)传递更多的数据(附加数据&#xff09; 一、接口定义 package cn.edu.tju.service;public interface ContextService {String invoke(String param); }二、服务端接口实现&#x…

OA前端用什么开发:深入探索技术选型与最佳实践

OA前端用什么开发&#xff1a;深入探索技术选型与最佳实践 在开发OA&#xff08;办公自动化&#xff09;系统的前端时&#xff0c;技术选型是至关重要的一步。它不仅决定了系统的外观和用户体验&#xff0c;还直接影响到系统的性能、安全性和可维护性。本文将从四个方面、五个…