PaddleOCR超大分辨率文本检测代码教程

PaddleOCR超大分辨率文本检测代码教程

目录

1.前提

2.PaddleOCR部署(win10下)

3.解决思路和代码


1.前提

        这是我提的issue:https://github.com/PaddlePaddle/PaddleOCR/issues/11888

        很多问题可以看:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/FAQ.md

        对于超大分辨率,直接resize已经不适合,那么就需要滑动窗口、以及不同尺度的窗口滑动,对于目标检测yolov5 v8中有时用到,其中需要多次nms;但是这里ocr采用DB这种分割体系的文本检测就减少了很多操作。

        仅适用DB这种分割体系的文本检测!!!

2.PaddleOCR部署(win10下)

        对于win10下部署paddleocr其中重要的一环是conda虚拟环境教程;不用安装cuda,仅需要按照最新的nvidia驱动即可,驱动向下兼容;再参考paddle-gpu官网conda安装cudatoolkit、cudnn对应版本即可!

3.解决思路和代码

        直接上代码,简单。

        这部分代码是直接在 PaddleOCR\tools\infer\predict_det.py中TextDetector的__call__函数中添加,支持多尺度的分割文本检测!

        ori_im = img.copy()image_height, image_width = img.shape[:2]# 前提是采用两阶段检测识别方法,det采用分割的方法,如DB、DB++if (image_width // max(window_size) >= 2) and (image_height // max(window_size) >= 2) and self.det_algorithm in ['DB', 'PSE', 'DB++']:preds_all = np.zeros([1, 1, image_height, image_width])  # 预测概率图assert len(window_size) == len(stride), "窗口尺寸和步长 列表长度不一致"st = time.time()preds = {}for i in range(len(window_size)):window_size_i = window_size[i]stride_i = stride[i]# 计算水平和垂直方向上窗口的数量  num_windows_height = (image_height - window_size_i) // stride_i + 1  num_windows_width = (image_width - window_size_i) // stride_i + 1 # 这里有天然的缺陷if window_size_i > self.args.det_limit_side_len:raise ValueError("window_size超过默认的参数,导致无法预测后赋值,暂时无法修改,建议降低window_size!")windows_x, windows_y = np.meshgrid(np.append(np.arange(0, num_windows_width * stride_i, stride_i), image_width-window_size_i),np.append(np.arange(0, num_windows_height * stride_i, stride_i), image_height-window_size_i),) # x-w y-h# 遍历超大分辨率图片 滑动窗口h,w = windows_x.shape[:2]for y in range(h):for x in range(w):start_h, start_w = windows_y[y,x], windows_x[y,x]print(f"正在处理y{start_h}-x{start_w}块。。。")img_ = img[start_h:start_h+window_size_i, start_w:start_w+window_size_i]data = {'image': img_}if self.args.benchmark:self.autolog.times.start()data = transform(data, self.preprocess_op)img_, shape_list = dataif img_ is None:return None, 0img_ = np.expand_dims(img_, axis=0)shape_list[0] = image_heightshape_list[1] = image_widthshape_list = np.expand_dims(shape_list, axis=0)img_ = img_.copy()if self.args.benchmark:self.autolog.times.stamp()if self.use_onnx:input_dict = {}input_dict[self.input_tensor.name] = img_outputs = self.predictor.run(self.output_tensors, input_dict)else:self.input_tensor.copy_from_cpu(img_)self.predictor.run()outputs = []for output_tensor in self.output_tensors:output = output_tensor.copy_to_cpu()outputs.append(output)if self.args.benchmark:self.autolog.times.stamp()if self.det_algorithm in ['DB', 'PSE', 'DB++']:preds_all[:, :, start_h:start_h+window_size_i, start_w:start_w+window_size_i] = np.maximum(preds_all[:, :, start_h:start_h+window_size_i, start_w:start_w+window_size_i], outputs[0])else:raise NotImplementedErrorpreds['maps'] = preds_allpost_result = self.postprocess_op(preds, shape_list)dt_boxes = post_result[0]['points']if self.args.det_box_type == 'poly':dt_boxes = self.filter_tag_det_res_only_clip(dt_boxes, ori_im.shape)else:dt_boxes = self.filter_tag_det_res(dt_boxes, ori_im.shape)if self.args.benchmark:self.autolog.times.end(stamp=True)et = time.time()return dt_boxes, et - st

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

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

相关文章

day22java学习打卡:自定义数组的工具类

//自定义数组的工具类: public class ArrayUtilTest { public static void main(String[] args) { ArrayUtil utilnew ArrayUtil(); int[] arrnew int[] {12,23,56,76,45,9,-98}; int maxutil.getMax(arr); System.…

【操作系统API系统调用】

原理 操作系统的API调用通常在应用程序进程的上下文中执行。当一个应用程序调用操作系统的API时,操作系统会在该应用程序进程的内存空间中分配资源(如内存、文件描述符等)并执行相应的操作。因此,在调用操作系统API时&#xff0c…

信阳附大医院-市民心中的健康守护者

信阳附大医院,一所集医疗、预防、保健、科研、教学、康复于一体的现代化综合医院,坐落于信阳市工区路600号,是市卫生部门批准成立的医疗机构,更是市民心中的健康守护者. 医院环境优雅,设施先进,服务周到,汇聚了一支技术精湛、经验丰富的医疗团队.医师们以患者为中心,用心倾听,精…

产品经理功法修炼(4)之产品管理

点击下载《产品经理功法修炼(4)之产品管理》 产品经理功法修炼(1)之自我管理 产品经理功法修炼(2)之专业技能 产品经理功法修炼(3)之产品设计 产品经理功法修炼(4)之产品管理 产品经理功法修炼(5)之团队管理 1. 前言 产品经理的能力修炼并非局限于某一技能的…

【UE 网络】DS框架学习路线

目录 0 引言1 如何学习DS框架1. 熟悉Unreal Engine基础2. 学习网络编程基础3. 掌握UE网络概念4. 实践和实验5. 加入社区和论坛6. 官方示例和案例研究7. 专业书籍和在线课程 2 DS框架重要知识点有哪些1. 网络复制2. 远程过程调用(RPC)3. 客户端服务器架构…

基于单片机16路多路抢答器仿真系统设计

**单片机设计介绍,基于单片机16路多路抢答器仿真系统设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机16路多路抢答器仿真系统的设计概要主要涵盖硬件设计、软件编程以及功能实现等方面。以下是针对该设计的详细概…

Mac系统Unity团结引擎打包OpenHomeny项目配置

1、团结引擎下载:直接百度下载即可 2、mac版本的DevEco4.0编辑器下载: widthdevice-width,initial-scale1.0https://docs.openharmony.cn/pages/v4.0/zh-cn/release-notes/OpenHarmony-v4.0-release.md/#%E9%85%8D%E5%A5%97%E5%85%B3%E7%B3%BB3、打开D…

实现RAG:使用LangChain实现图检索查询

你是不是有时会遇到这样的问题:你可能遇到的任何主题或问题,都有大量的文档,但是当尝试将某些内容应用于自己的用途时,突然发现很难找到所需的内容。 在这篇博文中,我们将看一下LangChain是如何实现RAG的,这…

2024年贵州省职业院校技能大赛云计算应用赛项赛题第2套

#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…

一次部署,多处运行:Docker容器化开发

一、引言 Docker是一种流行的容器化技术,可用于在多个平台下保持软件运行的一致性、轻松地实现应用程序移植性,以及提高开发、测试、部署和管理过程的效率。Docker容器化开发可以改变传统软件运行、部署、管理与维护的方式,使其更加灵活和高…

产品经理和项目经理的区别

1. 前言 本文深入探讨了产品经理与项目经理在职责、关注点以及所需技能方面的显著区别。产品经理主要负责产品的规划、设计和市场定位,强调对用户需求的深刻理解和产品创新的推动;而项目经理则侧重于项目的执行、进度控制和资源管理,确保项目按时、按质、按预算完成。两者在…

在NBA我需要翻译--适配器模式

1.1 在NBA我需要翻译! "你说姚明去了几年,英语练出来了哦,我看教练在那里布置战术,他旁边也没有翻译的,不住点头,瞧样子听懂没什么问题了。" "要知道,最开始&#xff0c…

03-JAVA设计模式-原型模式

原型模式 什么是原型模式 Java原型模式(Prototype Pattern)是一种创建型设计模式,其核心理念在于通过复制(克隆)已有的对象来创建新的对象,而不是通过构造函数来创建。 该模式可以显著提高对象创建的效率…

vue的一些特性

Vue.js 是一个构建用户界面的渐进式框架,它有很多特性和优点使得开发者能够高效地构建复杂的Web应用。除了之前提到的组件化、轻量级、虚拟DOM和MVVM数据绑定等特性,Vue还有以下一些显著特性: 响应式数据绑定:Vue.js 的核心库只关…

LeetCode 9.回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,…

图论基础入门

一、存图 存图方式一共有三种:邻接矩阵、邻接表、前向星 纯前向星还需要再加上排序的时间复杂度(当排序不是主要复杂度时适用),如果快排,时间复杂度是O(n log n),可以用别的排序方式优化,即基数…

HTML+CSS+JavaScript网页制作案例教程第2版-黑马程序员-第7章动手实践

7.6 动手实践 学习完前面的内容&#xff0c;下面动手实践一下吧。 请结合给出的素材&#xff0c;运用元素的浮动和定位实现图7-49所示的“焦点图”效果。 链接&#xff1a;https://pan.baidu.com/s/1H98ySBSkd8h3IRA19AV2mw?pwd1024 提取码&#xff1a;1024 index.html <…

代码随想录|Day34|动态规划03|343.整数拆分、96.不同的二叉搜索树

343.整数拆分 动规五步&#xff1a; 确定 dp[i] 含义&#xff1a;拆分数字 i&#xff0c;可以获得的最大乘积为 dp[i]。递推公式&#xff1a;dp[i] max(j * (i - j), j * dp[i - j])。i 可以被拆解为两个数&#xff08;j 和 i - j&#xff09;或者多个数&#xff08;j 和 dp[i…

网络I/O处理

引言&#xff1a;网络数据能够正常到达用户并且被接收是进行网络传输的根本目的&#xff0c;网络传输的数据发送和接收有多种方案&#xff0c;本文章就对通过向量接收和发送等数据传输方式&#xff0c;并且对多种I/O模型进详细分析介绍。 目录 一.I/O函数 1.1 recv和send rec…

KMP刷leetcode速通

前言 KMP真厉害&#xff0c;刷题刷到 28.找出字符串中第一个匹配项的下标 和 1668.最大重复子字符串 next 数组用来匹配不上时&#xff0c;前缀 j j j 可以快速回退到 n e x t [ j − 1 ] next[j-1] next[j−1] 的位置。 void getNext(vector<int>& next, const…