OCR 라이브러리 Tesseract.js 사용해보기

 

OCR

OpticalCharacterRecognition(광학문자인식)이란 종이 위의 글씨나 글씨가 적힌 이미지를 스캔하여 텍스트 데이터로 치환하는 것입니다.

OCR은 ABBYY, Microsoft Office Document Imaging 등 다양한 라이브러리가 있지만, 유료라서 사용하기에 어렵습니다. 인식률도 괜찮은 편이고, 무료로 제공되는 OCR엔진인 Tesseract.js를 알게되어서 간단하게 사용해보려고 합니다.

Tesseract

OCR엔진으로 Apache LicenseFREE SW입니다.
2006년부터 구글 Google의 지원을 받고 있습니다. 인식률이 높은 편에 속하며, 자바스크립트로 작성된 Tesseract.js62개의 언어를 지원합니다.

더 자세한 내용과 DOCS는 github.com/naptha/tesseract.js#tesseractjs에서 볼 수 있습니다.

사용해보기

npm으로 Tesseract.js 모듈을 설치합니다.

npm install tesseract.js --save

JS파일을 생성하고, 모듈을 사용하기 위해 require합니다. 저는 tesseract-test.js 로 생성하였습니다.

tesseract-test.js

var Tesseract = require('tesseract.js');

공식 DOCS에 소개되어있는 사용법입니다.

Tesseract.recognize(myImage, {
    lang: 'kor',
})
.then(function(result){
    console.log(result)
})

위의 사용법은 아주 간단한 옵션만 있어서 docs를 참고하여, 원하는 형태로 커스텀하였습니다.

  • 이미지url을 통해 다운받아서 로컬에 저장합니다.
  • 다운받은 이미지를 Tessercat로 인식합니다.
  • 언어는 한국어로 설정합니다.
  • 변환하는 과정을 console에 log로 출력합니다.
  • 변환한 결과물을 text로 출력합니다.
var Tesseract = require('tesseract.js');
var request = require('request');
var fs = require('fs');

var url = 'https://dalhav.github.io/files/img/tesseractjs/tesseract-test.png';
var filename = 'image.png';

var writeFile = fs.createWriteStream(filename);

request(url).pipe(writeFile).on('close', function() {
    Tesseract.recognize(filename, {
        lang: 'kor'
    })
        .progress(function  (p) { console.log('progress', p)  })
        .catch(err => console.error(err))
        .then(function (result) {
            console.log(result.text);
        })
});

글씨체별로 인식률을 확인하기 위해 이미지를 제작하였습니다.

tesseract-test

한글로 인식한 결과물입니다. 위의 이미지를 포함한 다른 여러가지 이미지로 테스트해보았을 때, 고딕체처럼 또박또박한 글씨의 인식률이 높았습니다.

1뉴냐꺄나야꺄샤 ː 냐눔헐줄써
가나다라마바사 : 나눔명조
가나다라마바사: 나눔스퀘어
가나다라마바사 그 나눔스퀘어라운드
가나다라마바사 ː 나눔고딕

영어의 인식률이 궁금해져서 테스트를 위해 이미지를 제작하였습니다.

tesseract-test-en

인식한 결과물입니다. 한글보다는 굉장히 인식률이 높은 수준이였습니다.

Hello World - Noto Sans
Hello World - Nanum Myeongjo
Hello World - Nanum Square
Hello World - Noto Serif
Hello wma — Nanum Brush

마치며

한글의 경우 반듯한 고딕체를 제외하고는 인식률이 그리 높은 편이 아니라서 학습을 더 시켜서 사용해야될 듯합니다. 무료로 OCR엔진을 사용할 수 있다는 장점이 있기 때문에 학습을 시켜서 사용하기에 충분한 가치가 있다고 생각이 듭니다.