본문 바로가기

CLI/Linux

[M1 Mac] Tesseract 설치 및 실행

진행하는 프로젝트에서 상품 이미지 인식을 통한 카테고리 분류에서 방향을 틀어 개별 상품의 가격표를 인식하여 텍스트를 추출한 후 상품명/가격을 제공하는 방법으로 진행하기로 하여 우선 텍스트를 인식하는 무료 소프트웨어인 Tesseract를 사용해 보기로 했다. 물론 여기에 OpenCV를 함께 쓸 예정이고,  Tesseract는 광학 문자 인식 엔진으로 대부분의 언어를 지원한다는 점이 장점인 것 같다.

 

Window 같은 경우는 설치 과정에서 언어 선택, 그리고 설치 후 환경 변수 설정을 해주어야 하는 것 같은데 Linux는 일단 해당 경로 내에서만 실행하면 되는 것 같다. 일단 터미널에서,,(이 부분은 다시 찾아

봐야겠다. 'mac tesseract path' 라는 키워드가 구글에 있는 걸 보면 꽤나 많은 사람들이 심볼릭 링크때문에 오류를 경험했기 때문이 아닐까 ㅎㅅㅎ)

 

우선, Tesseract를 Homebrew를 통해 설치한다. 

 

brew install tesseract

 

그리고, 추가적으로 한글 위주의 텍스트를 인식할 것이기 때문에 여러 language의 텍스트 인식을 위해 추가적으로 패키지를 설치했다. (Tesseract를 설치하면 기본적으로 영어를 지원한다고 한다.)

tesseract-lang을 설치하고 나서 tesseract에서 사용 가능한 언어 목록을 보면 정말 많은 언어를 인식할 수 있는 것 같다!(기술은 정말 똑똑하지. 그 머리 나 좀 줘라ㅋㅅㅋ)

 

brew install tesseract-lang

tesseract --list-langs

 

그리고 나서 테스트 실행을 위해 이미지 하나를 다운받았다. 이름은 'OCR_TEST_1.png'로 실행 예제? 실행 방법?을 찾아보던 중 https://blog.naver.com/jevida/222177929714 이 분의 블로그에서 예제 이미지를 가져왔다.

인식해볼 이미지 폴더를 image로 만들어 그 안에 OCR_TEST_1.png 이름으로 저장했다. 

Tesseract 실행을 위해서는 Tesseract가 설치된 경로 내에서 실행해야해서, 터미널 창에서 이 친구가 설치된 경로를 확인하려고를 입력했다. 

 

Brew list tesseract

 

/opt/homebrew/Cellar/tesseract/4.1.1/bin/tesseract
/opt/homebrew/Cellar/tesseract/4.1.1/include/tesseract/ (19 files)
/opt/homebrew/Cellar/tesseract/4.1.1/lib/libtesseract.4.dylib
/opt/homebrew/Cellar/tesseract/4.1.1/lib/pkgconfig/tesseract.pc
/opt/homebrew/Cellar/tesseract/4.1.1/lib/ (2 other files)
/opt/homebrew/Cellar/tesseract/4.1.1/share/tessdata/ (35 files)

대충 이렇게 나왔는데, .exe 프로그램이 /opt/homebrew/Cellar/tesseract/4.1.1/bin 이 경로 내에 설치되어 있어서 이 경로로 이동해 진행했다.

 

cd /opt/homebrew/Cellar/tesseract/4.1.1/bin

 

솔직히 Tesseract 명령어? 하나도 모른다.(그냥 한 번 실행용으로 구글링만해서 해본 것) 그중 자잘한 오류가 뜬 것은 생략하고(라고 할 뻔 ㅋ)가 아니고, 실행해볼 이미지 폴더, 파일을 bin 경로 내에 넣어줘야 했다. 즉?! '.exe 프로그램과 동일한 디렉토리 내'에 있어야 했다는 말씀. 

그래서 내가 만들어놓은 인식할 이미지들이 딤긴 image 폴더를 /opt/homebrew/Cellar/tesseract/4.1.1/bin 안에 쏙 넣어줬다.

그리고 나서 다시 실행해본 명령어는

 

tesseract -l eng ./image/OCR_TEST_1.png output

 

bin 폴더 내의 image 폴더 내의 OCR_TEST_1.png 파일을 Tesseract로 인식해 결과를 output.txt 파일로 출력하는 것.

 

Tesseract Open Source OCR Engine v4.1.1 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 139

이거였는데, 위와 같은 경고가 떠서 결과 파일이 만들어지지 않은 줄 알아서 다시 구글링을 해봤다ㅠㅅㅠ

(나중에 알고봤더니 output.txt라는 이름으로 파일이 만들어져있었음.(이 멍청아!))

그러고 나서 다시 입력한 명령어는

 

tesseract ./image/OCR_TEST_1.png stdout -l eng > img_1.txt

 

이건데 제일 처음 구글링 해서 입력한 명령어가 tesseract /이미지경로/이미지 파일명 stdout 

이거였는데 왜 안될까 막 그러다가 일단, 위에서 실수한 인식할 이미지 폴더를 bin폴더 내에 넣지 않았고, 결과로 출력할 txt 파일명도 지정해주지 않아서 그랬는 것 같다.

그렇지만 위에처럼 입력해서 내가 얻은 결과는

 

Warning: Invalid resolution 0 dpi. Using 70 instead.

이거였지롱 ㅋㅅㅋ 음,, 어쨌든 뭔가 dpi 설정이 잘 안 된 것 같다는 말인데, 그대로 ctrl+c -> ctrl+v 해서 구글링했는데 해상도 문제가 맞았다! (생각해보니 사전 기술 조사할 때 dpi 300에서 인식이 제일 잘 된다고 한 것 같다.(뒷북이다.ㅎㅎ)) 그래서 해상도를 300dpi로 변경해서 결과 파일을 img_1. txt 로 지정하고 다시 입력! 

 

tesseract --dpi 300 ./image/OCR_TEST_1.png stdout -l eng > img_1.txt

 

이렇게 하니까 드디어! 결과 파일이 생성된 것 같아 확인해보는데 위에서 없는 줄 알았던 output.txt 파일을 발견했다ㅡㅡ

얜 뭐징 하면서 봤는데 처음에 두개의 파일이 다른 내용인 줄 알았다.

 

dpi300 설정 X
dpi 300 설정

확실히 두 개 차이가 나는 것 같다! 어쨋든 이렇게해서 Tesseract test 실행 끝.

(사실,,글 올리면 몇 개나 올리고 글 쓰면서도 답답하고 억울해할 Yolo 빌드, custom train을 빨리 올리고싶은데,, 스압주의 아니면 고구마 500개 주의해야해서 미루는 중이다. 얼른 올려야겠다.)