OCR(Optical Character Recognition)란 무엇일까?
OCR, 즉 광학 문자 인식은 이미지를 분석해 그 안에 포함된 문자를 인식하고 디지털 데이터로 변환하는 기술이다. 아래의 두 가지 경우를 예로 들어 볼 수 있다.
- 이미지에서 텍스트를 인식하는 방식(OCR): 전통적인 OCR은 종이 문서와 같은 이미지를 스캔해 그 안에 있는 글자를 인식하는 방식이다. 예를 들어, 책 페이지나 영수증을 스캔한 뒤 그 이미지에서 텍스트를 추출하여 디지털 문서로 변환하는 것이다.
- 자연스러운 장면 속에서 텍스트를 인식하는 방식(STR): 최근의 기술 발전에 따라 자연스러운 환경에서 촬영된 이미지에서 문자 인식을 할 수 있는 기술이 개발되었다. 예를 들어, 길거리 간판, 쇼핑몰 광고판처럼 배경이 복잡하거나 글자의 기울기가 있는 이미지 속에서도 텍스트를 인식할 수 있다.
OCR은 크게 두 가지 방식으로 나눌 수 있다:
- 이미지 입력 방식(Offline Handwriting): 종이와 같은 형태로 글자를 써서 스캔한 이미지에서 텍스트를 추출하는 방식이다. 이는 우리가 종종 문서 스캔기로 스캔한 이미지를 OCR을 사용해 텍스트로 변환할 때 사용하는 방식이다.
- 좌표 시퀀스 입력 방식(Online Handwriting): 이 방식은 온라인 필기 방식이라고도 하며, 태블릿이나 스마트폰과 같은 전자 기기에서 펜을 사용해 글자를 쓰면 실시간으로 좌표 데이터를 기록해 글자를 인식한다. 네이버 메모 앱에서 손으로 글씨를 쓰면 텍스트로 변환되는 기능을 생각하면 이해하기 쉽다.
OCR에서 BBOX로 바운딩 표시하기
1. 일반 객체 검출과 OCR의 차이점
Object-detection 과 OCR은 비슷해 보일 수 있지만, 처리하는 대상과 방식에 차이가 있다. 일반 Object-detection은 다양한 객체의 클래스와 위치를 예측하는 문제이다. 예를 들어, 아래 이미지에서 자전거, 강아지, 자동차 등의 물체를 인식하고 그 위치를 예측하는 방식이다.
반면에 글자 검출(OCR)은 특정한 하나의 클래스인 "Text"만을 대상으로 하여 그 위치를 예측한다. 텍스트가 위치한 곳을 찾아낸 후, 그 텍스트를 Recongnition(인식)하는 과정을 통해 문자를 디지털화하는 방식이다.
2. 예측하는 정보의 차이
객체 검출에서는 이미지에 포함된 다양한 객체들을 인식하고 그들의 위치를 정확하게 예측한다. 예를 들어, 왼쪽 사진에서는 자전거와 강아지를 각각 예측하고 그 위치를 박스 처리한 것을 볼 수 있다. 반면에, 오른쪽 사진들은 모두 텍스트가 포함된 이미지로, OCR은 단일 클래스인 텍스트의 위치만을 예측한 후 텍스트를 추출한다.
3. 객체의 특성
일반 객체 검출과 OCR에서 인식하는 객체들의 차이점은 다음과 같다:
- 객체 밀도: 일반 객체는 비교적 명확한 밀도를 가진 반면, 텍스트는 높은 밀도와 복잡한 배치로 이루어져 있을 수 있다.
- 극단적 종회비: 일본어 같은 경우 띄어쓰기가 없기때문에 종회비가 높을 수 있다.
- 특이한 모양: 텍스트는 일반적으로 구겨진 영역, 휘어진 영역, 세로로 쓰인 영역 등 다양한 형태로 존재할 수 있다.
4. OCR에서 BBOX로 바운딩 표시하기
OCR에서는 텍스트를 인식하기 위해 BBOX(Bounding Box)로 텍스트가 있는 위치를 먼저 표시하는 과정이 필수적이다. BBOX는 이미지 내의 텍스트 위치를 사각형으로 감싸는 형태로, 이 영역을 기준으로 텍스트를 추출하고 인식한다.
하지만 매우 높은 밀도를 가진 이미지의 경우, 텍스트가 복잡하게 배열되어 있어 BBOX로 바운딩을 하는 작업이 쉽지 않다. 예를 들어, 문서나 표지판에서 여러 줄의 글씨가 매우 가까운 거리로 배치되거나, 크기가 각기 다른 글씨가 한 이미지 내에 동시에 존재하는 경우, 정확한 BBOX 설정이 중요한 과제가 된다.
5. OCR에서 사용하는 사각형(BBOX) 유형들
OCR(광학 문자 인식)에서 텍스트를 인식할 때, 텍스트가 위치한 영역을 정확하게 표시하기 위해 Bounding Box을 사용한다. BBOX는 텍스트의 위치를 좌표로 표현하며, 다양한 형태의 사각형으로 나타낼 수 있다. 각각의 사각형 유형은 텍스트의 배치에 따라 사용될 수 있으며, 회전된 글씨나 기울어진 글씨도 효과적으로 처리할 수 있는 방법을 제공한다.
1) 직사각형 (RECT, Rectangle)
직사각형 BBOX는 텍스트가 회전되지 않은 상태에서 가장 많이 사용하는 기본적인 형태이다. 주로 단순하고 직선적인 텍스트에 적용하며, 다음과 같은 두 가지 방식으로 좌표를 설정할 수 있다:
- (x₁, y₁, width, height) 또는 (x₁, y₁, x₂, y₂) 형태로 표현.
- 예를 들어, 정면에서 찍은 간판이나 문서의 텍스트를 감싸는 데 적합하다.
2) 직사각형+각도 (RBOX, Rotated Box)
회전된 텍스트를 인식할 때는 직사각형에 회전 각도를 추가하여 텍스트가 기울어진 상태에서도 정확하게 BBOX를 그릴 수 있다. 이는 길거리 간판, 포스터, 혹은 비스듬히 찍힌 텍스트 이미지에서 유용하게 사용된다.
- (x₁, y₁, width, height, θ) 또는 (x₁, y₁, x₂, y₂, θ)와 같이 각도를 포함한 좌표로 표현.
- 예를 들어, 기울어진 간판에 있는 텍스트를 RBOX로 감싸면 텍스트의 위치를 더욱 정밀하게 잡을 수 있다.
3) 사각형 (QUAD, Quadrilateral)
QUAD는 네 개의 좌표를 이용해 텍스트 영역을 감싸는 방식으로, 직사각형보다 더 복잡한 텍스트 배치에 적합하다. 특히 텍스트가 휘어지거나 비정형 형태로 배열된 경우에 유용하다.
- (x₁, y₁, x₂, y₂, x₃, y₃, x₄, y₄) 형태로 텍스트의 네 모서리를 나타냄.
- 복잡한 형태의 텍스트, 예를 들어 포스터나 광고판처럼 다양한 방향으로 쓰여진 글자를 처리할 때 사용된다.
4) 다각형 (Polygon)
최근 벤치마크에서는 다각형(Polygon) 방식을 자주 사용하고 있다. 다각형은 비정형 텍스트나 휘어진 글씨에 대한 인식이 필요할 때 매우 유용하며, 주로 복잡한 텍스트 레이아웃에서 사용된다. 이 방법은 2N개의 점을 활용하여 텍스트를 감싸며, 상하 점들이 쌍을 이루어 영역을 형성한다.
- (x₁, y₁, ..., xₙ, yₙ) 형태로 여러 개의 점을 이용해 텍스트의 외곽선을 감쌀 수 있다.
- 예를 들어, 휘어진 글씨나 둥근 형태로 쓰여진 텍스트에 적합하다. 이미지에서 "CHIPOTLE"라는 글자는 다각형을 사용해 텍스트를 정확히 감싸고 있다.
OCR 에 필요한 Task
OCR(Optical Character Recognition)을 효과적으로 수행하기 위해서는 여러 단계의 Task가 필요하다. 각각의 단계는 OCR 시스템이 텍스트를 정확하게 인식하고 처리할 수 있도록 돕는 중요한 역할을 한다. 이번 글에서는 Text Detector, Text Recognizer, Serializer, Text Parser와 같은 주요 Task에 대해 알아보자.
1. Text Detector (텍스트 검출기)
Text Detector는 이미지에서 텍스트가 있는 위치를 찾아내는 첫 번째 단계이다. 텍스트가 존재하는 영역을 BBOX로 감싸는 역할을 하며, 이 과정에서 이미지 내에서 텍스트가 있는지 없는지를 판단하는 것이 매우 중요하다.
텍스트 검출기는 다양한 형태로 나타나는 텍스트를 인식할 수 있어야 한다. 예를 들어, 도로 표지판에 쓰인 글자, 광고판에 있는 텍스트, 심지어 포스터에 있는 기울어진 글씨까지 정확하게 검출해야 한다.
글자 영역이냐 아니냐에 문제이기 때문에 Single Object-dection 즉, 단일 클래스 문제이며,
클래스 정보는 필요없고 글자 영역에 해당하는 객채의 위치만 추정하면 된다.
2. Text Recognizer (텍스트 인식기)
Text Detector가 텍스트의 위치를 찾아내면, 그 영역에서 텍스트를 실제로 인식하는 과정이 바로 Text Recognizer이다. 이 단계에서는 BBOX로 감싸진 텍스트 영역을 정확한 문자로 변환한다. 중요한 점은 이미지 전체를 입력으로 받는 것이 아니라, 텍스트가 포함된 영역만을 입력으로 받아 그 안에 있는 글자를 인식하는 것이다.
텍스트 인식기는 Computer Vision(CV)과 Natural Language Processing(NLP)의 교차점에 있는 기술이다. 이미지를 입력받아 텍스트를 출력하는데, 이 과정에서 CV와 NLP 기술이 함께 사용된다. 예를 들어, CNN(Convolutional Neural Network)을 사용해 이미지의 특징을 추출하고, RNN(Recurrent Neural Network) 또는 Transformer를 활용해 텍스트를 시퀀스 단위로 읽어내는 방식이다.
이미지 전체 입력이 아니라,
하나의 글자 역역에 해당하는 이미지의 일부가 인식기의 입력임을 유의하자!
3. Serializer
Serializer는 텍스트를 인식한 후 그 데이터를 구조화하고 순서를 정리하는 역할을 한다. 인식된 텍스트는 이미지 내에서 여러 줄로 나뉘거나, 크기와 위치가 다른 텍스트로 이루어져 있을 수 있다. 따라서 Serializer는 이 데이터를 일관된 순서로 정리하고 직렬화하는 과정이 매우 중요하다.
이 과정에서, 줄바꿈을 통해 텍스트가 올바르게 연결되고, 각 텍스트 영역의 순서를 유지해야 한다. 예를 들어, 명함의 텍스트에서 이름, 직함, 연락처가 순서대로 인식되도록 하는 것이 정렬기의 역할이다. 정렬된 데이터는 이후 자연어 처리 모듈로 전달되거나 추가적인 처리가 가능해진다.
정렬기의 결과는 규칙에 따라 2D 텍스트에서 1D 텍스트로 변환되며, 이후 텍스트 파서나 다른 자연어 처리 모듈에서 분석되기 위한 준비가 완료된다.
4. Text Parser
Text Parser는 Serializer 된 텍스트 데이터를 분석하고, 특정한 키워드나 개체를 추출하는 역할을 한다. Text Parser 는 텍스트가 담고 있는 의미를 파악하여 특정한 정보를 필터링하거나, 기 정의된 key-value 쌍을 매칭하는 방식으로 작동한다.
특히, BIO 태깅을 사용하여 텍스트 내에서 중요한 개체명을 추출하는 방식이 많이 사용된다. BIO 태깅은 텍스트 시퀀스에서 특정한 개체를 인식할 때, 각 단어에 B(시작), I(내부), O(외부)와 같은 태그를 부여하여 해당 텍스트가 어떤 정보를 담고 있는지 분석하는 방법이다.
BIO 태깅을 활용한 개체명 인식:
예를 들어, "해리포터 보러 메가박스 가자"라는 문장에서 영화명과 영화관명을 추출하는 과정을 살펴보자:
- 토큰화: "해리", "포터", "보", "러", "메", "가", "박", "스", "가", "자"처럼 단어를 쪼개는 과정이다.
- BIO 태깅: 각 토큰에 대해 "B-movie", "I-movie", "O", "B-theater", "I-theater", "O"와 같이 태깅을 통해 의미를 부여한다.
- 후처리: 태깅된 결과를 기반으로, 영화명은 "해리포터", 영화관명은 "메가박스"로 추출할 수 있다.
이 과정은 명함, 문서, 영수증 등에서 중요한 키워드나 개체를 추출하는 데 매우 유용하다. 파서가 추출한 데이터는 이후 자연어 처리 모듈을 통해 추가적인 분석이 가능하다.
이제 종합적으로 영수증을 예시로 보면서
OCR 처리과정을 다시 이해해 보자.
OCR API를 사용하여 영수증을 처리하면 다음과 같은 과정으로 텍스트가 인식되고 정리된다.
- Text Detector가 이미지에서 텍스트 영역을 검출한다.
- 영수증에서 가게 이름, 상품 내역, 주소와 같은 텍스트가 있는 영역을 검출한다.
- Text Recognizer가 검출된 영역 내에서 글자를 인식하여 디지털 텍스트로 변환한다.
- 예를 들어, "씨그램 레몬350ml"와 같은 상품명, "800"과 같은 가격 등을 읽어 텍스트로 변환한다.
- Serializer가 인식된 텍스트를 정렬하고, 데이터를 롤베이스 방식으로 배열한다.
- 상품 내역이나 가격 정보가 올바른 순서대로 배열되고, 줄바꿈 처리 등을 통해 한 줄로 배열된다.
- Text Parser가 key-value 쌍으로 데이터를 매칭해 구조화된 정보를 만든다.
- 예를 들어, 영수증에서 "Store name", "Store address", "Total Price"와 같은 key에 해당하는 값을 추출해 "Store name: emart", "Total Price: 17080"으로 매칭하여 정리한다.
OCR 시스템은 텍스트를 검출하고 인식한 후, 그 데이터를 구조화하여 사용자가 유용하게 활용할 수 있도록 돕는 중요한 역할을 한다. Text Detector는 텍스트가 위치한 영역을 예측하고, Text Recognizer는 그 영역 내의 텍스트를 디지털 데이터로 변환한다. 그다음 Serializer가 데이터를 정렬하고 구조화하며, Text Parser는 key-value 쌍을 매칭하여 정보를 유용하게 변환해 준다.
이 과정에서 영수증과 같은 다양한 문서에서 필요한 정보(예: 상점 이름, 주소, 총 금액 등)를 쉽게 추출할 수 있게 되며, 이를 통해 다양한 비즈니스 애플리케이션에서 유용하게 사용될 수 있다.
끝.
감사합니다.
'딥러닝 (Deep Learning) > [02] - 데이터' 카테고리의 다른 글
이미지 기반 손 뼈 EDA (6) | 2024.11.11 |
---|---|
[05] - OCR 의 데이터 포맷 UFO (3) | 2024.10.30 |
[04] - OCR 기반 문서 이해 (2) | 2024.10.30 |
[01] Data-Centric AI (10) | 2024.10.28 |
딥러닝 Motion Magnification 이란? (6) | 2024.08.29 |