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

最近在写一个小项目,需要使用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)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PaddlePaddle是一个开源的深度学习平台,可以用于构建和训练深度学习模型。如果你想使用PaddlePaddle,可以通过源码编译的方式来安装。首先,你需要在Git Bash中执行以下两条命令来将PaddlePaddle的源码克隆到本地,并进入Paddle目录: ``` git clone https://github.com/PaddlePaddle/Paddle.git cd Paddle ``` 接下来,你可以根据自己的需求进行编译。如果你使用的是Windows系统,可以使用源码编译来安装符合你需求的PaddlePaddle版本。具体的编译步骤可以参考官方文档中的Windows下源码编译部分\[2\]。 如果你想在docker镜像中编译PaddlePaddle,可以使用以下命令启动docker镜像并进行编译。如果你需要编译CPU版本,可以使用以下命令: ``` sudo docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash ``` 如果你需要编译GPU版本,可以使用以下命令: ``` sudo nvidia-docker run --name paddle-test -v $PWD:/paddle --network=host -it hub.baidubce.com/paddlepaddle/paddle:latest-dev /bin/bash ``` 以上是关于使用源码编译PaddlePaddle的一些基本步骤和命令。你可以根据自己的需求和操作系统选择适合的方式来安装PaddlePaddle。 #### 引用[.reference_title] - *1* *2* *3* [《PaddlePaddle从入门到炼丹》一——新版本PaddlePaddle的安装](https://blog.csdn.net/qq_33200967/article/details/83052060)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值