프로그램 개발/Python

[python] 이미지 속 한글 추출하기(OpenCV, Pyplot, Pytesseract)

(ㅇㅅㅎ) 2024. 1. 12. 12:58
728x90
반응형

 

원본이미지 흑백 처리 이미지 글자 추출 결과물

 이번 글에서는 이미지에서 문자를 추출하는 코드를 작성해 보았습니다. 이미지의 경우 쉽게 테스트하기 위해서 메모장에 글을 쓰고 이미지로 저장하였습니다. 이미지 추출 시 Naver Clover의 API와 Tesseract 사이에서 고민하였지만 Clover의 경우 자주 사용할 시 추가 금액이 발생하기 때문에 Tesseract으로 간단히 진행하였습니다. 한글의 경우 Clover가 더 성능이 우수하기에 Tesseract로 진행 시 인식률이 떨어질 가능성이 높으니 참고하시길 바랍니다.

 

 

⭐ 코드가 사용된 환경은 Windows와 jupyter notebook입니다.

 

 

OpenCV(Open Source Computer Vision)

 영상 처리에 사용하는 오픈 소스 라이브러리입니다. 카메라로 찍어서 할 수 있는 모든 일을 처리할 수 있습니다. 이번 글에서는 이미지를 읽어서 흑백으로 변환시키는데 사용됩니다.

 

Pyplot

 Matplotlib를 MATALAB처럼 작동하게 만드는 모음입니다. 이번 글에서는 흑백으로 변환한 이미지를 확인하는데 사용됩니다.

👀 Matplotlib : python 프로그래밍 언어 및 수학적 확장 NumPy 라이브러리를 활용한 플로팅 라이브러리

👀 글자 추출을 위해 흑백으로 이미지를 변환하는 이유

 이미지 흑백 처리는 Grayscale로 이미지 전처리에 가장 기본이 되는 작업입니다. 디지털에서 이미지를 표현할 때 (pixelⅹpixel ⅹchannel)의 포맷으로 사용하는데 여기서 channel이 색상입니다. 기본 3개의 채널(빨강, 파랑, 초록)을 흑백 (채널 1개) 으로 변환하여 256단계의 명암만 표시하게 됩니다. 그 후에 binary나 blurring 등의 작업을 진행합니다.

 

Pytesseract

 python용 OCR(광학 문자 인식) 도구입니다. 이미지에 포함된 글자를 인식합니다. 이번 글에서는 흑백으로 변환한 이미지에서 글자를 추출하는 데 사용됩니다.

 

 

 

OpenCV, Pyplot, Pytesseract 설치하기

!pip install opencv-python
!pip install matplotlib
!pip install pytesseract

❗ Windows에서 설치 후 Tesseract is not installed or it's not in your path 오류가 발생할 경우

  1. 사이트에 접속하여 Windows용 실행 파일을 설치합니다.

 

  2. 설치 시 Addtional language data(download)에서 Korean을 선택합니다.

 

  3. 설치 경로를 복사하거나 기억해둡니다.

 

  4. 환경변수 PATH에 설치경로를 추가하거나 python작업 시 아래의 코드를 추가합니다.

👀 이 글에서는 코드를 추가하였습니다.

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

 

 

 

코드

# 필요한 라이브러리 추가
import cv2
from matplotlib import pyplot as plt
import pytesseract

# pytesseract 사용을 위한 코드 추가
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# 사용할 이미지 위치 주소 변수에 저장
image = r"정확한 이미지 경로"

# 이미지 파일 읽기
img = cv2.imread(image)

# 글자 추출 전처리를 위해 흑백으로 변환
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 흑백 처리한 이미지 확인
plt.imshow(gray)
plt.show()

# 한글과 영문 추출을 위한 config 내용 변수에 저장
config = ('-l kor+eng --oem 3 --psm 11')

# 이미지에서 글자 추출
output = pytesseract.image_to_string(gray, config=config)

# 추출한 글자 확인
print(output)

 

반응형