문자 인식 프로그램(2)
문자 인식 코드를 함수 read_text()로 만들아봅시다. 이 함수는 이미지 경로를 입력 받아서, 해당 이미지의 문자 인식 처리 결과를 반환하는 함수입니다. 비주얼 스튜디오 코드에서 새로운 파일을 생성하고, 파일명을 'step_2_2.py'로 지정하세요. 다음과 같이 코드를 코드를 입력한 뒤 대화형 창에서 실행하세요. 앞서 'step_2_1.py'에 실습한 것과 동일한 결과가 화면에 출력됩니다.
문자 인식 함수
from pathlib import Path
import easyocr
from step_1 import IN_DiR # 이전에 작성한 모듈을 불러옵니다.
def read_text(path: Path) -> list:
reader = easyocr.Reader(["ko", "en"], verbose=False)
return reader.readtext(path.read_bytes())
if __name == "__main__":
path = IN_DiR / "ocr.jpg"
print(read_text(path))
바운딩 박스 추가
이번에는 이미지에 바운딩 박스(boundingb box)를 그려봅시다. 이렇게 하면 어떤 부분이 문자로 인식되었는지 한눈에 쉽게 파악할 수 있어서 편리합니다.
함수 read_text()의 반환값은 리스트 형식의 데이터입니다. 이 리스트에는 ① 이미지 속 문자의 위치를 나타내는 좌표, ② 인식된 문자, ③ 인식률이 문자별로 튜플 형식으로 저장되어 있습니다. 이 데이터를 for 반복문을 활용하여 하나씩 풀어서 처리하겠습니다. 인식된 문자의 좌표의 인식률을 사용해서 인식률이 놓으면 빨간색, 낮으면 바운딩 박스를 그릴 것입니다.
비주얼 스튜디오 코드에서 새로운 파일을 생성하고, 파일명을 'step_2_3.py'으로 지정하세요. 다음 코드를 입력한 뒤, 대화형 창에서 실행하세요. 'output' 폴더에 'step_2_3.jpg' 파일이 생성됩니다.
from pathlib import Path
from PIL import Image, ImageDraw
from step_1 import IN_DIR, OUT_DIR # 이전에 작성한 모듈을 불러옵니다.
from step_2_2 import read_text
OUT_2_3 = OUT_DIR / f"{Path(__file__).stem}.jpg" # 07
PROB = 0.25 # 인식률 기본값
def read_text_and_draw_line(path: Path): # 09
parsed = read_text(path) # 문자 인식 결과 저장
img = Image.open(path) # Image 객체 생성
draw = ImageDraw.Draw(img, "RGB") # ImageDraw 객체 생성
for row in parsed: # 13
bbox, text, prob = row # 문자 인식 결과를 좌표, 문자, 인식률로 각각 분리
box = [(x, y) for x, y in bbox] # 리스트를 튜플로 변환 # 15
draw.polygon( # 16
box, # 17
outline = (255, 0, 0) if prob >= PROB else (0, 255, 0), # 18
width=10
)
img.save(OUT_2_3)
if __name__ == "__main__":
path = IN_DIR / "ocr.jpg"
read_text_and_draw_line(path)
실행 결과

07 문자가 제대로 인식되었는지 확인하기 위해 문자 인식률 기준값을 변수 PROG에 0.75로 저장합니다.
09 인식된 문자에 박스를 그린 후, 그 결과를 OUT_2_3 경로에 저장하는 함수 read_text_and_draw_line()을 정의합니다.
13 for 반복문을 사용하여 인식된 문자의 좌표에 따라 사각형을 그립니다.
15 함수 polygon()은 좌표를 튜플로 처리하므로 bbox에 저장된 좌표 데이터를 튜플 타입으로 변환합니다.
16~17 polygon()을 사용하여 box에 저장된 좌표를 기준으로 박스를 그립니다.
18 변수 prob에 저장된 값이 PROB 보다 같거나 크면 (255, 0, 0)을 적용하고, 그렇지 않으면 녹색 (0, 255, 0)을 적용합니다.
실행 결과 생성된 이미지 파일에 인식률이 높은 문자는 빨간색, 낮은 문자는 녹색 마크가 그려졌습니다. 이미지 인식을 기준값은 정해진 표준이 없습니다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
| DeepL 번역 기능 추가하기 (0) | 2026.01.12 |
|---|---|
| 문자 인식 웹 앱 만들기 (0) | 2026.01.09 |
| 문자 인식 프로그램 만들기(1) (0) | 2026.01.02 |
| 웹의 작동 원리 이해하기 (1) | 2025.12.30 |
| 웹의 작동 원리 - 실습 환경 준비하기 (0) | 2025.12.27 |