[파이썬] Ch.5 (2) 광학 문자 인식 + DeepL API 번역

2026. 7. 7. 16:08·짧은 호흡/Python

< DeepL API 사용하기 >

  • API 서비스를 사용하면 DeepL에 직접 접속하지 않고도 번역 기능을 이용할 수 있다.

Developer 무료 API 키 받기

 

< DeepL 패키지를 불러와서 Translator 객체를 사용해보자 >

import deepl

DEEPL_KEY = "제 API KEY는 비밀입니다"
tran = deepl.Translator(DEEPL_KEY)

resp = tran.translate_text( "Hello, World", source_lang = "EN", target_lang = "KO")

resp.text

반갑다 세상아

 

< 외국어 번역 함수 만들기 >

from pathlib import Path
import deepl
from step_1 import IN_DIR
from step_2_2 import read_text

def read_text_translated(path: Path) -> list :
    
    text_list = read_text(path) # 문자 인식 함수

    DEEPL_KEY = "API 키"

    tran = deepl.Translator(DEEPL_KEY)

    result = []

    for coords, text, prob in text_list :
        resp = tran.translate_text(text, target_lang = "KO")
        result.append((coords, resp.text, prob))
    
    return result

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

예시로 쓸 사진

[ (
	[
	[85, 288], [1088, 288], [1088, 457], [85, 457]], # 문자 위치
	'채식주의자로 살기', # 번역 결과
	0.9799573460577209 # 인식률
  ),
 
	(
	[[77, 417], [1159, 417], [1159, 574], [77, 574]],
	'정말 아까운 기회다',
	0.501874285483583
	)
]
  • '채식주의자로 살기란 정말 아까운 기회다' 로 번역한 모습

언어유희까지도 문맥으로 파악했다

 

 

< 이미지에 번역된 문장까지 표시해서 함께 출력하기 >

  • Ch.5 (1)에서 만들었던 것 처럼..
  • 인식률 0.75를 기준으로 색깔 박스로 바운딩
  • 여기서는 RGBA 모드를 사용해서, 불투명도를 적용할 수 있도록 함
  • 번역된 텍스트가 바운딩 박스의 첫번째 좌표(왼쪽 상단)에 흰색 글자로 위치
from pathlib import Path
from PIL import Image, ImageDraw, ImageFont
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")
    font = ImageFont.truetype(IN_DIR / "Pretendard-Bold.ttf", size = 60)
    
    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, 255, 0, 100 ),
        )

        draw.text(
            xy = box[0],
            text = text,
            fill = ( 255, 255, 255 ),
            font = font
        )
    
    img.save(OUT_3_3)

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

결과입니다

 

< (1) 에서처럼 이 기능을 웹 앱으로 만들어 보기 >

  • (1)에서 했던 것 처럼, pillow 패키지를 사용
from pathlib import Path
import streamlit as st
from step_1 import OUT_DIR
from step_3_3 import OUT_3_3, read_text_and_fill_area

st.title("이지우의 (번역기능이 추가된) 문자 인식 웹 앱")

uploaded = st.file_uploader("인식할 이미지를 선택하세요.")

if uploaded is not None :
    
    tmp_path = OUT_DIR / f"{Path(__file__).stem}.tmp"
    tmp_path.write_bytes(uploaded.getvalue())

    col_left, col_right = st.columns(2)

    with col_left :  
        st.subheader("원본 이미지")
        st.image(tmp_path.as_posix())
    
    with col_right :
        st.subheader("문자 인식 + 번역 결과")
        
        # spinner
        with st.spinner(text = "문자를 인식하고 번역하는 중입니다...") :
            read_text_and_fill_area(tmp_path)
        
        st.image(OUT_3_3.as_posix())

 

< 무한도전짤 수출을 위한, 무도짤 번역기로 바꾸기 >

  • 한국어(source) → 영어(target) 로 번역을 바꾸기
    for coords, text, prob in text_list :
        resp = tran.translate_text(text, source_lang = "KO", target_lang = "EN-US")
        result.append((coords, resp.text, prob))
  • 폰트 컬러와 사이즈를 조금 수정해주면.

영어를 잘하는 박명수로 만들 수 있다

'짧은 호흡 > Python' 카테고리의 다른 글

[파이썬] Ch.8 (2) 키워드별 경쟁강도 분석 웹 앱  (0) 2026.07.10
[파이썬] Ch.8 (1) 쇼핑 키워드 데이터 수집 + 정제  (0) 2026.07.09
[파이썬] Ch.5 (1) 광학 문자 인식 + 웹 앱 만들기  (0) 2026.07.04
[파이썬] Ch.2 데이터 프레임 + matplotlib 시각화  (0) 2026.07.02
[파이썬] Ch.1 폴더 크기 측정 + 데이터 시각화  (0) 2026.06.29
'짧은 호흡/Python' 카테고리의 다른 글
  • [파이썬] Ch.8 (2) 키워드별 경쟁강도 분석 웹 앱
  • [파이썬] Ch.8 (1) 쇼핑 키워드 데이터 수집 + 정제
  • [파이썬] Ch.5 (1) 광학 문자 인식 + 웹 앱 만들기
  • [파이썬] Ch.2 데이터 프레임 + matplotlib 시각화
jiwoo.lee
jiwoo.lee
jiwoo 님의 블로그 입니다.
  • jiwoo.lee
    jiwoo.lee
    jiwoo.lee
  • 전체
    오늘
    어제
    • 분류 전체보기 (9)
      • 이야기 (0)
      • 긴 호흡 (0)
      • 짧은 호흡 (9)
        • Python (8)
        • Git (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
jiwoo.lee
[파이썬] Ch.5 (2) 광학 문자 인식 + DeepL API 번역
상단으로

티스토리툴바