关于paddleocr文字识别内存泄漏的问题

news2024/11/14 13:55:48

最近在写一个小项目,需要使用paddleocr进行文字识别,然后发现存在严重的内存泄漏,运行时间越长,cpu和内存的占用率就越高。很容易导致程序的崩溃。

代码的主要逻辑如下:

import os
import numpy as np
from paddleocr import PaddleOCR, draw_ocr
from PIL import Image
import time

# 设置输入和输出目录
input_dir = '/content/img'
output_dir = '/content/log'

# 初始化 OCR
ocr = PaddleOCR(use_angle_cls=True, lang='en')  # 运行一次以下载并加载模型到内存中

# 进入无限循环以持续进行检测
while True:
    # 遍历输入目录中的图像文件
    for filename in os.listdir(input_dir):
        if filename.endswith('.png') or filename.endswith('.jpg') or filename.endswith('.jpeg'):
            # 读取图像
            img_path = os.path.join(input_dir, filename)
            img = Image.open(img_path).convert('RGB')
            img_np = np.array(img)

            # 进行 OCR
            result = ocr.ocr(img_np, cls=True)

            # 提取 OCR 结果
            res = result[0]
            boxes = [line[0] for line in res]
            txts = [line[1][0] for line in res]
            scores = [line[1][1] for line in res]

            # 在图像上绘制 OCR 结果
            im_show = draw_ocr(img_np, boxes, txts, scores, font_path='/content/Humor-Sans.ttf')
            im_show = Image.fromarray(im_show)

            # 将带有 OCR 结果的图像保存到输出目录中
            output_path = os.path.join(output_dir, filename)
            im_show.save(output_path)

            print(f"检测到 {filename} 中的文本,并将结果保存在 {output_path}")
    
    # 在检查新图像之前暂停一段时间
    time.sleep(1)

内存一直在增加,没有减少的痕迹。github官网有很多人都在讨论这个问题。

报告在 CPU 机器上使用 PaddleOCR CPU包, 2小时后遇到内存泄漏问题 · Issue #12150 · PaddlePaddle/PaddleOCR (github.com)

然后,我找到了一个大佬的解释:

大概就是说,这是paddle框架将Tensor做了缓存复用。但是这个缓存复用的策略对于我的项目需求没有好处,或者说是负担。所以我们可以修改这个策略:

export FLAGS_allocator_strategy=naive_best_fit

经过测试,内存确实不会一直涨到100%,但是可能还是会增长。

参考:PaddleOCR 中的内存泄漏。·问题 #11639 ·PaddlePaddle/PaddleOCR (github.com)

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

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

相关文章

深入理解GAN网络

Generative Adversarial Networks创造性地提出了对抗训练来代替人工指定的loss。之前的文章初步理解了一下,感觉还是不到位,在这里再稍微深入一点。 交叉熵cross entropy 鉴别器是GAN中重要的一部分,鉴别器和生成器交替训练的过程就是adver…

秒开WebView? Android性能优化全攻略

​ 大家好,我是程序员小羊! 前言: 秒开 WebView 是很多 Android 开发者追求的目标,尤其是在需要加载复杂网页内容或与 Web 进行频繁交互的应用中。然而,由于 WebView 的启动速度较慢且加载资源耗时较多,优化…

时间戳有什么重要作用

1 问题: 今天做前后端联调的时候,发现请求url路径后面跟了一段数据:“t1725537660463”,我蒙圈了,为什么是一段乱码 明明我的后端写了id这个参数,而且前端传给后端的参数只有这个7,那“ &#…

解决:使用Charles查看本机的ip地址

✨本人自己开发的开源项目:土拨鼠充电系统 ✨踩坑不易,还希望各位大佬支持一下,在GitHub给我点个 Start ⭐⭐👍👍 ✍GitHub开源项目地址👉:https://github.com/cheinlu/groundhog-charging-syst…

WIFI贴项目到底是不是“骗局”呢?由我来揭秘!

各位亲爱的朋友们,大家好!我是你们的老朋友鲸天科技千千,一直在这片互联网的热土上耕耘。相信你们对我都不会陌生,因为我常常分享一些互联网上的新奇项目和实用技巧。如果你对我的内容感兴趣,别忘了点个关注哦&#xf…

【C++ Primer Plus习题】11.6

问题: 解答: main.cpp #include <iostream> #include "Stonewt.h" using namespace std; const int SIZE 6;int main() {Stonewt stone_arr[SIZE] { 253.6,Stonewt(8,0.35),Stonewt(23,0) };double input;Stonewt eleven Stonewt(11, 0.0);Stonewt max st…

C++特殊类设计,

目录 ​编辑 一、不能拷贝的类 二、只能在栈上创建的类&#xff0c; 三、只能在堆上创建的类&#xff0c; 四、不能被继承的类&#xff0c; 五、只有一个对象的类 一、不能拷贝的类 c98&#xff1a;将拷贝构造和运算符重载私有化 C11&#xff1a;delete删除成员函数 /…

[数据集][目标检测]电梯内广告牌电动车检测数据集VOC+YOLO格式2787张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2787 标注数量(xml文件个数)&#xff1a;2787 标注数量(txt文件个数)&#xff1a;2787 标注…

2024-09-03升级问题记录:编译打包出错java.lang.OutOfMemoryError: GC overhead limit exceeded

Android工程升级&#xff0c;debug构建apk可以正常生成&#xff0c;但是release构建时出现以上错误。 按字面意思&#xff0c;GC回收时内存不够。 那么&#xff0c;解决方法&#xff1a; 在在项目根目录的gradle.properties中&#xff0c;注意不是Administrator\.gradle 的 …

linux中vim常用命令大全详细讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Vim 是 Linux 系统中功能强大的文本编辑器&#xff0c;广泛用于代码编辑和配置文件的编辑。以下是 Vim 常用命令的详细讲解&#xff0c;包括基本操作、文本编辑、查找与替换、窗口操作等。 一、Vim 基本操…

Epoll 用法

Epoll 监听 EPOLL_CTL_DEL EPOLL_CTL_ADD epoll_event event event.events event.data.fd

初识redis(String,Hash,List,Set,SortedSet)

认识NoSql sql关系型数据库 nosql非关系型数据库 nosql具有非结构化&#xff0c;Key/Value&#xff0c;Document&#xff0c;Draph 无关联的&#xff0c;非sql&#xff0c;BASE&#xff08;原子性&#xff0c;持久性&#xff0c;一致性&#xff0c;隔离性&#xff09; 认识r…

盘点4款超好用的电脑数据恢复工具

如今我们的生活和工作越来越离不开电脑&#xff0c;因此电脑里面也储存了我们大量的数据&#xff1a;图片&#xff0c;文档&#xff0c;工作资料等。但是这些重要数据却会因为误删除、病毒攻击、系统崩溃等原因遭到丢失。所以数据恢复软件就变得十分的重要&#xff0c;今天&…

maya无法导出fbx

很多小伙伴使用Maya软件导出fbx格式文件时会提示“无法识别文件类型”&#xff0c;这主要是因为没有开启fbx插件造成的&#xff0c;只要开启fbx插件就能解决这个问题。 在Maya软件的“Modeling”模式下&#xff0c;点击菜单栏的“Windows”&#xff0c;在弹出的下拉框中选择“S…

Altium AD20差分对走线设置方法

Altium AD20差分对走线设置方法 1、在PCB界面右下角点击panels&#xff0c;选择"PCB"选项&#xff0c;则左下角就会出现PCB的窗口选项 2、在PCB窗口内&#xff0c;将上面的下拉菜单选择Differential Pairs Editor选项&#xff0c;然后按下图操作 3、增加差分网络分…

服务器数据恢复—OneFS文件系统下数据被删除的数据恢复案例

服务器数据恢复环境&故障&#xff1a; EMC NAS&#xff08;Isilon S200&#xff09;&#xff0c;共3个节点&#xff0c;每个节点配置12块STAT硬盘。数据分两部分&#xff1a;一部分数据为vmware虚拟机&#xff08;WEB服务器&#xff09;&#xff0c;通过NFS协议共享到ESX主…

【数据库】MySQL表的基本查询

关于表的增删查改主要分为CRUD&#xff1a;Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; 目录 1.Creat&#xff08;增加内容&#xff09; 1.1指定列插入 1.2全列插入 1.3多行插入 1.4插入冲突更新 1.5替换 2.R…

Springboot3.x.x使用SpringSecurity6(一文包搞定)

SpringSecurity6 什么是SpringSecurity? Spring Security 是一个强大的、高度可定制的身份验证&#xff08;Authentication&#xff09;和访问控制&#xff08;Authorization&#xff09;框架。它是 Spring 框架家族的一员&#xff0c;主要用于保护基于 Java 的应用程序&#…

鸿蒙开发有必要学吗

在科技飞速发展的今天&#xff0c;新的技术不断涌现&#xff0c;开发者们也面临着众多选择。其中&#xff0c;鸿蒙开发成为了一个备受关注的话题。那么&#xff0c;鸿蒙开发有必要学吗? 一、鸿蒙系统的崛起 鸿蒙操作系统是华为推出的一款面向全场景的分布式操作系统。它的出现…

CPU飙高排查步骤

1&#xff1a;top指令(查看进程信息) top指令&#xff1a;查看进程运行信息 此处1313占用90多CPU 2&#xff1a;ps指令&#xff08;查看进程中每个线程信息&#xff0c;锁定问题线程&#xff09; 查看进程里每个线程的详细占用 ps H -eo pid,tid,%cpu | grep 1313ps H:查看进…