[OCR] 이미지에서 텍스트 추출 하기

ITWeb/개발일반 2017. 2. 14. 11:22

OCR(Optical Character Recognition) 이라고 해서 이미지 같은 것에서 문자를 인식해서 추출하는 기술 입니다.

제가 하는 업무에 필요해서 "Hello World" 수준의 방법을 기술해 보려 합니다.

왜냐하면 나중에 또 잊어버릴수 있으니까요 ^^;


제가 사용한 내용은 아래와 같습니다.


[참고문서]

http://tess4j.sourceforge.net/

https://github.com/tesseract-ocr/tesseract/wiki


tess4j 는 tesseract-ocr 을 java 모듈에서 사용할 수 있도록 제공해주는 라이브러리 입니다.


우선 가볍게 mac 에서 맛보기를 해보시면 좋습니다.


[Mac OSX 설치 및 CLI 테스트]

$ brew install tesseract


설치 된 경로는 아래와 같습니다.

/usr/local/Cellar/tesseract/3.04.01_2


경로를 알아야 하는 이유는 나중에 traineddata 파일을 올려 두어야 하기 때문에 알아 두시면 좋습니다.

한글 테스트를 위해서는 아래 링크에서 data file 을 다운로드 받으시고 tessdata 로 올려 두시면 됩니다.


[Data Files]

https://github.com/tesseract-ocr/tesseract/wiki/Data-Files


Usage:

  tesseract --help | --help-psm | --version

  tesseract --list-langs [--tessdata-dir PATH]

  tesseract --print-parameters [options...] [configfile...]

  tesseract imagename|stdin outputbase|stdout [options...] [configfile...]


$ tesseract eurotext.png translate -l eng

eurotext.png


The (quick) [brown] {fox} jumps!

Over the $43,456.78 <lazy> #90 dog

& duck/goose, as 12.5% of E-mail

from aspammer@website.com is spam.

Der ,,schnelle” braune Fuchs springt

fiber den faulen Hund. Le renard brun

«rapide» saute par-dessus le chien

paresseux. La volpe marrone rapida

salta sopra i] cane pigro. El zorro

marrén répido salta sobre el perro

perezoso. A raposa marrom répida

salta sobre 0 C50 preguieoso.

translate.txt

 

위 명령어로 돌려 보시면 이렇게 추출이 됩니다.


추가로 ubuntu 에 설치 하는 것도 살펴 보도록 하겠습니다.

저는 아래 문서 보고 설치를 했습니다.


[설치 문서 on ubuntu]

https://github.com/tesseract-ocr/tesseract/wiki/Compiling


설치 시 주의 점은 leptonica 설치를 하셔야 한다는 것입니다.

문서에 "You also need to install Leptonica." 이렇게 있는데도 불구하고 제가 문서를 제대로 안읽고 진행하다 삽질을 ㅡ.ㅡ;


실행 명령어를 그대로 옮겨 놓도록 하겠습니다.


$ sudo apt-get install autoconf automake libtool

$ sudo apt-get install autoconf-archive

$ sudo apt-get install pkg-config

$ sudo apt-get install libpng12-dev

$ sudo apt-get install libjpeg8-dev

$ sudo apt-get install libtiff5-dev

$ sudo apt-get install zlib1g-dev

$ sudo apt-get install libicu-dev

$ sudo apt-get install libpango1.0-dev

$ sudo apt-get install libcairo2-dev


# leptonica 를 다운로드 받으시고 압축을 풉니다.


[설치 문서]

http://tpgit.github.io/UnOfficialLeptDocs/leptonica/README.html#building-on-linux-unix-macos


$ wget http://www.leptonica.org/source/leptonica-1.74.1.tar.gz

$ tar xvf leptonica-1.74.tar.gz

$ cd leptonica-1.74

$ ./configure

$ make

$ sudo make install


$ sudo apt-get install libleptonica-dev


$ git clone --depth 1 https://github.com/tesseract-ocr/tesseract.git

$ cd tesseract

$ ./autogen.sh

$ ./configure --enable-debug

$ LDFLAGS="-L/usr/local/lib" CFLAGS="-I/usr/local/include" make

$ sudo make install

$ sudo ldconfig


$ tesseract -v

tesseract 2f10be5

 leptonica-1.74.1

  libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8


 Found AVX

 Found SSE


[tess4j 를 이용한 Java 테스트]

HelloTess4j.java

public class HelloTess4j {

public static void main(String[] args) {
String datapath = "src/main/resources";
String testResourcesDataPath = "src/main/resources/test-data";
File imageFile;
ITesseract instance;

instance = new Tesseract();
instance.setDatapath(new File(datapath).getPath());
instance.setLanguage("eng");

try {
ImageIO.scanForPlugins();
imageFile = new File(testResourcesDataPath, "eurotext.png");
String result = instance.doOCR(imageFile);
System.out.println(result);
} catch (TesseractException e) {
System.out.println(e.getMessage());
}
}
}

코드는 tess4j 소스코드 받아 보시면 잘 나와 있습니다.

setLanguage 설정에 오류가 있어서 멀티 lang 설정이 안되는데요. (버그로 등록이 되어 있습니다. - 2017.02.14일 기준)

이 오류가 수정 되면  eng+kor 테스트도 해보시면 좋을 것 같습니다.


: