调用paddleocr接口实现文本检测与识别,并在图像中显示识别结果

news2024/11/15 9:09:36

目录

一、按照官网步骤安装paddlepaddle和paddleocr(paddlepaddle我安装的是cpu版本)

二、运行下面的脚本

三、图像结果


一、按照官网步骤安装paddlepaddle和paddleocr(paddlepaddle我安装的是cpu版本)

doc/doc_ch/quickstart.md · PaddlePaddle/PaddleOCR - Gitee.com

二、运行下面的脚本

from paddleocr import PaddleOCR, draw_ocr
from PIL import Image, ImageDraw, ImageFont
import cv2
import matplotlib.pyplot as plt
import numpy as np

# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory
img_path = 'images/img123.jpg'
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
    res = result[idx]
    for line in res:
        print(line)


result = result[0]
boxleftup = [line[0][0] for line in result]
boxleftup = [[int(x) for x in row] for row in boxleftup]
boxrightbotm=[line[0][2] for line in result]
boxrightbotm = [[int(x) for x in row] for row in boxrightbotm]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]

merged_list = []
for i in range(len(result)):
    merged_list.append([boxleftup[i], boxrightbotm[i], txts[i]])
print(merged_list)

image = Image.open(img_path).convert('RGB')
image = np.asarray(image)

# 将 NumPy 图像转换为 PIL 图像
pil_img = Image.fromarray(image)

# 创建绘图对象
draw = ImageDraw.Draw(pil_img)
font = ImageFont.truetype("simfang.ttf", 30)
for (start, end, text) in merged_list:
    draw.rectangle([start[0], start[1], end[0], end[1]], outline="red", width=2)
    draw.text((start[0], start[1] - 30), text, fill=(0, 0, 0), font=font)  # 坐标、文本内容、颜色、字体

plt.axis('off')
plt.imshow(pil_img)
plt.savefig('output1.jpg', transparent=True, dpi=500)
plt.show()

三、图像结果

 

 

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

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

相关文章

IDEA对Web和Tomcat的一些配置

这里只是做了自己学习中的一点记录,仅供参考哈! 配置Tomcat Modules新增Web 新增module后新增Artifacts 新增Artifacts后Tomcat新增布署 将指定的module由普通java项目变成web项目 直接创建布署到Tomcat时所需要的Aritifacts包 配置Servlet的依赖包 配置…

初识【类和对象】

目录 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 5.类的作用域 6.类的实例化 7.类的对象大小的计算 8.类成员函数的this指针 1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的…

Java进阶篇--创建线程的四种方式

目录 继承Thread类 扩展小知识: Thread类的常见方法 Thread 类的静态方法 实现Runnable接口 使用Callable和Future创建线程 使用Executor框架创建线程池 继承Thread类 创建一个继承自Thread类的子类,并重写其run()方法,将相关逻辑实现…

Flink CDC数据同步

背景 随着信息化程度的不断提高,企业内部系统的数量和复杂度不断增加,因此,数据库系统的同步问题已成为越来越重要的问题。 缓存失效 在缓存中缓存的条目(entry)在源头被更改或者被删除的时候立即让缓存中的条目失效。如果缓存在一个独立的…

“返璞归真,数字排毒”,放下智能手机,美国功能手机卷土重来

近年来,智能手机的普及已经改变了人们的生活方式和沟通方式。然而,随着科技的不断进步和不断涌现的各种新应用程序,一些年轻人开始感到疲惫和厌倦。他们觉得智能手机带来了太多的干扰和依赖,也让人们容易沉迷于社交媒体和短视频。…

Rabbitmq的Federation Exchange

(broker 北京 ) , (broker 深圳 ) 彼此之间相距甚远,网络延迟是一个不得不面对的问题。有一个在北京的业务(Client 北京 ) 需要连接 (broker 北京 ) ,向其中的交换器 exchangeA 发送消息,此时的网络延迟很小,(C…

全球边缘计算大会的十大至暗时刻

来源网友X小缘 ① 背景板文字全球边缘计算大会,被广告公司改为全球边缘计算机大会,因为他觉得少了个机字; ② 明天开会,今天遇到恶劣天气,讲师主持人一整晚滞留外地机场; ③ 视频直播的时候声音通道没开&am…

Redis数据结构全解析【超详细万字分析】

文章目录 前言一、SDS1、SDS的必要性2、SDS的数据结构3、SDS的优势O(1)复杂度获取字符串长度二进制安全不会发生缓冲区溢出节省空间 二、链表1、结构设计2、优缺点 三、压缩列表1、结构设计2、连续更新3、压缩列表的缺陷 四、哈希表1、结构设计2、哈希冲…

236. 二叉树的最近公共祖先-优化

本期我们对该题进行优化&#xff0c;不知道题目的小伙伴建议先看看之前的 236. 二叉树的最近公共祖先_KLZUQ的博客-CSDN博客 我们要将时间复杂度优化为O(N) class Solution { public:bool FindPath(TreeNode* root, TreeNode* x,stack<TreeNode*>& path){if(rootnul…

Kubernetes(K8s)基本环境部署

此处只做学习使用&#xff0c;配置单master环境。 一、环境准备 1、ip主机规划&#xff08;准备五台新机&#xff09;>修改各个节点的主机名 注意&#xff1a;关闭防火墙与selinux 节点主机名ip身份joshua1 kubernetes-master.openlab.cn 192.168.134.151masterjoshua2k…

无涯教程-分类算法 - 朴素贝叶斯

朴素贝叶斯算法是一种基于应用贝叶斯定理的分类技术&#xff0c;其中强烈假设所有预测变量彼​​此独立。简而言之&#xff0c;假设是某个类中某个要素的存在独立于同一类中其他任何要素的存在。 在贝叶斯分类中&#xff0c;主要的兴趣是找到后验概率&#xff0c;即给定某些观…

抽象类和接口有什么区别?

在 Java 中&#xff0c;抽象类和接口是两种不同的类类型。它们都不能直接实例化&#xff0c;并且它们都是用来定义一些基本的属性和方法的&#xff0c;但它们有以下几点不同&#xff1a; 定义不同&#xff1a;定义的关键字不同&#xff0c;抽象类是 abstract&#xff0c;而接口…

Linux操作系统--包管理yum

1.概述 YUM(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。…

软考:中级软件设计师:数据库并发控制,完整性约束,数据库安全

软考&#xff1a;中级软件设计师:数据库并发控制 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的…

CrossOver 23 新功能介绍 CrossOver 23 版本更新了哪些功能

本次发布的CrossOver 23为用户带来了许多令人期待的新功能和优化&#xff0c;特别是对游戏方面的支持&#xff0c;更是让广大Mac游戏玩家兴奋。CrossOver 23包括对Wine 8.0.1的更新&#xff0c;带来了5000多处改动&#xff0c;对各种应用程序进行了改进。该版本还包括 Wine Mon…

AD9361配置采用纯PL方式,QT编写的小软件可以快速实现

采用ADI官方的API函数&#xff0c;虽然能够快速的实现AD9361配置&#xff0c;让我们不必关注9361的内部寄存器的配置过程&#xff0c;但是在实际的项目开发过程中&#xff0c;也在一定程度上限制了AD9361与PL之间数据交互的灵活性。 今天给大家推荐采用AD9361官方提供的配置软…

Linux操作系统--克隆虚拟机

1.概述 我们在搭建大数据或者是集群的过程中,需要使用到许多配置相同或者相类似的环境。这一个时候就需要使用到克隆虚拟机的功能。 2.克隆虚拟机过程 (1).从现有虚拟机(关机状态)克隆出新虚拟机,右键选择管理=>克隆,如下所示 (2).直接点击下一步。如下所示 (3).选择…

什么是浮动(float)?请解释清楚浮动对父元素和兄弟元素的影响。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浮动&#xff08;Float&#xff09;⭐ 浮动对父元素的影响⭐ 浮动对兄弟元素的影响⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入…

Centos8的NAT网络设置

1、先将虚拟机设置为NAT模式 2、打开虚拟网络编辑器&#xff0c;记录以下信息 NAT设置&#xff1a;子网掩码、网关 DHCP设置&#xff1a;I P 范围 (自动时) 3、进入Centos8的网络设置页面&#xff0c;按照记录的信息进行配置 4、重载、重启网卡 nmcli c reload ensl60 n…

什么是字体图标(Icon Font)?如何在网页中使用字体图标?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 字体图标&#xff08;Icon Font&#xff09;⭐ 如何在网页中使用字体图标⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…