행복한 하루

Raspberry pi CM4(Bullseye)에서 Tesseract 4.1.3 설치 및 OCR 테스트 본문

RaspberryPi/CM4(Compute Module)

Raspberry pi CM4(Bullseye)에서 Tesseract 4.1.3 설치 및 OCR 테스트

변화의 물결 2022. 6. 22. 15:36

 

 

안녕하세요.

  

  Windows 상에서 Tesseract, OpenCV, Qt를 조합해서 하려고 하니 이런저런 라이브러리를 설치하기가 어려워서 리눅스 기반인 라즈베리 파이 상에서 테스트해보았습니다.

라즈베리 파이에서 현재 시점에서 최신 버전인 Tesseract 5.1.0을 설치 시도하였으나 아래와 같이 발생하였습니다.

 

  에러로 검색해 보면 FreeBSD 빌드 상에 문제가 있다고 리포팅된 것으로 보였습니다. 향후에 수정된 버전에서 5.x도 사용 가능할 것으로 보입니다. 그래서 현재 4.1.3 버전을 사용하였습니다.

[package - 130releng-armv6-quarterly][graphics/tesseract] Failed for tesseract-5.1.0 in build

<리포팅된 내용>

https://www.mail-archive.com/freebsd-pkg-fallout@freebsd.org/msg1903089.html


1. Tesseract 이란

  테서랙트(Tesseract)는 다양한 운영 체제를 위한 광학 문자 인식 엔진이다. 이 소프트웨어는 Apache License, 버전 2.0에 따라 배포되는 무료 소프트웨어이며 2006년부터 Google에서 개발을 후원했다.

테서랙트 엔진은 원래 영국의 브리스톨과 콜로라도의 Greeley에 있는 휴렛 팩커드 연구소에서 1985년에서 1994년 사이에 독점 소프트웨어로 개발되었으며, 1996년에는 Windows로, 일부는 1998년에 C에서 C++로 마이그레이션 되었다. 대부분의 코드가 C로 작성되었고 일부 코드는 C++로 작성되었다. 그 이후로 모든 코드는 최소한 C++ 컴파일러로 컴파일되도록 변환되었다. 다음 10년 동안 거의 작업이 이루어지지 않았다. 그런 다음 Hewlett Packard와 라스베이거스(UNLV)의 네바다 대학교에서 2005년 오픈 소스로 출시했다.

- 위키백과(테서랙트) 내용 중

 2. tesseract 4.1.3 설치하기

1) 다운로드하기

  - 다운로드할 디렉터리로 이동하여 소스를 다운로드하고 압축을 풉니다.

pi@raspberrypi:~/opt $ curl -L https://github.com/tesseract-ocr/tesseract/archive/4.1.3.zip -o tesseract-4.1.3.zip
pi@raspberrypi:~/opt $ unzip tesseract-4.1.3.zip
pi@raspberrypi:~/opt $ cd tesseract-4.1.3/

 

   - 라이브러리, 실행파일이 만들어진 디렉터리를 생성합니다.

pi@raspberrypi:~/opt/tesseract-4.1.3 $ mkdir ~/install_lib

  

2) 빌드하기

  - 설치될 경로를 prefix로 지정해줍니다.

pi@raspberrypi:~/opt/tesseract-4.1.3 $ ./autogen.sh
pi@raspberrypi:~/opt/tesseract-4.1.3 $ ./configure --prefix=/home/pi/install_lib/tesseract

 

  - 컴파일 환경 설정이 완료되면 아래의 메시지가 나옵니다.

    Configuration is done.

    You can now build and install tesseract by running:

 

  - 컴파일과 설치 진행합니다.

pi@raspberrypi:~/opt/tesseract-4.1.3 $ make -j4 && sudo make install
pi@raspberrypi:~/opt/tesseract-4.1.3 $ sudo ldconfig

  

3) 사전 훈련 데이터 다운로드하기

  - Tesseract 4는 라인 인식에 중점을 둔 장단기 메모리(Long Short-Term Memory, LSTM) 신경망 기반의 새로운 OCR 엔진이 도입되었습니다. Tesseract 3 경우, 문자 패던 인식으로 고전 방식을 사용하고 있습니다. 그래서 Tesseract 4에는 자유롭게 선택 가능하도록 되어 있습니다. 여기서는 학습된 데이터를 이용하여 인식하는 것을 테스트합니다.

  - LSTM 모델을 이해하려면 RNN 등 인공지능 관련 지식이 필요하기 때문에, 자세히 설명은 하단 참고사이트 링크를 참고하시면 됩니다.

 

  -  github에 등록된 학습된 데이터를 다운로드하여 설치합니다.

pi@raspberrypi:~/opt/tesseract-4.1.3 $ curl -O -L https://github.com/tesseract-ocr/tessdata/archive/master.zip
pi@raspberrypi:~/opt/tesseract-4.1.3 $ unzip master.zip
pi@raspberrypi:~/opt/tesseract-4.1.3 $ mv tessdata-main/* /home/pi/install_lib/tesseract/share/tessdata/
pi@raspberrypi:~/opt/tesseract-4.1.3 $ ls /home/pi/install_lib/tesseract/share/tessdata/ -l | head

 

  - 언어별 학습된 데이터 파일을 확인할 수 있습니다.

3. tesseract의 command-line tool 사용하기

 - 설치한 위치로 이동해서 먼저 버전을 확인합니다.

pi@raspberrypi:~/opt/tesseract-4.1.3 $ cd ~/install_lib/tesseract/bin/
pi@raspberrypi:~/install_lib/tesseract/bin $ ./tesseract -v

  

  - 테스트하기 위해서 글자가 포함된 이미지가 필요합니다. 글자가 포함된 이미지가 이미 있다면 그것을 이용하시면 됩니다. 아니면 OpenCV 설치하면서 제공되는 샘플을 이미지를 이용합니다.

pi@raspberrypi:~/install_lib/tesseract/bin $ sudo cp /usr/local/share/opencv4/samples/text/scenetext_segmented_word03.jpg .

 

  - OCR 분석을 실행시킨다.

pi@raspberrypi:~/install_lib/tesseract/bin $ ./tesseract scenetext_segmented_word03.jpg stdout -l eng

 

  - eng.traineddata가 없다고 아래와 같은 에러가 발생할 수 있습니다.

 Error opening data file /home/install_lib/tesseract/share/tessdata/eng.traineddata

Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.

 https://stackoverflow.com/questions/14800730/tesseract-running-error

 

  - 위에서 설치한 학습된 데이터 경로를 확인할 수 없기 때문에 발생하는 에러이므로 환경변수를 export 시켜줍니다. 

pi@raspberrypi:~/install_lib/tesseract/bin $ export TESSDATA_PREFIX="/home/pi/install_lib/tesseract/share/tessdata/"

 

  - 매번 해주기 귀찮다면, .bashrc 맨 마지막에 입력하여 자동 실행되도록 합니다.

pi@raspberrypi:~/install_lib/tesseract/bin $ vim ~/.bashrc
export TESSDATA_PREFIX="/home/pi/install_lib/tesseract/share/tessdata/"
pi@raspberrypi:~/install_lib/tesseract/bin $ source ~/.bashrc

 

  - 다시 실행하면 이미지에 보이는 영어 글자가 텍스트로 출력됩니다. 100% 정확하진 않지만, 이미지에서 텍스트가 추출된 것을 확인할 수 있습니다. 

pi@raspberrypi:~/install_lib/tesseract/bin $ ./tesseract scenetext_segmented_word03.jpg stdout -l eng

샘플로 사용한 영어문자가 포함된 이미지

  

  Qt 강좌에서 tesseract 라이브러리를 사용해서 OCR 프로그램을 만들어 보도록 하겠습니다.

 

 

감사합니다.

 

<참고사이트>

1. 테서랙트

https://ko.wikipedia.org/wiki/%ED%85%8C%EC%84%9C%EB%9E%99%ED%8A%B8

2. tesseract-ocr/tesseract

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

3. Compilation guide for various platforms

https://tesseract-ocr.github.io/tessdoc/Compiling.html#linux

4. 장단기 메모리(Long Short-Term Memory, LSTM)

https://wikidocs.net/22888

5. [딥러닝] RNN 순환신경망과 LSTM

https://pleasurehwang.tistory.com/19  

 

 

Comments