광학 문자 인식

섬네일|300px|휴대용 스캐너를 이용한 스캔 및 실시간 광학 문자 인식(OCR) 과정 영상

**광학 문자 인식**(Optical character recognition, **OCR**) 또는 **광학 문자 판독기**는 타자, 손글씨 또는 인쇄된 텍스트 이미지를 스캔한 문서, 문서 사진, 장면 사진(예: 풍경 사진의 표지판 및 빌보드 텍스트) 또는 이미지 위에 겹쳐진 자막 텍스트(예: 텔레비전 방송)로부터 기계가 읽을 수 있는 인코딩된 텍스트로 전자적 또는 기계적으로 변환하는 것을 말한다.

여권 문서, 송장, 은행 명세서, 컴퓨터 영수증, 명함, 우편물, 인쇄된 데이터 또는 기타 적절한 문서 등 인쇄된 종이 데이터 기록으로부터 데이터 입력의 한 형태로 널리 사용된다. 이는 인쇄된 텍스트를 디지털화하여 전자적으로 편집, 검색, 보다 콤팩트하게 저장, 온라인 표시가 가능하게 하고, 인지 컴퓨팅, 기계 번역, (추출된) 텍스트 음성 변환, 핵심 데이터 및 텍스트 마이닝과 같은 기계 프로세스에 사용할 수 있게 하는 일반적인 방법이다. OCR은 패턴 인식, 인공지능 및 컴퓨터 비전의 한 연구 분야이다.

초기 버전은 각 문자의 이미지로 훈련을 받아야 했으며, 한 번에 하나의 글꼴만 처리할 수 있었다. 현재는 대부분의 글꼴에 대해 높은 수준의 정확도를 낼 수 있는 고급 시스템이 일반적이며, 다양한 이미지 파일 형식 입력을 지원한다. 일부 시스템은 이미지, 단, 기타 비텍스트 구성 요소를 포함하여 원본 페이지와 매우 유사하게 서식이 지정된 출력을 재현할 수 있다.

## 역사

초기 광학 문자 인식은 전보 관련 기술 및 시각 장애인을 위한 독서 장치 제작 기술로 거슬러 올라갈 수 있다. 1914년, 에마누엘 골드베르크는 문자를 읽고 이를 표준 전신 코드로 변환하는 기계를 개발했다. 동시에 에드먼드 에드워드 푸르니에 달브는 인쇄된 페이지 위를 움직일 때 특정 글자나 문자에 해당하는 톤을 생성하는 휴대용 스캐너인 옵토폰(Optophone)을 개발했다.

1920년대 후반부터 1930년대까지 에마누엘 골드베르크는 광학 코드 인식 시스템을 사용하여 마이크로필름 아카이브를 검색하는 이른바 "통계 기계"(Statistical Machine)를 개발했다. 1931년에 그는 이 발명으로 미국 특허 번호 1,838,389를 취득했다. 이 특허는 IBM이 인수했다.

### 시각 장애 사용자
1974년, 레이 커즈와일은 커즈와일 컴퓨터 프로덕츠(Kurzweil Computer Products, Inc.)를 설립하고 거의 모든 글꼴로 인쇄된 텍스트를 인식할 수 있는 전방위 폰트 OCR 개발을 계속했다. (커즈와일은 흔히 전방위 폰트 OCR을 발명한 것으로 알려져 있지만, 이는 1960년대 후반과 1970년대에 컴퓨스캔(CompuScan)을 포함한 회사들에서 이미 사용되고 있었다.) 커즈와일은 이 기술을 사용하여 컴퓨터가 시각 장애인에게 텍스트를 소리 내어 읽어주는 독서 장치를 만들었다. 이 장치에는 CCD 방식의 평판 스캐너와 텍스트 음성 합성기가 포함되었다. 1976년 1월 13일, 커즈와일과 전미 시각장애인 연맹 지도자들이 주도한 대대적인 기자 회견에서 완성된 제품이 공개되었다. 1978년, 커즈와일 컴퓨터 프로덕츠는 광학 문자 인식 컴퓨터 프로그램의 상업용 버전을 판매하기 시작했다. 렉시스는 첫 고객 중 하나였으며, 초기 온라인 데이터베이스에 법률 종이 문서와 뉴스 문서를 업로드하기 위해 이 프로그램을 구입했다. 2년 후, 커즈와일은 회사를 제록스에 매각했고, 제록스는 이를 결국 뉘앙스 커뮤니케이션즈와 합병한 스캔소프트(Scansoft)로 분사시켰다.

2000년대에 OCR은 클라우드 컴퓨팅 환경에서의 온라인 서비스(WebOCR)와 스마트폰에서 외국어 표지판을 실시간 번역하는 것과 같은 모바일 애플리케이션으로 제공되었다. 스마트폰과 스마트글래스의 등장으로 OCR은 기기의 카메라를 사용하여 캡처한 텍스트를 추출하는 인터넷 연결 모바일 기기 애플리케이션에서 사용될 수 있다. OCR 기능이 내장되지 않은 이러한 기기들은 일반적으로 OCR API를 사용하여 기기에서 캡처한 이미지 파일로부터 텍스트를 추출한다. OCR API는 추출된 텍스트와 함께 원본 이미지에서 감지된 텍스트의 위치 정보를 기기 앱으로 다시 전달하여 추가 처리(예: 텍스트 음성 변환)나 표시를 수행한다.

라틴 문자, 키릴 문자, 아랍 문자, 히브리 문자, 인도 문자, 벵골 문자, 데바나가리 문자, 타밀 문자, 중국어, 일본어 및 한국어 문자를 포함하여 가장 흔한 문자 체계에 대해 다양한 상업용 및 오픈 소스 OCR 시스템을 사용할 수 있다.

## 응용
OCR 엔진은 영수증, 송장, 수표 및 법률 청구 문서와 같은 다양한 주제에 특화된 소프트웨어 애플리케이션으로 발전해 왔다.

소프트웨어는 다음 용도로 사용될 수 있다:
* 비즈니스 문서(예: 수표 청산, 여권, 송장, 은행 명세서 및 영수증)를 위한 데이터 입력
* 자동 번호판 인식
* 공항에서의 여권 인식 및 정보 추출
* 보험 문서에서 핵심 정보 자동 추출
* 도로 표지판 인식
* 명함 정보를 연락처 목록으로 추출
* 인쇄된 문서의 텍스트 버전 생성(예: 프로젝트 구텐베르크를 위한 도서 스캔)
* 인쇄된 문서의 전자 이미지를 검색 가능하게 만들기(예: 구글 도서)
* 컴퓨터를 제어하기 위해 손글씨를 실시간으로 변환(펜 컴퓨팅)
* CAPTCHA 안티-봇 시스템의 견고성 테스트 또는 무력화(단, CAPTCHA는 OCR을 방지하기 위해 특별히 설계됨)
* 시각 장애 사용자를 위한 보조 기술
* 실시간으로 변하는 차량 설계에 적합한 데이터베이스 내 CAD 이미지를 식별하여 차량용 명령서 작성
* 스캔한 문서를 PDF로 변환하여 검색 가능하게 만들기

## 유형
* 광학 문자 인식(OCR): 타자된 텍스트를 한 번에 하나의 자체(glyph) 또는 문자씩 대상으로 한다.
* 광학 단어 인식: 타자된 텍스트를 한 번에 한 단어씩 대상으로 한다(공백을 띄어쓰기로 사용하는 언어의 경우). 보통 그냥 "OCR"이라고 부른다.
* 지능형 문자 인식(ICR): 보통 기계 학습을 포함하여 손으로 쓴 정자체나 필기체 텍스트를 한 번에 한 자체나 문자씩 대상으로 한다.
* 지능형 단어 인식(IWR): 손으로 쓴 정자체나 필기체 텍스트를 한 번에 한 단어씩 대상으로 한다. 이는 필기체에서 자체들이 분리되지 않는 언어에서 특히 유용하다.

OCR은 일반적으로 정적인 문서를 분석하는 오프라인 프로세스이다. 온라인 OCR API 서비스를 제공하는 클라우드 기반 서비스도 존재한다. 필기 인식의 입력으로 필기 동작 분석이 사용될 수 있다. 단지 자체와 단어의 모양을 사용하는 대신, 이 기술은 획이 그려지는 순서, 방향, 펜을 내리고 들어 올리는 패턴과 같은 움직임을 포착할 수 있다. 이러한 추가 정보는 프로세스를 더 정확하게 만들 수 있다. 이 기술은 "온라인 문자 인식", "동적 문자 인식", "실시간 문자 인식" 및 "지능형 문자 인식"으로도 알려져 있다.

## 기술

### 전처리
OCR 소프트웨어는 성공적인 인식 확률을 높이기 위해 종종 이미지를 전처리한다. 기술은 다음과 같다:
* 디스큐(De-skewing): 스캔 시 문서가 제대로 정렬되지 않은 경우, 텍스트 라인을 완벽하게 수평 또는 수직으로 만들기 위해 시계 방향 또는 반시계 방향으로 몇 도 정도 기울여야 할 수 있다.
* 데스페클(Despeckling): 양성 및 음성 점 제거, 가장자리 매끄럽게 처리.
* 이진화(Binarization): 이미지의 색상이나 그레이스케일을 흑백으로 변환하는 것(두 가지 색상만 있기 때문에 바이너리 이미지라고 함). 이 작업은 배경에서 텍스트(또는 다른 원하는 이미지 구성 요소)를 분리하는 간단한 방법으로 수행된다. 대부분의 상업용 인식 알고리즘은 바이너리 이미지에서만 작동하므로 이진화 작업이 필요하다. 또한 이진화의 효과는 문자 인식 품질에 상당한 영향을 미치며, 이미지 유형(스캔 문서, 장면 텍스트 이미지, 훼손된 역사적 문서 등)에 따라 적절한 이진화 방법을 신중하게 선택해야 한다.
* 선 제거: 자체가 아닌 박스와 선 정리.
* 레이아웃 분석 또는 구역화: 단, 단락, 캡션 등을 별개의 블록으로 식별. 다단 레이아웃과 표에서 특히 중요하다.
* 줄 및 단어 감지: 단어 및 문자 모양의 기준선을 설정하고 필요에 따라 단어를 분리.
* 문자 인식: 다언어 문서에서는 단어 수준에서 문자가 바뀔 수 있으므로, 특정 문자를 처리하기 위해 올바른 OCR을 호출하기 전에 문자를 식별해야 한다.
* 문자 분리 또는 세그먼테이션: 문자별 OCR의 경우, 이미지 노이즈로 인해 연결된 여러 문자를 분리해야 하며, 노이즈로 인해 조각난 단일 문자를 연결해야 한다.
* 가로세로비 및 축척 비율 정규화

고정폭 글꼴의 세그먼테이션은 수직 격자선이 검은색 영역과 가장 적게 교차하는 지점을 기준으로 이미지를 균일한 격자에 맞춤으로써 비교적 간단하게 수행된다. 비례 글꼴의 경우 글자 사이의 여백이 단어 사이의 여백보다 클 수 있고 수직선이 둘 이상의 문자와 교차할 수 있기 때문에 더 정교한 기술이 필요하다.

### 텍스트 인식
핵심 OCR 알고리즘에는 두 가지 기본 유형이 있으며, 이는 후보 문자들의 순위 목록을 생성할 수 있다.

* 매트릭스 매칭(Matrix matching)은 이미지를 픽셀 단위로 저장된 자체와 비교하는 것을 포함하며, 패턴 매칭, 패턴 인식 또는 이미지 상관으로도 알려져 있다. 이는 입력된 자체가 이미지의 나머지 부분으로부터 올바르게 분리되어야 하며, 저장된 자체와 유사한 글꼴 및 동일한 배율이어야 한다는 점에 의존한다. 이 기술은 타자된 텍스트에 가장 잘 작동하며 새로운 글꼴을 만났을 때는 잘 작동하지 않는다. 이는 초기 물리적 광전관 기반 OCR이 직접 구현했던 기술이다.
* 특징 추출(Feature extraction)은 자체를 선, 폐쇄 루프, 선 방향 및 선 교차점과 같은 "특징"으로 분해한다. 특징 추출은 표현의 차원을 줄이고 인식 프로세스를 계산적으로 효율적으로 만든다. 이러한 특징들은 하나 이상의 자체 프로토타입으로 축소될 수 있는 문자의 추상적 벡터 유사 표현과 비교된다. 컴퓨터 비전의 일반적인 특징 검출 기술이 이 유형의 OCR에 적용 가능하며, 이는 "지능형" 필기 인식 및 대부분의 현대 OCR 소프트웨어에서 흔히 볼 수 있다. K-최근접 이웃 알고리즘과 같은 근접 이웃 분류기는 이미지 특징을 저장된 자체 특징과 비교하여 가장 가까운 일치 항목을 선택하는 데 사용된다.

테서랙트와 같은 소프트웨어는 문자 인식을 위해 2단계 접근 방식을 사용한다. 두 번째 단계는 적응형 인식으로 알려져 있으며, 첫 번째 단계에서 높은 신뢰도로 인식된 문자 모양을 사용하여 두 번째 단계에서 나머지 문자를 더 잘 인식한다. 이는 특이한 글꼴이나 글꼴이 왜곡된(예: 흐릿하거나 바랜) 저품질 스캔에 유리하다.

 기준 현대적인 OCR 소프트웨어로는 구글 문서도구 OCR, ABBYY 파인리더 및 Transym 등이 있다. OCRopus 및 테서랙트와 같은 다른 소프트웨어는 단일 문자에 집중하는 대신 텍스트 전체 줄을 인식하도록 훈련된 인공 신경망을 사용한다.

반복 OCR로 알려진 기술은 페이지 레이아웃에 따라 문서를 섹션으로 자동 자른다. 그런 다음 각 섹션에 대해 개별적으로 가변 문자 신뢰도 임계값을 사용하여 OCR을 수행하여 페이지 수준의 OCR 정확도를 극대화한다. 이 방법으로 미국 특허청의 특허가 발행되었다.

OCR 결과는 미국 미국 의회도서관이 유지 관리하는 전용 XML 스키마인 표준화된 ALTO 형식으로 저장될 수 있다. 다른 일반적인 형식으로는 hOCR 및 PAGE XML이 있다.

광학 문자 인식 소프트웨어 목록은 광학 문자 인식 소프트웨어 비교를 참조하라.

### 후처리
출력이 어휘집(문서에 나타날 수 있는 단어 목록)에 의해 제한되면 OCR 정확도를 높일 수 있다. 이는 예를 들어 영어의 모든 단어이거나 특정 분야의 기술 용어집일 수 있다. 고유 명사와 같이 어휘집에 없는 단어가 문서에 포함된 경우 이 기술이 문제가 될 수 있다. 테서랙트는 정확도를 높이기 위해 사전 기능을 사용하여 문자 세그먼테이션 단계에 영향을 준다.

출력 스트림은 플레인 텍스트 문자 스트림이나 파일일 수 있지만, 더 정교한 OCR 시스템은 페이지의 원래 레이아웃을 보존하고 원본 이미지와 검색 가능한 텍스트 표현을 모두 포함하는 주석이 달린 PDF 등을 생성할 수 있다.

근접 이웃 분석은 특정 단어들이 종종 함께 나타난다는 점을 활용하여 동시 발생 빈도를 통해 오류를 수정할 수 있다. 예를 들어, "Washington, D.C."는 일반적으로 영어에서 "Washington DOC"보다 훨씬 더 흔하다.

스캔 중인 언어의 문법 지식은 단어가 동사인지 명사인지 등을 결정하는 데 도움을 주어 정확도를 높일 수 있다.

레벤슈타인 거리 알고리즘은 OCR API의 결과를 추가로 최적화하기 위해 OCR 후처리에서 사용되기도 한다.

### 응용 분야별 최적화
최근 몇 년 동안 주요 OCR 기술 제공업체는 특정 유형의 입력을 보다 효율적으로 처리하도록 OCR 시스템을 조정하기 시작했다. 애플리케이션 전용 어휘집을 넘어 비즈니스 규칙, 표준 표현 또는 컬러 이미지에 포함된 풍부한 정보를 고려함으로써 더 나은 성능을 얻을 수 있다. 이 전략을 "응용 중심 OCR"(Application-Oriented OCR) 또는 "맞춤형 OCR"이라고 하며, 번호판, 송장, 스크린샷, ID 카드, 운전면허증 및 자동차 제조 분야의 OCR에 적용되었다.

뉴욕 타임스는 OCR 기술을 'Document Helper'라는 독점 도구로 개조하여 대화형 뉴스 팀이 검토가 필요한 문서의 처리 속도를 높일 수 있도록 했다. 그들은 이를 통해 기자들이 내용을 검토하기 위해 준비하는 과정에서 시간당 최대 5,400페이지를 처리할 수 있게 되었다고 밝혔다.

## 우회 방법
개선된 OCR 알고리즘 이외의 수단으로 문자 인식 문제를 해결하는 여러 기술이 있다.

### 더 나은 입력 유도
정밀하게 지정된 크기, 간격 및 독특한 문자 모양을 가진 OCR-A, OCR-B 또는 MICR 폰트와 같은 특수 폰트는 은행 수표 처리 시 더 높은 정확도를 가능하게 한다. 몇몇 유명한 OCR 엔진은 Arial이나 Times New Roman과 같은 대중적인 폰트를 캡처하도록 설계되었으며, 대중적으로 사용되는 폰트와 매우 다른 이러한 특수 폰트를 캡처하는 데는 능숙하지 않다. 구글 테서랙트는 새로운 폰트를 인식하도록 훈련될 수 있으므로 OCR-A, OCR-B 및 MICR 폰트를 인식할 수 있다.
섬네일|소련 우편번호
콤 필드(Comb fields)는 사람이 한 칸에 한 글자씩 더 읽기 쉽게 쓰도록 유도하는 미리 인쇄된 상자이다. 이들은 종종 OCR 시스템에 의해 쉽게 제거될 수 있는 드롭아웃 컬러(dropout color)로 인쇄된다. 이 기술은 숫자 우편번호를 사용했던 구소련에서 사용되었으며, 모든 봉투 하단에 표준화된 상자가 있어 사용자가 점들을 연결하여 숫자를 기입했다.

팜 OS는 그래피티로 알려진 특수 자체 세트를 사용했는데, 이는 인쇄된 영어 문자와 유사하지만 계산 능력이 제한된 하드웨어에서 더 쉽게 인식되도록 단순화되거나 수정된 것이다. 사용자는 이러한 특수 자체를 쓰는 법을 배워야 했다.

구역 기반 OCR은 이미지를 문서의 특정 부분으로 제한한다. 이는 종종 템플릿 OCR로 지칭된다.

### 크라우드소싱
문자 인식을 수행하기 위해 인간을 크라우드소싱하는 것은 컴퓨터 구동 OCR처럼 이미지를 빠르게 처리할 수 있지만, 컴퓨터보다 더 높은 정확도를 얻을 수 있다. 실질적인 시스템으로는 아마존 MTurk와 ReCAPTCHA가 있다. 핀란드 국립도서관은 사용자가 표준화된 ALTO 형식의 OCR 텍스트를 수정할 수 있는 온라인 인터페이스를 개발했다. 크라우드소싱은 직접 문자 인식을 수행하는 대신, 소프트웨어 개발자들이 이미지 처리 알고리즘을 개발하도록 유도하는 데 사용되기도 한다.

## 정확도

[섬네일|"English 2009" 말뭉치에 대한 OCR 스캔을 기반으로 한 1700년부터 1900년까지의 영어 문서에서 구글 [N-그램 데이터베이스의 laft와 last 출현 빈도]]
[섬네일|"English 2012" 말뭉치에 대한 OCR 스캔을 기반으로 한 구글 [N-그램 데이터베이스의 laft와 last 출현 빈도]]
[섬네일|English 2012 이후 버전에서 [긴 s가 포함된 단어를 검색하면 S로 정규화된다.]]
미국 에너지부(DOE)의 의뢰로 정보 과학 연구소(ISRI)는 기계 인쇄 문서 이해를 위한 자동화 기술의 개선을 촉진하는 임무를 맡았으며, 1992년부터 1996년까지 가장 권위 있는 연례 OCR 정확도 테스트를 수행했다.

타자된 로마자 텍스트 인식은 깨끗한 이미지가 있는 경우에도 여전히 100% 정확하지 않다. 19세기 및 20세기 초 신문 페이지 인식을 기반으로 한 한 연구에 따르면 상업용 OCR 소프트웨어의 문자별 정확도는 81%에서 99% 사이로 나타났다. 완전한 정확도는 수동 검토 또는 데이터 사전 인증을 통해 달성할 수 있다. 손글씨 인식, 필기체 인식 및 다른 문자의 인쇄 텍스트 인식(특히 한 글자에 획이 많은 동아시아 언어 문자)을 포함한 다른 분야는 여전히 활발한 연구 주제이다. MNIST 데이터베이스는 손으로 쓴 숫자를 인식하는 시스템의 능력을 테스트하는 데 흔히 사용된다.

정확도는 여러 방식으로 측정될 수 있으며 측정 방식에 따라 보고된 정확도가 크게 달라질 수 있다. 예를 들어, 존재하지 않는 단어를 찾는 소프트웨어를 수정하기 위해 단어 문맥(단어 어휘집)을 사용하지 않는 경우, 1%의 문자 오류율(99% 정확도)은 단어 전체가 오타 없이 인식되었는지를 기준으로 측정할 때 5% 이상의 오류율을 초래할 수 있다. 신경망 기반 필기 인식 솔루션에서는 충분히 큰 데이터 세트를 사용하는 것이 중요하다. 반면에 자연스러운 데이터 세트를 제작하는 것은 매우 복잡하고 시간이 많이 소요된다.

오래된 텍스트를 디지털화할 때 내재된 어려움 중 하나는 OCR이 "긴 s" 문자와 "f" 문자를 구별하지 못한다는 점이다.

즉석에서 손으로 쓴 텍스트를 인식하기 위한 웹 기반 OCR 시스템은 최근 상업용 제품으로 잘 알려져 있다(태블릿 PC 역사 참조). 단정하고 깨끗하게 쓴 손글씨에 대해 80%~90%의 정확도를 펜 컴퓨팅 소프트웨어로 달성할 수 있지만, 이 정도의 정확도는 여전히 페이지당 수십 개의 오류를 의미하므로 기술이 매우 제한된 분야에서만 유용하다.

필기체 텍스트 인식은 활발한 연구 분야이며, 인식률은 정자체 손글씨보다 훨씬 낮다. 문맥 또는 문법 정보를 사용하지 않고 일반적인 필기체의 높은 인식률을 달성하기는 어려울 것으로 보인다. 예를 들어, 사전에서 전체 단어를 인식하는 것이 필기체에서 개별 문자를 파싱하려는 것보다 쉽다. 수표의 금액 기입란(항상 글로 풀어서 쓴 숫자)을 읽는 것은 작은 사전을 사용하여 인식률을 크게 높일 수 있는 예이다. 개별 필기체 문자 자체의 모양은 모든 손글씨 필기체를 정확하게(98% 이상) 인식하기에 충분한 정보를 포함하고 있지 않다.

대부분의 프로그램은 사용자가 "신뢰도"를 설정할 수 있게 한다. 이는 소프트웨어가 원하는 수준의 정확도를 달성하지 못할 경우 수동 검토를 위해 사용자에게 알림을 보낼 수 있음을 의미한다.

OCR 스캔으로 인해 발생하는 오류는 때때로 타이포(typo)라는 용어에 빗대어 스캐노(scanno)라고 불리기도 한다.

## 유니코드

OCR을 지원하기 위한 문자들은 1993년 6월 버전 1.1 출시와 함께 유니코드 표준에 추가되었다.

이 중 일부 문자는 MICR, OCR-A 또는 OCR-B 전용 폰트에서 매핑되었다.

## 같이 보기

* 광학 마크 인식(OMR)

## 각주

## 외부 링크
* ICDAR  문서 인식에 대한 포괄적 국제회의


분류:인공지능의 응용