AI 이미지에 한글 글자 넣기 — 무료 로컬 SDXL로 72장, 한글을 요청한 36장에 한글은 없었습니다
「행복」을 넣은 포스터를 그려 달라고 했더니, 초록 바탕 한가운데에 이런 글자가 찍혀 나왔습니다.
「おまなちのけします。」 한글이 아니라 일본 히라가나처럼 생긴 문장입니다. 그런데 이 그림을 한국어 설정의 OCR(이미지 속 글자를 읽는 프로그램)에 넣으면 「ㅜ310104바초리」가 나옵니다. 판독에 한글 자모가 섞였으니, 자동 집계는 이 장을 「한글 글자가 나온 그림」으로 셉니다.
무료 로컬 이미지 AI로 한글 제목이 들어간 썸네일을 뽑을 수 있는지 보려고 이번에 두 SDXL 체크포인트로 포스터 72장을 그렸습니다. 짧게 답하면 안 됩니다. 요청한 문구가 정확히 나온 그림은 한글 0장, 영문 1장이었습니다. 원본을 한 장씩 분류해 보니 한글을 요청한 36장 어디에도 한글처럼 생긴 글자가 없었습니다. 이 두 모델로 한글 썸네일을 만든다면 저는 배경만 뽑고 글자는 편집기에서 얹겠습니다.
위 그림은 이 글의 다른 문제도 보여 줍니다. 저는 7월에 같은 주소에 「정답률은 둘 다 0이지만 한글 요청이 글자조차 덜 읽힌다」고 썼습니다. 그 근거가 방금 본 것 같은 OCR 문자 판정이었습니다.
7월에 쓴 결론은 이번에 재현되지 않았습니다
7월 기록(같은 두 체크포인트, 같은 요청문, 같은 생성 설정)에서 요청한 문자 체계의 글자가 OCR에 잡힌 그림은 한글 9장, 영문 23장이었고, 짝지어 비교하면 우연으로 보기 어려운 차이(p=0.0043)였습니다. 이번에는 시드만 새로 뽑아 72장을 다시 그렸습니다.
| 같은 문자 체계 글자가 읽힌 그림 (각 36장) | 한글 요청 | 영문 요청 | 짝비교 p |
|---|---|---|---|
| 7월 기록 · 한 줄 판독 | 9 | 23 | 0.0043 |
| 이번 72장 · 7월과 같은 한 줄 판독 | 19 | 14 | 0.27 |
| 이번 72장 · 네 가지 판독 중 가장 가까운 값(빈 값 포함) | 20 | 14 | 0.15 |
| 이번 72장 · 비어 있지 않은 판독 우선(최종 집계) | 33 | 35 | 0.63 |
7월과 똑같이 읽어도 방향이 뒤집혔고, 판독 규칙만 바꿔도 값이 크게 움직였습니다. 여기에 맨 위 그림처럼 한국어 OCR은 히라가나도, 라틴 문자 잡음도 한글 자모로 옮겨 적습니다. 이 지표로는 모델이 한글을 얼마나 그렸는지 알 수 없습니다. 7월의 그 결론은 거둬들입니다.
남는 것은 정확 일치입니다. 한 번도 흔들리지 않은 값이 이것이고, 한글 0/36은 7월과 이번 모두 같습니다.
원본을 한 장씩 보면: 한글 대신 나온 것들
OCR 판정을 믿기 어려워서 72장을 원본 크기로 한 장씩 분류했습니다. 1차 분류는 AI 도구로 했고, 발행 전 검수에서 제가 다시 봅니다. 두 체크포인트가 한글 대신 내놓은 것은 서로 달랐습니다.
Animagine XL은 한글 자리를 라틴 문자나 가나로 채웠습니다. 한글 요청 18장 중 12장은 알파벳처럼 생긴 글씨였고, 6장은 일본 가나·한자처럼 생긴 글자였습니다. 「사랑」을 요청한 첫 장은 이랬습니다.
Illustrious XL은 프롬프트 속 단어를 그렸습니다. 요청문은 「A simple poster with the exact text '{text}' in bold sans-serif, centered, plain background」였습니다. 글꼴을 설명하려고 넣은 「sans-serif」가 그림 속 글씨가 됐습니다. SCHOOL을 요청한 그림의 제목 자리입니다.
더 눈에 띄는 것도 있었습니다. Illustrious 그림 36장 중 21장에 커다란 해골 캐릭터가 들어갔습니다. 요청 문구와는 아무 상관 없는 그림입니다. 비디오 게임 「언더테일」의 캐릭터 샌즈(Sans)를 닮았습니다. 애니메이션 그림 위주로 학습된 체크포인트가 프롬프트의 「sans」를 캐릭터 이름으로 읽은 것으로 보입니다. 72장이 모두 「sans-serif」가 든 같은 요청문으로 그려졌기 때문에, 이 단어를 빼면 해골이 사라지는지는 이 기록에 없습니다.
한글처럼 생긴 조각이 나온 곳은 72장 중 한 장뿐이었습니다. 그것도 영문 OCEAN을 요청한 그림이었습니다.
정확히 맞은 영문 한 장은 Animagine XL의 LOVE입니다. 이 장만 놓고 보면 영문은 된다고 착각하기 쉽습니다. 같은 단어쌍의 다른 회차는 「Love teifef」나 「Love tead」처럼 뒤가 무너졌고, 36쌍을 짝지어 봐도 영문만 맞은 쌍은 이 하나뿐이었습니다.
OCR이 첫 장부터 틀린 판독을 골랐습니다
첫 그림이 나오자마자 채점 쪽에서 문제가 드러났습니다. 실행 화면입니다.
그림에는 「Love teifef」가 분명히 있는데 판독이 빈 값으로 기록됐습니다. 채점은 OCR의 레이아웃 설정 네 가지(한 줄, 문단, 흩어진 글씨 등)로 읽은 뒤 요청어와 가장 가까운 판독을 고르는 방식이었습니다. 「LOVE」와 비교하면 빈 문자열이 긴 오답보다 가까운 경우가 생깁니다. 비어 있지 않은 판독을 먼저 고르도록 채점 규칙을 고치고, 저장된 72장을 다시 읽었습니다. 판독이 바뀐 그림이 37장이었습니다. 위의 최종 집계와 표 맨 아래 줄은 고친 규칙의 값입니다. 고친 규칙으로 한 번 더 돌려 값이 더 바뀌지 않는 것을 확인했습니다.
OCR 자체의 실력은 따로 확인했습니다. 같은 단어 12개를 깨끗한 폰트(Noto Sans CJK Bold)로 그린 교정 표본은 한글 6개, 영문 6개를 모두 정확히 읽었습니다. 반듯한 글자라면 OCR은 한글도 읽습니다. 못 읽은 것은 모델이 그린 글자였습니다.
한글 썸네일, 이렇게 나눠 만드세요
그림 한 장은 RTX 4070 Ti SUPER에서 6초 남짓이면 나왔습니다. 배경을 여러 장 뽑아 고르는 데는 충분히 빠릅니다. 글자만 모델에 맡기지 않으면 됩니다.
- 이미지 모델에는 글자 없는 배경만 요청합니다. 프롬프트에서 「text」, 「bold」, 「sans-serif」 같은 글자·글꼴 단어를 뺍니다. 이번 테스트에서는 이런 단어가 그림 속 글씨와 캐릭터로 나왔습니다. 네거티브 프롬프트에
text, letters, watermark를 넣는 방법도 있습니다. 이번 72장은 글씨를 그리게 하는 것이 목적이라 네거티브에 text가 없었고, 그래서 그 효과는 이 기록에 없습니다. - 제목을 넣을 빈 자리가 있는 배경을 고릅니다. 이번 그림들은 요청하지 않은 의사 글씨를 배경에 채워 넣는 경우가 많았습니다. 글씨가 붙은 배경은 지우느라 시간을 쓰기보다 다시 뽑는 편이 빠릅니다.
- 한글 문구는 편집기에서 텍스트 레이어로 얹습니다. 레이어를 지원하는 이미지 편집기(GIMP 등)에서 한글 폰트로 씁니다. 위 교정 표본처럼 반듯한 폰트로 쓴 한글은 OCR도 그대로 읽었습니다.
- 최종 파일을 확대해서 직접 읽습니다. 텍스트 레이어로 얹었어도 배경에 남은 의사 글씨가 섞여 보일 수 있습니다. OCR로 한 번 더 확인하려면
tesseract final.png - -l kor --psm 7처럼 돌릴 수 있습니다. 다만 이번에 본 대로 한국어 OCR은 한글이 아닌 글자도 한글 자모로 옮기므로, 판독 결과보다 눈으로 보는 쪽을 기준으로 둡니다.
모델 안에서 한글을 바로 써 주는 도구가 필요하다면 이 두 체크포인트는 답이 아닙니다. 로컬 SDXL로 그림 자체를 뽑는 과정은 로컬 SDXL 이미지 생성 실측에 따로 있습니다.
재현과 원자료
생성과 OCR 채점은 run_hangul_img.py(1.1판, 비어 있지 않은 판독 우선), 단어쌍은 hangul_img_cases.json, 채점 함수는 hangul_score.py입니다. 이번 기록의 기준 파일은 test_runs/sdxl-hangul-text-20260924/run.yaml이고, 같은 폴더에 집계(aggregate.json), 회차별 판독(results.json), 판독 규칙 변경 전후 비교(ocr_selection_audit.json), 판독 규칙 세 가지로 다시 센 문자 체계 판정(script_match_rule_audit.json), 72장 분류(visual_audit.json), OCR 교정 표본(calibration.json)이 있습니다. 7월 기록은 test_runs/sdxl-hangul-text-20260731/입니다. 이 경로들은 비공개 작업 폴더라 외부에서 열 수 없습니다. 본문의 생성 이미지 다섯 장과 실행 중 터미널 화면 캡처 두 장이 직접 확인할 수 있는 표본입니다.
재현: cinevyze-bench의 run_hangul_img.py·hangul_img_cases.json·hangul_score.py. 생성 이미지 72장과 실행 기록은 공개하지 않습니다.
체크포인트 두 개, 짧은 단어 여섯 쌍, 포스터 요청문 한 종류에서 나온 결과입니다. 다른 SDXL 체크포인트나 글자 생성을 내세우는 이미지 모델에는 그대로 옮길 수 없습니다.
생성은 로컬 ComfyUI에서 두 SDXL 체크포인트로, 판독은 Tesseract로 실제로 돌렸습니다. 측정 코드와 채점 규칙 수정, 판독 규칙 비교 계산, 72장 1차 분류, 글 작성에 AI 도구를 썼습니다. 발행 전 검수와 72장 분류 확인은 제가 합니다.
시네 · cinevyze 운영자 — AI 도구의 출력을 원본과 채점 기준에 대조합니다. 이번 측정은 RTX 4070 Ti SUPER가 있는 Linux PC의 로컬 ComfyUI(Animagine XL 4.0 Opt, Illustrious XL v2.0)와 Tesseract로 했고, 측정 시점은 2026년 9월입니다. 운영자 소개
댓글
댓글 쓰기