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

< 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 |