프로그래밍 언어/Python

이미지에 번역된 문자 출력하기

· 코딩마이데이

이미지 위에 바운딩 박스를 그려 불투명한 색으로 채우고 그 위에 번역된 문자를 출력해 봅니다. pillow 패키지를 사용할 것입니다.

비주얼 스튜디오 코드에서 새로운 파일을 만들고, 파일명을 'step_3_3.py'로 지정하세요. 다음 코드를 입력한 뒤 대화형 창에서 실행하세요. 이미지 위에 바운딩 박스와 번역 결과가 표시됩니다.

from pathlib import Path
from PIL import Image, ImageDraw, ImageFont # 02
from step_1 import IN_DIR, OUT_DIR
from step_3_2 import read_text_translated

OUT_3_3 = OUT_DIR / f"{Path(__file__).stem}.jpg"
PROB = 0.75

def read_text_and_fill_area(path: Path):
    parsed = read_text_translated(path) # 문자 인식 및 번역 결과 저장
    img = Image.open(path)
    draw = ImageDraw.Draw(img, "RGBA") # 알파 채널 사용 가능 # 12
    font = ImageFont.truetype(IN_DIR / "Pretendard-Bold.ttf", size=60) # 13
    for row in parsed:
        bbox, text, prob = row
        box = [(x, y) for x, y in bbox]
        draw.polygon(
            box,
            fill=(255, 0, 0, 100) if prob >= PROB else (0, 0, 255, 100) # 19
        )
        draw.text(xy=box[0], text=text, fill=(255, 255, 255), font=font) # 21
    img.save(OUT_3_3)

if __name__ == "__main__":
    path = IN_DIR / "ocr.jpg"
    read_text_and_fill_area(path)

 

[실행결과]

 

02 pillow 패키지의 ImageFont 모듈을 불러옵니다. 폰트 객체 생성에 사용합니다.

12 ImageDraw 객체 생성 시 RGBA 모드를 사용해서 알파 채널을 사용한 불투명도를 적용할 수 있게 합니다.

13 Font 객체를 생성합니다.

19 매개변수 fill에 색상 정보를 전달해서 인식한 문자의 좌표 영역에 색을 채웁니다.

21 함수 text()를 사용하여 번역된 문자를 출력합니다. 매개변수 xy에 box[0]을 전달하여 문자가 바운딩 박스의 첫 번째 좌표, 즉 왼쪽 상단에 출력되도록 위치를 지정합니다.