[python] PyTesseract를 사용하여 멀티스레딩 및 병렬처리로 텍스트 추출 성능 향상시키기

이번 포스트에서는 PyTesseract를 사용하여 이미지에서 텍스트 추출을 수행하는 방법에 대해 알아보고, 이를 멀티스레딩 및 병렬처리를 통해 성능을 향상시키는 방법에 대해 알아보겠습니다.

1. PyTesseract란?

PyTesseract는 Tesseract OCR 엔진의 파이썬 래퍼입니다. Tesseract는 Google에서 개발한 오픈소스 OCR 엔진으로, 이미지에서 텍스트를 인식하여 추출할 수 있습니다. PyTesseract는 Tesseract 기능을 파이썬에서 쉽게 사용할 수 있도록 제공합니다.

2. PyTesseract 설치하기

PyTesseract를 사용하기 위해서는 먼저 Tesseract OCR 엔진을 설치해야 합니다. 다음 명령을 사용하여 Tesseract를 설치합니다.

$ sudo apt-get install tesseract-ocr

그리고 파이썬에서 PyTesseract를 사용하기 위해 pytesseract 패키지를 설치합니다.

$ pip install pytesseract

3. PyTesseract로 텍스트 추출하기

다음은 PyTesseract를 사용하여 이미지에서 텍스트 추출을 수행하는 간단한 예제 코드입니다.

import pytesseract
from PIL import Image

# 이미지 불러오기
image = Image.open('image.png')

# 이미지에서 텍스트 추출
text = pytesseract.image_to_string(image)

# 추출된 텍스트 출력
print(text)

위 코드에서 image.png는 텍스트를 추출할 이미지 파일의 경로입니다. image_to_string 함수를 사용하여 이미지에서 텍스트를 추출하고, 추출된 텍스트를 출력합니다.

4. 멀티스레딩으로 성능 향상시키기

PyTesseract는 이미지에서 텍스트를 추출하는 과정이 CPU를 많이 사용하는 작업입니다. 따라서 멀티스레딩을 사용하여 병렬처리를 수행하면 성능을 향상시킬 수 있습니다.

import pytesseract
from PIL import Image
from concurrent.futures import ThreadPoolExecutor

# 이미지 파일 리스트
image_files = ['image1.png', 'image2.png', 'image3.png']

# 이미지에서 텍스트 추출하는 함수
def extract_text(image_file):
    image = Image.open(image_file)
    text = pytesseract.image_to_string(image)
    return text

# 멀티스레딩으로 텍스트 추출하기
with ThreadPoolExecutor() as executor:
    results = executor.map(extract_text, image_files)

# 추출된 텍스트 출력
for result in results:
    print(result)

위 코드에서 image_files는 텍스트를 추출할 이미지 파일들의 경로를 담은 리스트입니다. extract_text 함수는 이미지 파일을 받아 해당 이미지에서 텍스트를 추출하고 반환합니다.

ThreadPoolExecutor를 사용하여 멀티스레딩으로 텍스트 추출 작업을 병렬로 실행합니다. executor.map 함수는 extract_text 함수를 image_files의 각 이미지 파일에 적용하고 결과를 반환합니다.

5. 병렬처리로 성능 향상시키기

또 다른 방법으로는 병렬처리를 사용하여 이미지에서 텍스트 추출 작업을 동시에 처리할 수 있습니다.

import pytesseract
from PIL import Image
from concurrent.futures import ProcessPoolExecutor

# 이미지 파일 리스트
image_files = ['image1.png', 'image2.png', 'image3.png']

# 이미지에서 텍스트 추출하는 함수
def extract_text(image_file):
    image = Image.open(image_file)
    text = pytesseract.image_to_string(image)
    return text

# 병렬처리로 텍스트 추출하기
with ProcessPoolExecutor() as executor:
    results = executor.map(extract_text, image_files)

# 추출된 텍스트 출력
for result in results:
    print(result)

위 코드는 멀티스레딩을 사용한 예제와 매우 유사합니다. 차이점은 ThreadPoolExecutor 대신 ProcessPoolExecutor를 사용하여 프로세스 기반의 병렬처리를 수행한다는 점입니다. 이를 통해 멀티코어 CPU를 활용하여 텍스트 추출 작업을 동시에 처리할 수 있습니다.

6. 결론

PyTesseract를 사용하여 이미지에서 텍스트를 추출하는 방법과 멀티스레딩 및 병렬처리를 사용하여 성능을 향상시키는 방법을 살펴보았습니다. 특히 이미지 파일이 많거나 병렬처리가 가능한 환경에서는 멀티스레딩 또는 병렬처리를 사용하여 텍스트 추출 작업을 빠르고 효율적으로 수행할 수 있습니다.

더 자세한 내용은 PyTesseract 공식 문서를 참조하시기 바랍니다.