OCR
그림 속 글자를 읽어 문자로 바꾸는 일
- OCR (Optical Character Recognition, 광학 문자 인식)은 그림 속의 글자를 컴퓨터가 다룰 수 있는 문자로 바꾸는 일이에요.
- 한 번에 되지 않고 글자 자리 찾기 → 반듯하게 펴기 → 읽어 내기 → 다듬기의 여러 단계를 거쳐요.
- 요즘 방식은 글자를 한 자씩 떼어 보지 않고 줄 단위로 훑으며 앞뒤 글자를 함께 봐요.
- 마지막에 사전과 문맥으로 메우는 단계가 성능을 크게 좌우해요. 흐린 한 글자는 주변이 대신 알려 줘요.
- 반듯한 인쇄물은 잘 읽지만 기울고 구겨지고 손으로 쓴 글씨에서는 여전히 실수가 나요.
목차
1비유로 이해하기
오래된 비석에 새겨진 글씨는 눈으로 봐서는 잘 읽히지 않아요. 그래서 종이를 대고 먹을 두드려 획을 떠내는데, 이 탁본을 뜨는 과정이 곧 읽는 과정이에요.
순서가 정해져 있어요. 먼저 비석 어디에 글자가 새겨져 있는지 면을 찾고, 그 면에만 종이를 대요. 종이는 주름 없이 팽팽하게 붙여야 해요. 비뚤게 붙이면 획이 늘어나거나 뭉개져서 다 뜨고 나서 알아보기 어려워요. 먹도 한쪽만 진하지 않게 고르게 두드려야 해요.
떠낸 종이는 한 자씩이 아니라 한 줄씩 읽어 내려가요. 닳아 없어진 글자는 억지로 읽지 않고 남겨 뒀다가, 앞뒤 문장이 무슨 이야기인지 짚어 가며 마지막에 채워요.
OCR이 하는 일이 이 판독이에요. 흐릿한 획 하나를 노려보는 대신, 자리를 잡고 반듯하게 편 뒤 앞뒤를 함께 보며 메워 나가요.
2자세히 알아보기
글자가 있는 자리부터 찾아요
간판 사진 한 장에는 글자보다 글자 아닌 것이 훨씬 많아요. 그래서 첫 단계는 읽는 게 아니라 글자가 모여 있는 자리를 네모로 찾아내는 일이에요. 이 단계를 건너뛰고 화면 전체를 읽으려 들면 벽돌 무늬나 나뭇가지를 글자로 잘못 읽어요.
찾는 단위는 보통 줄이에요. 한 자씩 찾기보다 가로로 이어진 글자 무리를 하나의 띠로 잡는 편이 안정적이거든요. 표나 영수증처럼 칸이 나뉜 문서는 칸의 경계선까지 함께 찾아 두면 나중에 어느 값이 어느 항목인지 맞춰 넣기 쉬워요.
자리를 찾고 나면 그 부분만 잘라 내 다음 단계로 넘겨요. 읽어야 할 그림이 몇 배로 줄어드니 계산도 그만큼 가벼워져요.
반듯하게 펴 놓는 앞손질
잘라 낸 띠를 그대로 읽지는 않아요. 사진 속 글자는 기울어져 있고, 한쪽만 밝고, 책의 가운데처럼 굽어 있기도 해요. 그래서 글자가 가로로 눕도록 돌리고, 밝기를 고르게 펴고, 굽은 면을 평평하게 펴는 손질을 먼저 해요.
이 앞손질이 결과를 크게 바꿔요. 같은 문서라도 비스듬히 찍은 사진과 반듯하게 찍은 사진의 인식률 차이가 눈에 띄게 나요. 문서 촬영 앱이 네 귀퉁이를 잡아 화면을 반듯한 사각형으로 펴 주는 기능을 넣어 두는 이유예요.
밝기를 다루는 방식도 중요해요. 종이 전체에 하나의 기준을 적용하면 그늘진 쪽 글자가 통째로 사라져요. 화면을 작은 구역으로 나눠 구역마다 따로 기준을 잡으면 얼룩진 사진에서도 획이 살아남아요.
한 자씩이 아니라 줄로 읽어요
예전 방식은 글자를 하나씩 오려 내 모양을 견주는 쪽이었어요. 이 방식은 글자 사이가 붙어 있거나 획이 끊기면 곧바로 무너져요. 어디서 잘라야 할지부터 정할 수 없으니까요.
요즘 방식은 자르지 않아요. 띠 하나를 왼쪽부터 오른쪽으로 훑으면서 글자를 차례로 뱉어 내요. 어디까지가 한 글자인지 미리 정하지 않고, 훑는 과정에서 자연스럽게 경계가 정해져요. 붙어 쓴 손글씨나 흘림체에 훨씬 강한 이유예요.
앞뒤를 함께 본다는 점도 달라요. 지금 획이 애매해도 앞에 나온 글자들이 힌트가 돼요. 앞의 글자가 숫자였다면 다음 것도 숫자일 가능성이 높고, 앞이 한글이었다면 갑자기 낯선 기호가 나올 가능성은 낮아요. 이 판단이 인식 안에 녹아 있어요.
사전과 문맥이 마무리를 해요
읽어 낸 결과를 그대로 내보내지 않아요. 모양이 닮은 글자들이 늘 말썽이거든요. 숫자 0과 알파벳 O, 숫자 1과 세로줄, 한글의 '흐'와 '호'처럼 획 하나 차이인 짝들이에요.
그래서 아는 낱말 목록과 문맥으로 메우는 단계를 둬요. 앞뒤가 지명이면 지명 목록과 견주고, 전화번호 칸이면 숫자만 오도록 제한하고, 날짜 칸이면 있을 수 없는 값을 걸러 내요. 서식이 정해진 문서일수록 이 단계가 잘 먹혀요.
요즘은 이 뒷정리를 언어 모델에 맡기기도 해요. 읽어 낸 문장을 통째로 넣어 어색한 부분을 고치게 하는 식이에요. 다만 원문에 없던 말을 그럴듯하게 지어내는 일도 생기니, 숫자나 이름처럼 틀리면 곤란한 값은 원본과 다시 맞춰 봐야 해요.
한국어는 글자 종류가 많아요
알파벳은 대소문자를 합쳐도 수십 자예요. 한글은 자음과 모음이 어울려 만들어지는 글자가 수천 자에 이르고, 한자까지 섞이면 더 늘어요. 골라야 할 후보가 많다는 것 자체가 어려움이에요.
모양이 비슷한 짝도 많아요. 받침 하나, 획 하나가 다른 글자들이 촘촘히 있어서, 인쇄가 조금만 흐려도 다른 글자로 넘어가요. 세로쓰기나 오래된 서체가 섞이면 더 까다로워져요.
그래서 한국어를 다루는 도구는 학습에 쓰는 글자 자료를 따로 챙겨요. 여러 서체, 여러 크기, 일부러 흐리게 만든 견본을 잔뜩 만들어 학습시키는 방식이 널리 쓰여요.
3조금 더 정확하게
성능은 두 가지로 나눠 재요. 글자 하나를 얼마나 틀리는지와 낱말 하나를 얼마나 틀리는지예요. 글자 단위로는 잘 맞아도 낱말 하나에 오자가 하나만 있으면 그 낱말은 틀린 것으로 세니, 두 값은 꽤 벌어져요. 검색이 목적이면 낱말 쪽이, 원문을 그대로 옮기는 게 목적이면 글자 쪽이 더 중요해요.
읽어 낸 글자에는 자리 정보가 따라붙어요. 어느 네모 안에서 나온 글자인지가 함께 저장되기 때문에, 사진 위에 번역을 겹쳐 보여 주거나 원문에서 그 대목을 짚어 주는 일이 가능해요.
비유가 어긋나는 지점도 있어요. 탁본을 읽는 사람은 "이 자리는 도저히 못 읽겠다"며 빈칸으로 남겨 둘 수 있지만, OCR은 웬만하면 답을 내놔요. 확신이 낮아도 가장 그럴듯한 글자를 채워 넣기 때문에, 틀린 글자가 아무렇지 않게 섞여 있어요. 그래서 결과에 붙은 확신 값을 함께 보고 낮은 대목은 사람이 확인하도록 넘기는 설계가 필요해요. 또 사람은 남은 획의 깊이와 방향을 보고 원래 글자를 되짚지만, OCR은 학습에서 본 글자 모양과 얼마나 닮았는지를 볼 뿐이에요.
4직접 해보기
5흔한 오해
사진을 넣으면 글자가 그대로 나온다고 생각하기 쉽지만, 실제로는 자리 찾기와 앞손질이 결과를 크게 좌우해서 어떻게 찍었는지가 인식률을 가르는 경우가 많아요.
글자마다 따로 알아본다고 여기기 쉽지만, 실제로는 줄 단위로 훑으며 앞뒤 글자를 함께 보고 판단해요.
결과에 글자가 나왔으면 맞는 것이라고 믿기 쉽지만, 실제로는 확신이 낮아도 가장 그럴듯한 글자를 채워 넣기 때문에 숫자나 이름은 원본과 다시 맞춰 봐야 해요.
7한 줄 요약
그러니까OCR은 그림 속 글자를 자리부터 찾아 반듯하게 편 뒤 줄 단위로 읽어 내는 일이고, 마지막의 문맥 보정이 품질을 가려요.
잘못된 내용이나 더 좋은 비유가 있나요? 수정 제안 보내기 · 마지막 수정2026-09-02