关于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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值