Tesseract OCR과 인식률

dropKick·2020년 12월 1일
1

기술

목록 보기
1/1

19년 프로젝트에서 모바일 환경에서 공부할 때 책에 있는 코드를 따로 적지 않고,
사진으로만 찍어서 우리가 런타임 결과를 보여주면 어떨까싶었다
그래서 사진에서 글자를 추출할 수 있는 방법을 고민하다 OCR을 사용했는데 그 때 공부했던 내용을 기록하지 않아 다시 옮겨적는다

OCR이란

OCR은 Optical Character Recognation으로 광학 문자 인식
한마디로 자연적 사진 속의 문자를 인식하기 위한 기술

이 기술을 사용하는 이유는 로우 이미지에서 문자를 추출하는 것이 목적이고
이를 통해서 영수증의 등록, 세금 고지서의 등록, 글자의 번역 등을 할 수 있음

문제는 로우 이미지의 경우 빛에 의해 각 글자가 가지고 있는 상태
(위치, 각도, 초점, 화질 등)가 모두 다르기 때문에 문자만 인식하면 되니 쉽지않나 하는 생각과 달리 그렇게 쉬운 기술이 아니라는 것

Tesseract OCR

공부하다 모바일 사진으로 코드를 찍고, 그걸 실행한 결과는 우리가 보여주자는 생각은
아주 좋았는데 문제는 그 코드들을 어떻게 인식할까였고
처음엔 AWS 컴퓨터 비전을 사용했으나 컴퓨터 비전은 단일 객체의 검출에 따른 인식에 초점이 맞추어져 있어 코드 내 수많은 글자를 모두 옮기기엔 제약이 있었다

문자의 경우 단일 문자로 이루어진 경우도 있지만 단어 혹은 문장 자체가 의미를 가지고 있는 경우도 있어 단순한 문자 객체를 인식하는게 아닌 문자의 인식에 대한 방법이 필요했고
그래서 OCR을 통한 문자인식 엔진을 사용하는 것이 낫다고 판단하여 오픈소스인 Tesseract OCR 엔진을 사용하게 됨

낮은 인식률

그 런 데 ...
문제는 인식률이 정말 정말 정말 낮았다는거
알아보니 Tesseract OCR이 자동으로 전처리를 해주는게 아니다보니 몇 가지 과정이 필요했고, 한글 인식에 대한 문제점도 있었다

인식률 개선 방법

  • 언어 데이터 학습
    언어셋을 통해 언어 데이터를 학습해야하는데 기본적으로 한글을 데이터 셋 자체가 매우 적어 많은 학습이 필요함

    • 한글은 특성 상 글자 단위 학습이 주를 이루기 때문에 이에 대한 문제점도 있음
  • 올바른 규격 사용
    Tesseract OCR에서 권장하는 방식은 다음과 같다.

    • 12 pt 정도의 크기
    • 반듯한 글자
    • 글자 테두리(배경) 처리
    • 문장 분할
  • Perspectvie Transform
    3차원 이미지를 2차원으로 변환 시켜주는 전처리 기법

  • 이미지 전처리

    • Gray Scale 적용과 Thresh Hold 기법을 이용한 특징 추출
    • 글자가 필기체인 경우 이를 정자체로 매핑
    • 글자 일부가 휜 경우
    • 인식 부분 내 배경이 너무 넓은 경우
    • 인식되는 문장이 너무 많은 경우

이 때 우리는 이미지 전처리 방식을 사용하지 못했는데 이 부분 때문에 인식률이 아주 낮았다.
이미지 전처리의 중요성은 Tesseract OCR 4.1.1도 동일하다.
인식률 개선을 위한 공식 문서의 권장 지침

요약

  • 19년 프로젝트 진행 중 사진 글자 인식을 Tesseract OCR을 사용
  • Tesseract OCR은 자체적 인식률이 낮음
  • Tesseract OCR의 인식률을 높이기 위해서는 다음과 같은 방법이 필요했음
    • 언어 데이터 학습
    • Perspective Transform
    • 이미지 전처리
  • Gray Scale을 활용한 특징 추출 및 학습은 이미지 내 글자인식에 매우 중요함
    Naver D2 Gray Scale 특징 추출과 CNN

0개의 댓글