Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RapidOCR Error - Leaked Semaphore Objects & OOM Killer #231

Open
BennisonDevadoss opened this issue Oct 15, 2024 · 6 comments
Open

RapidOCR Error - Leaked Semaphore Objects & OOM Killer #231

BennisonDevadoss opened this issue Oct 15, 2024 · 6 comments

Comments

@BennisonDevadoss
Copy link

Problem Description:

While processing a large number of images (approximately 1000) using RapidOCR, I encountered the following errors midway through the process:

  1. Leaked Semaphore Objects: "There appear to be 1 leaked semaphore object(s) to clean up at shutdown."
  2. Process Killed by OOM Killer: "The process of this unit has been killed by the OOM killer."

System Information:

  • Operating System: Ubuntu 22.04 LTS
  • RapidOCR Version: rapidocr-onnxruntime 1.3.24

Reproducible Code:

from typing import Sequence, Union, Iterable
import numpy as np

def extract_from_images_with_rapidocr(
    images: Sequence[Union[Iterable[np.ndarray], bytes]],
) -> str:
    try:
        from rapidocr_onnxruntime import RapidOCR
    except ImportError:
        raise ImportError(
            "`rapidocr-onnxruntime` package not found, please install it with "
            "`pip install rapidocr-onnxruntime`"
        )
    ocr = RapidOCR()
    text = ""
    for img in images:
        result, _ = ocr(img)
        if result:
            result = [text[1] for text in result]
            text += "\n".join(result)
    return text

Research & Findings:

These errors seem to be related to memory leaks during batch image processing. I am uncertain about how to resolve these issues within RapidOCR, especially when handling large numbers of images.

Additional Questions:

  1. Are there any memory management techniques or best practices for handling large image batches in RapidOCR?
  2. How can I optimize memory usage to prevent OOM killer termination?
  3. Is there a way to monitor memory consumption or manage semaphore objects during the process?
  4. Would changing the version of RapidOCR (upgrading/downgrading) help resolve this memory-related issue?

Any guidance or solutions would be greatly appreciated!

@SWHL
Copy link
Member

SWHL commented Oct 16, 2024

I guess that some of the 1000 images are large in size, which causes the memory request to exceed the limit when recognizing these images.
At present, it is recommended to check the images sent for recognition to see if there are any images with particularly large sizes, such as 4000x7000. It is recommended to resize them in advance before sending them for OCR recognition.

Later, I will add this logic in the code to control the memory from exceeding the limit.

@BennisonDevadoss
Copy link
Author

@SWHL, Thank you for the response! I have couple of follow-up questions based on your suggestions:

  1. What would be the recommended target resolution for images to prevent memory overload during OCR processing? Is there an optimal balance between image size and OCR accuracy?
  2. Could you share more details about the memory control logic you plan to add? Will this logic automatically resize or manage large images, and will it be included in a future release of RapidOCR?

@SWHL
Copy link
Member

SWHL commented Oct 16, 2024

These two points are already under development, please refer to the develop branch, and they will be updated to the new version soon.

@SWHL
Copy link
Member

SWHL commented Oct 17, 2024

You can try it again with the rapidocr_onnxruntime==1.3.25

@BennisonDevadoss
Copy link
Author

@SWHL, Thanks for your update, I tried with the version 1.3.25, but it does not work for me. I am facing the same issue.

@SWHL
Copy link
Member

SWHL commented Nov 9, 2024

Can you confirm if there are any fixed ones among the 1000 that will trigger OOM issues? If it can be stably reproduced, please provide this image.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants