tesseract 사용해보자

2020. 4. 23. 19:40일상

책을 읽으면서 한글 파일에 옮겨야 하는 알바가 있다.

근데 너무 노가다...이고 내가 하는 건 아니지만 쨋든 너무 시간과 에너지가 아까웠다.

그래서 책 본문을 사진으로 찍으면 사진 속 글을 옮길 수 있는 프로그램을 이용하고자 한다.

1. 첫번째 생각한 방법 -> 빅스비 이용. 실제로 빅스비를 이용해 외국 가게 간판을 찍은 후 글자만 뽑아 번역해 식당에 간 적이 몇 번 있었기 때문에 제일 먼저 생각났다.

 

단점이 있다면 될때까지 찍어야 하고.. 빅스비의 글자 인식률은 뛰어나지만 빅스비에서 찍어서 글자 뽑음 -> 복사

-> 카톡, 윈도우 메모 등의 복사 수단을 이용하여 컴으로 옮김 -> 받은 후 다시 복사하여 한글 파일에 붙여넣기 과정이 필요한데..

컴으로 옮기기까지의 자동화 방법을 전혀 모르겠다.. 그래서 손으로 일일히 해야한다. 그럼 귀찮다.

 

2. 두번째 생각한 방법 -> 딥러닝..? 일단 내가 들어본 적이 있고 운만 좋다면 곧 딥러닝 프로젝트에 들어갈 수도 있는데 그때 도움이 될 것 같아서 후보에 둬 봤다.

 

단점 -> 딥러닝에 대해 잘 모름. 그리고 짧은 구글링에서 딥러닝 이미지 서치만 나왔기 때문에 일단 보류

 

3. 세번째 방법 -> 딥러닝 이미지 글자 옮기기 라고 검색하다가 연관 검색어에 tesseract가 떴다. 확인해보니 내가 하고자 하는 방향과 정확히 일치한다!! 그래서 다시 폭풍 구글링 후 tesseract로 결정!

 

완벽하다고 생각했다. 이때까진

 

1. tesseract 설치 (윈도우)

https://github.com/UB-Mannheim/tesseract/wiki

 

UB-Mannheim/tesseract

Tesseract Open Source OCR Engine (main repository) - UB-Mannheim/tesseract

github.com

나는 다행히 영어 지문만 뽑으면 됐기에 언어팩에서 영어와 한글만 설치했다.

설치때 못 깔았다고 해서 걱정할 필요는 없다. 나중에 github tesseract 에서 언어팩을 따로 받을 수 있다.

 

2. tesseract 환경변수 설정

tesseract 설치할 때 설치 경로 복사해놓고, 환경변수 들어가서 설정하면 된다.

오랜만에 환경변수해서 까먹었다...ㅎ.... 컴공생 맞나....

내 PC 우클릭 -> 속성 -> 고급 시스템 설정 -> 고급 -> 환경 변수

아래 시스템 변수에 넣으면 된다.

혹시 나처럼 시스템 변수에 넣으려 했는데 시스템 변수 전부 있는 창이 안 뜨고 좀스럽게 하나씩만 추가하는 것만 보여서 당황한 사람이 있다면!

시스템 변수 내의 Path 더블 클릭하면 된다.

 

3. tesseract 실행

환경 변수 끝나고 cmd 창에 tesseract 쳤을 때 이상한 Warning 안 뜨고 Usage부터 떴다면 설치 완료다

tesseract C:\Download\sample.jpg stdout 

기본 실행 코드이다

나는 C:\Download에 있는 sample.jpg의 글자를 cmd 창에 바로 추출하고 싶었다

 

만약 C:\Download에 있는 sample.jpg의 글자를 C:\Download의 sample_out.txt에 저장하고 싶다면

tesseract C:\Download\sample.jpg C:\Download\sample_out

으로 하면 된다. sample_out.txt에서 txt 형식은 자동으로 붙기 때문에 생략해도 된다.

 

그리고 뽑는 언어를 지정해주고 싶다면 코드 맨 뒤에 (영어라면)-l eng를 쓰면 된다.

한글이라면 -l kor

혼합이라면 -l kor+eng

 

근데 실행하자마자 오류가 생겼다.

Warning: Invalid resolution 0 dpi. Using 70 instead.

Estimating resolution as 462

 

그 이후로 글은 제대로 뽑히지 않았다.

 

구글링해보니 나같은 사람들이 꽤 많았다.

 

일단 이유는 내 이미지 메타 데이터에 해상도 정보가 포함되어 있지 않아 tesseract가 알아서 해상도를 정하고 돌려서 이런 문제가 생긴다는 것이었다.

 

이미지 쪽은 전혀 모르기 때문에.. 일단 구글링 해본 해결책은 

1. https://imagemagick.org/index.php 여기서 imagemagick을 설치 후 사용해 사진의 해상도를 재 조정한다.

(어떤 사람은 이것도 안된다고 하길래 일단 안 해봤다.)

2. 메타데이터 내의 정보를 부여한다.

https://github.com/tesseract-ocr/tesseract/issues/1702#issuecomment-405705910

 

Warning. Invalid resolution 0 dpi. Using 70 instead. · Issue #1702 · tesseract-ocr/tesseract

command tesseract https://image.ibb.co/eibzaT/test.png result Current Behavior: Warning. Invalid resolution 0 dpi. Using 70 instead. Estimating resolution as 161 Estimating resolution as 161 versio...

github.com

여기 이 분이 쓰신 코드를 참고하면 좋을 것 같다.

 

3. Page Segmentation Mode를 1번으로 조정한다.

tesseract --help-extra 를 입력하면 상세 설명이 나오는데 그 중

--psm num을 이용하면 Page Segmentation Mode을 바꿀 수 있다.

1번은 Automatic page segmentation with OSD. 이다.

참고 : https://groups.google.com/forum/#!topic/tesseract-ocr/oCnZKTQgrio

 

Google 그룹스

 

groups.google.com

나는 3번을 이용하여 성공적으로 글을 뽑을 수 있었다.

이제 와서 생각난 단점 ) 현실의 책을 하나 하나 사진 찍어야 한다... 이 점은 어떻게 자동화 할 순 없을 것 같다..?

 

이거 이후 해야하는 일 

사진을 찍어서 컴퓨터로 보내 파일에 사진이 쌓여 있다고 가정해보면, 자동으로 사진을 돌려 글을 뽑고, 뽑은 글들을 전부 한 파일 내에 취합해야 한다.

그럼 다뤄본 적이 있는 python 키보드, 마우스 제어를 이용하여 건들지 않고도 자동으로 돌아가게 만든다.

그리고 python에서 tesseract 라이브러리를 쓸 수 있다고 봤다. 사용하여 아예 하나의 프로그램으로 돌아가게 만든다. 

 

그리고 궁금한 점이 하나 있다면..

메타데이터 정보 부여 코드를 이해하고 싶다!

 

이건 나중으로 미루자...

과제가 너무 많다..

'일상' 카테고리의 다른 글

python에서 tesseract 사용하기  (0) 2020.04.25