OCR을 돌렸는데 한글 받침이 뭉개지거나 외계어로 나올 때, 인코딩 깨짐과 인식 오류를 먼저 구분하고 한국어 모델 지정·해상도·전처리 순으로 점검하는 방법을 정리했습니다.

스캔한 계약서를 OCR(이미지 속 글자를 텍스트로 바꿔주는 기술)로 돌렸는데 "계약"이 "계악"이 되거나 아예 알 수 없는 기호로 나온다면, 점검 순서는 정해져 있습니다.
한국어 인식 모델이 실제로 적용됐는지 → 결과 파일의 문자 인코딩 → 원본 이미지 해상도와 전처리 순서입니다. 앞의 두 개는 설정만 바꾸면 되고 되돌리기도 쉬워서 먼저 봅니다. 되돌리기 쉽게 하려면 원본 이미지는 손대지 않고 복사본으로만 작업하고, 출력 파일명을 result_kor, result_kor_eng처럼 단계별로 나눠 저장하세요. 결과가 나빠지면 추가한 옵션(-l kor+eng 등)을 빼고 직전 단계 명령으로 그대로 다시 실행하면 원래 상태로 돌아옵니다.
시작 전에 한 가지 짚을 게 있습니다. 화면에 이상하게 보이는 원인이 OCR이 아닐 수도 있습니다.
깨짐과 오인식은 다른 문제입니다
먼저 결과를 구분하세요. 둘은 원인이 완전히 다릅니다.
| 화면에 보이는 모습 | 정황상 의심할 것 |
|---|---|
???, □□□, 계약 같은 기호·라틴문자 뭉치 |
문자 인코딩 또는 폰트 문제 |
| "계약서" → "계악서", "임대" → "임데" | OCR 인식 정확도 문제 |
| 글자 일부만 빠지고 나머지는 정상 | 이미지 품질 또는 영역 검출 문제 |
구분하는 가장 빠른 방법은 결과 파일을 편집기에서 인코딩을 바꿔가며 다시 열어보는 것입니다.
같은 결과 파일을 인코딩을 UTF-8로 지정해 한 번, CP949(ANSI)로 지정해 한 번 각각 열어보세요. 어느 한쪽 인코딩에서 한글이 정상으로 보이면 OCR은 제대로 읽었고 인코딩 문제이며, 이때는 OCR 설정을 아무리 만져도 안 바뀝니다. 반대로 모든 인코딩에서 글자 자체가 다르게("계약"이 "계악"으로) 보이면 인식 오류입니다. 모지바케 문자열은 복사해 다른 프로그램에 붙여도 그대로 유지되므로, 붙여넣기만으로는 두 원인을 구분할 수 없습니다.
💡 텍스트 파일을 열 때 인코딩을 UTF-8로 지정해 다시 열어보세요. 윈도우 메모장은 파일 열기 창 아래쪽에서, VS Code 같은 편집기는 하단 상태 표시줄에서 인코딩을 바꿀 수 있습니다.
붙여넣기에서도 똑같이 깨져 있다면 다음으로 넘어갑니다.

터미널을 쓸 수 없다면: GUI·클라우드 경로
터미널을 열지 않고 스캔 계약서만 처리하는 경우라면, 아래 경로부터 보세요. 아래 Tesseract·파이썬 설명은 명령어를 직접 입력할 수 있는 환경을 전제로 합니다.
PDF 편집기·스캐너 앱을 쓰는 경우. OCR을 실행하는 대화상자나 환경설정에 인식 언어를 고르는 항목이 있습니다. 여기서 한국어를 선택했는지 먼저 확인하고, 선택 후 같은 파일을 다시 OCR 처리해 결과를 비교하세요. 원본 파일은 덮어쓰지 말고 다른 이름으로 저장해두면 설정을 잘못 바꿨을 때 되돌리기 쉽습니다.
클라우드 OCR 서비스에 웹으로 올리는 경우. 업로드 화면에서 문서 언어를 한국어로 지정할 수 있는지 보고, 지원 언어 목록에 한국어가 있는지 확인합니다. 언어를 바꿔 두 번 올려 결과를 비교하면 언어 설정 문제인지 이미지 품질 문제인지 갈립니다.
두 경로에서 언어를 한국어로 맞췄는데도 받침이 뭉개진다면 이미지 쪽 문제일 가능성이 높으니, 아래 이미지 전처리 항목으로 넘어가세요.
한국어 모델이 실제로 지정됐는지 확인
받침이 뭉개지는 증상에서 가장 먼저 의심할 곳입니다. OCR 엔진의 기본값이 영어로 잡혀 있는 경우가 있어, 언어를 지정하지 않으면 한글을 비슷한 영문·기호로 억지로 맞출 수 있습니다.
엔진별로 언어를 지정하는 방식이 다릅니다. 옵션 이름과 설치 방법은 버전에 따라 달라지므로, 각 엔진의 공식 문서나 GitHub README에서 지금 쓰는 버전 기준으로 확인하세요.
Tesseract — 구글이 관리하는 오픈소스 OCR 엔진입니다. 터미널(명령어를 직접 입력하는 검은 화면 프로그램)에서 언어 코드를 -l 뒤에 넘깁니다.
tesseract scan.png result -l kor
scan.png를 한국어로 읽어 result.txt로 저장하라는 명령입니다.
여기서 막히는 경우가 있습니다. 언어 데이터 파일이 따로 설치돼 있어야 합니다. 없으면 한국어 데이터를 못 찾았다는 에러가 뜹니다. 설치된 언어 목록은 이렇게 확인합니다.
tesseract --list-langs
목록에 kor이 없으면 한국어 데이터를 추가로 설치해야 합니다. 설치 경로와 파일명 규칙은 운영체제별로 다르니 공식 설치 문서를 확인하세요.
PaddleOCR·EasyOCR 같은 파이썬 기반 엔진은 코드 안에서 언어를 지정합니다. 이 엔진들은 첫 실행 때 해당 언어 모델을 자동으로 내려받는 구조라, 네트워크가 막힌 환경에서는 다운로드부터 실패할 수 있습니다.
클라우드 API(구글, 네이버, MS 등의 OCR 서비스)를 쓰는 경우엔 요청에 언어 힌트를 넣을 수 있는지, 한국어를 공식 지원하는지를 해당 서비스 문서에서 확인합니다. 지원 언어 목록에 한국어가 없으면 설정으로 해결할 수 없습니다.
언어를 여러 개 섞을 때
계약서는 한글과 영문·숫자가 섞여 있어서 여러 언어를 함께 지정하기도 합니다. Tesseract는 -l kor+eng 처럼 + 로 이어 붙입니다.
다만 언어를 많이 넣을수록 후보가 늘어 오히려 엉뚱한 문자로 빠질 수 있습니다. 한글이 주로 쓰인 문서라면 한국어만 먼저 시도해 결과를 비교해보는 편이 낫습니다.

그래도 받침만 뭉개진다면 이미지 쪽
언어 설정이 맞는데도 "않"이 "안"으로, "없"이 "었"으로 나온다면 원본 이미지에서 받침 픽셀이 살아있지 않은 경우를 의심할 수 있습니다.
한글은 받침이 글자 아래쪽 작은 영역에 몰려 있어서, 해상도가 낮거나 압축이 심하면 그 부분이 먼저 뭉개집니다. 영문은 같은 조건에서도 잘 버티는데 한글만 유독 깨지는 이유가 이것입니다.
점검 순서:
- ☐스캔 원본을 확대해서 받침이 사람 눈에 구분되는지 본다 (사람이 못 읽으면 OCR도 못 읽습니다)
- ☐스캔을 다시 할 수 있다면 더 높은 해상도로 다시 뜬다
- ☐JPEG 대신 PNG처럼 손실 없는 형식으로 저장한다
- ☐휴대폰으로 찍은 사진이면 기울기를 바로잡는다
- ☐그림자·조명 얼룩이 있으면 밝기를 고르게 보정한다
원본 스캔 ↓ 기울기 보정 ↓ 회색조 변환 ↓ 이진화(흑백 분리) ↓ OCR 실행
전처리는 한 번에 다 넣지 말고 하나씩 추가하면서 결과를 비교하세요. 이진화 기준값을 너무 세게 잡으면 오히려 받침이 배경으로 날아가 버립니다. 단계마다 원본 이미지는 그대로 두고 scan_gray.png, scan_bin.png처럼 파일을 따로 저장해두면, 결과가 나빠졌을 때 방금 추가한 단계의 파일을 버리고 직전 파일로 다시 OCR을 돌려 되돌릴 수 있습니다.
계약서 여러 장을 일괄 처리하는 경우라면, 전처리 강도를 한 장에서 먼저 맞춰두고 나머지에 적용하는 방식이 안전합니다.
문서 구조 때문에 틀리는 경우
표가 들어간 계약서에서 나타날 수 있습니다. 셀 경계선을 글자로 읽어 ㅣ, ㅡ, 1 같은 문자가 끼어들거나, 두 칸의 글자가 한 줄로 붙어 나옵니다.
이럴 때 손볼 것은 두 가지입니다.
첫째, 페이지 분할 방식. Tesseract에서 페이지를 어떻게 나눠 읽을지 지정하는 옵션은 --psm이고, 셀 하나를 한 줄로 읽히는 값은 --psm 7입니다(예: tesseract cell.png out -l kor --psm 7). 표 안의 셀을 잘라서 각각 넣고 "한 줄" 모드로 읽히면 결과가 달라지는 경우가 있습니다. 사용 가능한 모드 번호는 tesseract --version으로 버전을 먼저 확인한 뒤, 버전에 따라 따로 있는 tesseract --help-psm 또는 tesseract --help-extra 출력에서 확인하세요.
둘째, 영역을 직접 잘라서 넣기. 전체 페이지를 한 번에 던지는 대신 필요한 항목(계약 금액, 당사자명) 영역만 잘라 OCR을 돌리면 주변 선과 잡음의 영향을 줄일 수 있습니다.
자주 막히는 부분
언어 옵션을 바꿨는데 결과가 똑같습니다. 이전 결과 파일을 다시 열고 있을 가능성이 있습니다. 출력 파일명을 새로 지정하고 파일의 수정 시각을 확인하세요.
GUI 프로그램에서 언어 설정을 못 찾습니다. OCR 기능이 들어간 PDF 편집기·스캐너 앱은 언어 선택이 환경설정이나 OCR 실행 대화상자 안에 들어 있을 수 있습니다. 설정 창의 검색 기능으로 "언어" 또는 "OCR"을 찾아보세요.
엔진을 바꾸는 게 빠를 때도 있습니다. 같은 이미지를 서로 다른 엔진 두세 개에 넣어 결과를 비교해보면 전처리를 오래 만지는 것보다 판단이 빠릅니다. 엔진마다 학습 데이터가 달라서, 손글씨가 섞인 문서나 도장이 겹친 부분에서 결과 차이가 벌어지기도 합니다.
중요 문서는 검수 절차를 남겨두세요. OCR 결과는 숫자 하나가 틀려도 계약서에서는 치명적입니다. 금액·날짜·이름 같은 항목은 원본과 눈으로 대조하는 단계를 빼지 않는 편이 좋습니다.
점검하는 순서를 지키는 것이 요점입니다. 한국어 모델이 실제로 걸려 있는지, 지금 보고 있는 깨짐이 인코딩 문제인지, 이미지에서 받침 픽셀이 살아있는지, 표 구조 때문에 --psm 설정이 어긋났는지, 그리고 엔진을 바꿔 비교할 여지가 있는지 — 이 순서대로 확인하면 불필요한 전처리 삽질을 줄일 수 있습니다.

'개발 & 기술 > 컴퓨터 비전' 카테고리의 다른 글
| 증명사진 AI로 만들 때 규격 안 맞을 때 — 크기·배경 맞추는 순서 (0) | 2026.09.02 |
|---|---|
| 스캔 PDF 글자 인식 안 될 때 원인 5가지와 점검 순서 (0) | 2026.08.26 |
| 명함 OCR 정리, 스마트폰만으로 자동화하는 순서 (0) | 2026.07.27 |
| 영수증 OCR 가계부 만들기: 스마트폰으로 시작하는 실전 가이드 (0) | 2026.07.23 |
| YOLO 라벨링 입문: Roboflow와 LabelImg 사용법 정리 (1) | 2026.07.19 |