Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

문자 인식은 1928년 G. Tauschek가 세계 최초로 인쇄체 숫자를 판독하는 문자 인식 방법에 특허 출원을 하며 시작되었습니다. 1950년대에 들어서야 비로소 디지털 컴퓨터가 출연하여, 여러 다양한 기관들이 다양한 문자 인식 방법들을 발표하며, 오늘날에는 다양한 자동화 작업을 위해 사용되고 있습니다.

문자 인식 기술은 크게 2가지로 나눌 수 있습니다. 

온라인 문자 인식

온라인 문자 인식이란 사용자가 필기하는 동안에 인식기가 문자를 인식하는것을 의미하는데, "실시간" 또는 "동적" 이라는 용어를 대신 사용하기도 합니다.

오프라인 문자 인식

오프라인 문자 인식은 이미 작성된 인쇄체 혹은 필기체 문자를 인식하는 기술이다. 일반적으로 광학 문자 인식 OCR(Optical Character Recognition)으로 표현됩니다.

두 기술의 근본적인 차이는 필기 데이터를 획득하는 방법에 있습니다.

온라인 방식에서는 필기의 시간적, 공간적인 동적 정보를 얻을 수 있으며 획수, 획순, 필기 방향등의 정보를 알 수 있습니다.

오프라인 방식으로는 이러한 정보를 거의 얻을 수 없고, 이진화, 윤곽선 추출후 형태 분석이나 템플릿 매칭등의 과정을 통해 글자를 판단하게 됩니다.

이번 포스팅에서는 오프라인 방식의 대표 오픈소스인 Tesseract-OCR을 알아보겠습니다.

#2 Tesseract-OCR

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

출처 - 네이버 영어 사전

Tesseract-OCR은 스스로 아마 가장 정밀한 퍼포먼스를 자부하는 오픈 소스 OCR엔진입니다.

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

홈페이지 - https://code.google.com/p/tesseract-ocr/

2006년부터 구글의 지원을 받아 더욱 발전해 왔고, Leptonica 영상처리 라이브러리와 결합하여 다양한 포멧의 이미지를 처리 할 수 있습니다. 아파치 라이센스 2.0으로 배포되고 있으며 현재 60개 이상의 언어를 지원하고 있습니다.

기본적으로 VC++ 라이브러리를 제공하나, 자바는 Tess4J, 안드로이드는 tesseract-android-tools를 통해 포팅된 오픈소스를 제공하므로 다른 환경에서도 쉽게 사용 가능합니다.

Tess4J - http://tess4j.sourceforge.net/

tesseract-android-tools - https://code.google.com/p/tesseract-android-tools/

실제 라이브러리를 다운받아서 예제코드를 약간 변경하여 실행해 보았습니다.

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

메모장 돋움 보통 폰트로 적은 글자를 캡쳐해 테스트 한 결과 입니다.

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

결과는 상당히 잘 나오는 편입니다.

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

한글 또한 상당히 잘 나옵니다.

하지만...

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

위의 그림들과 같이 밝기, 명암, 기울기 등에 따라 인식률이 크게 영향을 받습니다.

그러므로 추가적인 보정 작업들을 통해 인식률을 향상 시킬 수 있습니다.

일반적인 폰트에 대해서는 높은 인식률을 보여주지만 이상하고 희한한 폰트는 어떨까요?

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

(참고로 Tesseract OCR API Test, Hello World, Samsung Software Membership라고 적혀있습니다.)

솔직히 직접 봐도 무슨 글자인지 잘 모르겠지만, 역시나 인식률은 형편 없습니다.

이를 해결하기 위해 Tesseract-OCR에서 데이터 학습 기능을 제공합니다.

다양한 폰트들이나 필기체 같이 일정하지 않는 글씨들을 학습시켜 인식률을 높일 수 있습니다.

#3 Tesseract OCR 문자 학습

Tesseract OCR의 데이터 학습법은 https://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3에 나와 있습니다만 다소 복잡한 관계로 간단하게 설명드리겠습니다.

1. 먼저 다음과 같이 해당 문자들에 대한 이미지 파일을 구성해야 합니다.

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

이미지는 tif 파일을 사용하며, 특이한 파일 이름 규칙을 지켜야 합니다.

[lang].[fontname].exp[num].tif

[lang]은 OCR 사용시 불러올 문자열 입니다.

다음 예제들에서 빨간 부분에 쓰일 문자열 입니다.

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

[fontname]은 사용자가 만들 폰트의 이름이고

[num]은 여러 이미지로 학습 데이터를 구성할때 쓰일 파일의 인덱스를 나타냅니다.

Ex) myeng.myfont.exp0.tif

위와 같이 파일이름을 바꾸어주고 다음 단계로 넘어 갑니다.

2. 학습을 하기 위해 구성한 이미지로부터 box 파일을 생성해야 합니다.

> tesseract.exe myeng.myfont.exp0.tif myeng.myfont.exp0 batch.nochop makebox

(tesseract.exe [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox)

(학습에 사용되는 모든 실행 파일은 tesseract-ocr를 설치하거나, 직접 빌드해서 얻으실 수 있습니다.)

위 명령을 통해, myeng.myfont.exp0.box 파일을 생성 합니다.

box파일은 글자 마다의 인식 단위를 지정하기위해 인식 단위 문자들의 바운딩 박스 정보를 가지고 있는 파일입니다.

이 바운딩 처리를 GUI로 편하게 처리할 수 있는 오픈소스가 있습니다.

바로 jTessBoxEditor와 cowboxer 입니다.

jTessBoxEditor가 더 많은 기능을 제공하지만 편의상 cowboxer를 사용하여 진행하겠습니다.

(한글의 경우에는 jTessBoxEditor를 사용하시는게 좋습니다.)

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

cowboxer로 box파일을 열어보면 위와 같이 나타나는데 box 하나하나가 글자를 나타냅니다.

박스의 이미지를 글자 크기에 알맞게 적용시켜주고 각 박스에 글자들을 매칭시켜 줍니다.

cowboxer의 Help 탭에 단축키 사용법이 나와 있으니 참고하시면 됩니다.

3. 모든 글자들을 수정후 BOX파일을 저장하고 다음 명령을 통해 학습을 진행 합니다.

> tesseract.exe myeng.myfont.exp0.tif myeng.myfont.exp0 nobatch box.train

(tesseract.exe [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] nobatch box.train)

명령을 입력하면 myeng.myfont.exp0.tr 파일과 myeng.myfont.exp0.txt 파일이 생성 됩니다.

4. 다음 명령으로 unicharset 파일을 생성 합니다.

> unicharset_extractor.exe myeng.myfont.exp0.box

(unicharset_extractor.exe [lang].[fontname].exp[num].box)

unicharset 파일은 Tesseract가 출력 가능한 모든 문자들의 집합을 모아놓은 파일입니다.

5. 다음 명령에 앞서 font_properties라는 파일을 만들어야 합니다. 이 파일은 해당 폰트 스타일 정보를 포함하는 파일입니다. 이 파일은 다음과 같은 정보를 가지게 됩니다.

Tesseract 4.0 버전으로 접어들면서 신경망 기술을 사용하여 다양한 상황에 접근하는 학습 능력을 갖추었다고는 하지만 사실 OCR을 사용하는 주된 이유는 스캐닝을 하거나 간단한 자동화를 위한 경우가 많을 것이라고 생각합니다.

빅데이터가 아닌 이상 어느 정도 규칙적인 이미지에서 필요한 글자만 학습하면 된다면 굳이 신경망 기술을 사용할 만큼 복잡한 케이스를 다룰 필요가 없을 뿐더러 이에 맞는 컴퓨팅 파워도 충족해야 합니다.

정리하자면 문제 인식을 다음과 같이 하여 OCR 한글 학습을 시도해 보겠습니다.

  • 목적이 분명하며 제대로 학습 해야만 하는 글자가 있다.
  • Input으로 비슷비슷한 이미지가 제공된다.
  • 신경망을 사용할만큼 컴퓨팅 파워가 충분하지 않다(특히 라즈베리파이를 사용할 경우).

위와 같은 상황이라면 OCR을 목적에 맞게 사용할 수 있으며 학습한 글자에 대해서는 꽤나 정확하게 인식할 수 있습니다.

Tesseract 3.03 버전 이상부터는 위와 같은 상황에 대한 간단한 학습을 진행할 수 있습니다.

Tesseract 4.x 버전과 3.x 버전은 학습하는 방법이 다릅니다.
이 포스팅은 3.03 이상에서의 클러스터링 방법입니다.
Tesseract를 설치할 때

# -*- coding: utf-8 -*-

import os
import Image
import pytesseract

os.environ['TESSDATA_PREFIX'] = '/usr/share/tesseract-ocr'

print(pytesseract.image_to_string(Image.open('result.png')))
2 등의 명령으로 해당 버전을 설치하셔야 합니다. Release

Tesseract 4.0 버전 Manual

OpenCV를 사용하는 이유

한글 인식은 인식에 관한 문제입니다. 이미지로 부터 인식을 하는 과정이 필요한데 Tesseract는 모든 이미지를 상황에 맞게 인식시킬 수 없을 뿐더러 사용하는 필터도 제한적입니다.

글자를 인식하려면 먼저 글자의 가장자리 부분을 알아야 하며 또한 이 각 글자마다 가장자리 영역이 어디까지인지 추출해야 합니다. 한글의 경우 영어와 달리 초성 중성 종성이 합쳐지는 경우가 있으므로 생각보다 쉬운 일이 아닙니다.

결국 제대로 학습해야만 하는 글자가 있다면 전처리 과정을 확실히 하는 것이 중요합니다. 이미지에 따라 다르겠지만 저는 다음과 같은 과정을 진행했습니다.

  1. GrayScale로 변환한다.
  2. 이미지를 확대한다.
  3. 노이즈를 제거한다.
  4. 이진화 시킨다.

첫 번째로 글자를 처리하는 데 있어 색이 필요하지 않습니다. GrayScale로 변형하여 나중에 이진화 작업을 합니다.

두 번째로 글자가 작은 경우가 있기 때문에 이미지를 확대합니다. 이 과정은 인식이 불필요한 부분을 잘라내는 것도 포함합니다. 이 과정으로 글자가 어느 정도 깨지게 되거나 안티앨리어싱 부분이 드러날 것입니다.

세 번째로 불필요한 테두리 인식을 방지하기 위해 노이즈를 제거합니다.

마지막으로 글자와 배경을 완벽하게 흑과 백으로 이진화를 시킵니다. 어느정도 회색의 글자도 있기 때문에 이진화의 정도를 조절합니다. 안티앨리어싱으로 흐려진 글자를 명확하게 할 수 있습니다.

위의 사진은 스크린샷 이미지라 간단한 옵션으로 해결이 가능하지만 원본 이미지가 카메라로 촬영된 이미지일 경우는 Adaptive Gaussian Thresholding 같은 기술이 필요합니다.

OpenCV의 윤곽(contour) 인식은 기본적으로 검은 바탕에서의 흰색 오브젝트를 찾는 것이라고 합니다(참조). 따라서 이진화 할 경우 글자를 흰색으로, 배경을 검게 하는 것이 인식율을 높이는 방법이 될 수 있습니다.

아래 이미지로 테스트를 해보겠습니다.

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

이미지를 자세히 확대해 보시면 다음과 같이 글씨 주위의 노이즈를 발견할 수 있습니다.

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

다음은 예제 코드입니다.

# -*- coding: utf-8 -*-

import cv2
import numpy as np

img = cv2.imread('rawimage.png')
dst = 'result.png'

# Gray Scale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Enlarge 2x
height, width = gray.shape
gray_enlarge = cv2.resize(gray, (2*width, 2*height), interpolation=cv2.INTER_LINEAR)

# Denoising
denoised = cv2.fastNlMeansDenoising(gray_enlarge, h=10, searchWindowSize=21, templateWindowSize=7)

# Thresholding
gray_pin = 196
ret, thresh = cv2.threshold(denoised, gray_pin, 255, cv2.THRESH_BINARY)

# inverting
thresh[260:2090] = ~thresh[260:2090]

result = np.hstack((gray_enlarge, thresh))

cv2.imwrite(dst, result)

# -*- coding: utf-8 -*-

import os
import Image
import pytesseract

os.environ['TESSDATA_PREFIX'] = '/usr/share/tesseract-ocr'

print(pytesseract.image_to_string(Image.open('result.png')))
3 옵션은 어차피 이진화 작업을 할 것이기 때문에
# -*- coding: utf-8 -*-

import os
import Image
import pytesseract

os.environ['TESSDATA_PREFIX'] = '/usr/share/tesseract-ocr'

print(pytesseract.image_to_string(Image.open('result.png')))
4 옵션보다 빠른
# -*- coding: utf-8 -*-

import os
import Image
import pytesseract

os.environ['TESSDATA_PREFIX'] = '/usr/share/tesseract-ocr'

print(pytesseract.image_to_string(Image.open('result.png')))
5를 사용했습니다.

사진에 어느정도 회색의 글자가 있습니다. 이를 인식하기 위해 회색 인식 정도를

# -*- coding: utf-8 -*-

import os
import Image
import pytesseract

os.environ['TESSDATA_PREFIX'] = '/usr/share/tesseract-ocr'

print(pytesseract.image_to_string(Image.open('result.png')))
6으로 조절했습니다.

검은 바탕에서의 흰색 글자를 만들기 위해 사진을 잘라 인버팅 과정을 거쳤습니다.

아래는 결과 사진입니다.

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

이로써 글자 인식만을 위한 깔끔한 이미지를 추출할 수 있습니다.

# -*- coding: utf-8 -*-

import os
import Image
import pytesseract

os.environ['TESSDATA_PREFIX'] = '/usr/share/tesseract-ocr'

print(pytesseract.image_to_string(Image.open('result.png')))

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

사실 이런 기본적인 이미지 프로세싱 과정만 거쳐도 위와 같이 벌써부터 차이가 나기 시작함을 알 수 있습니다(출력을 위해

# -*- coding: utf-8 -*-

import os
import Image
import pytesseract

os.environ['TESSDATA_PREFIX'] = '/usr/share/tesseract-ocr'

print(pytesseract.image_to_string(Image.open('result.png')))
7으로 바꾸어 출력했습니다).

하지만 한글만 인식하는 탓인지 기호 및 영어를 구별하지 못합니다. 이를 커스터마이즈하여 타겟에 대한 정확한 학습을 필요로 합니다.

Tesseract Training

이제 트레이닝의 시작입니다.

OpenCV를 통한 전처리 과정으로 Tesseract Training을 위한 인식도 향상되었을 것입니다.

전체적인 과정은 Tesseract 3.03-3.05 new language training와 같습니다.

Data files

필요한 데이터 파일은 다음과 같습니다.

  • # -*- coding: utf-8 -*-
    
    import os
    import Image
    import pytesseract
    
    os.environ['TESSDATA_PREFIX'] = '/usr/share/tesseract-ocr'
    
    print(pytesseract.image_to_string(Image.open('result.png')))
    
    8
  • # -*- coding: utf-8 -*-
    
    import os
    import Image
    import pytesseract
    
    os.environ['TESSDATA_PREFIX'] = '/usr/share/tesseract-ocr'
    
    print(pytesseract.image_to_string(Image.open('result.png')))
    
    9 (필수)
  • 개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
    
    0
  • 개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
    
    1 (필수)
  • 개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
    
    2 (필수)
  • 개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
    
    3 (필수)
  • 개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
    
    4
  • 개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
    
    5
  • 개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
    
    6
  • 개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
    
    7

이 데이터 파일들을 클러스터링하고 결합할 것입니다.

학습할 기본 텍스트 파일

위 사진을 통해 학습할 기본 텍스트는 아래와 같이 정리할 수 있습니다.

개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :

example.txt

Tesseract는 아래와 같은 명령을 통해 자동화하여 해당 글꼴을 통해

개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
8파일로 자동으로 변환시켜 줍니다.

그러면 먼저 한글 글꼴이 필요한데 저작권에 문제가 없는 Naver의 나눔 글꼴을 사용했습니다.

# ./NanumGothic.ttf exist
text2image --text=example.txt --outputbase=mylang.NanumGothic.exp0 --font='NanumGothic' --fonts_dir=.

그럼

개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
9 이미지 파일과
# ./NanumGothic.ttf exist
text2image --text=example.txt --outputbase=mylang.NanumGothic.exp0 --font='NanumGothic' --fonts_dir=.
0 박스 파일 두가지가 자동 생성됩니다.

박스파일은

# ./NanumGothic.ttf exist
text2image --text=example.txt --outputbase=mylang.NanumGothic.exp0 --font='NanumGothic' --fonts_dir=.
1 명령으로 조회해 보면 이미지에서 4개의 박스 좌표만 나온다는 것을 알 수 있습니다. 텍스트 파일은 글꼴덕에 비교적 정확하게 글자가 추출되어 교정작업이 필요 없지만, 이제부터 사진으로 학습을 해야 하므로 그래픽 도구를 사용하는 것이 편리합니다.

jTessBoxEditor.jar 또는 ScrollView.jar를 사용하시는 것을 권장합니다.

Tesseract 한글 인식률 높이기 - Tesseract hangeul insiglyul nop-igi

jTessBoxEditor.jar

사진과 같이 해당 좌표를 수정하거나 새로 추가할 수 있으며 그래픽 도구 없이 그냥 box파일을 편집해도 됩니다...

Convert Image

파일 형식은 꼭

# ./NanumGothic.ttf exist
text2image --text=example.txt --outputbase=mylang.NanumGothic.exp0 --font='NanumGothic' --fonts_dir=.
2형식이어야 합니다. 기존 사진을
개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
8 파일로 변경하면 되는데 여기서 문제가 하나 발생합니다.

단순히

# ./NanumGothic.ttf exist
text2image --text=example.txt --outputbase=mylang.NanumGothic.exp0 --font='NanumGothic' --fonts_dir=.
4 명령어로 확장자를 바꾸면 DPI가 손실되어 편집을 할 수 없으며 추후에도 오류가 계속 발생합니다.

이때 설치한

# ./NanumGothic.ttf exist
text2image --text=example.txt --outputbase=mylang.NanumGothic.exp0 --font='NanumGothic' --fonts_dir=.
5 라이브러리를 사용하여 이미지를 300 DPI를 가진
개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
8 이미지로 변환할 수 있습니다.

convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif

당연한 이야기지만 변환하는 원본 이미지는 OpenCV로 프로세싱 된 것이 좋습니다.

Make Box file

이제 새로 만든

개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
8 파일의
# ./NanumGothic.ttf exist
text2image --text=example.txt --outputbase=mylang.NanumGothic.exp0 --font='NanumGothic' --fonts_dir=.
8 파일을 만듭니다. Tesseract에서 다음 명령을 통해 지원합니다.

tesseract mylang.NanumGothic.exp1.tif mylang.NanumGothic.exp1 -l kor batch.nochop makebox

데이터가 아직 학습이 되지 않았기 때문에 교정 작업을 일일이 해주어야 합니다. 그나마 GUI를 이용하여 교정하는 것이 빠릅니다.

Training

힘든 교정 과정이 끝나면 이제 데이터로 학습을 진행합니다.

tesseract mylang.NanumGothic.exp0.tif mylang.NanumGothic.exp0 box.train
...

여러개의

개발제한구역 스터디 예약현황 조회 예약일 회의실 예약하기 오후 년 월 일 1 2 3 4 5 6 7 8 9 0 M A B :
8 파일로 학습하는 것이 좋습니다. 이 과정으로
convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
0 파일이 생성됩니다.

unicharset

unicharset_extractor mylang.NanumGothic.exp0.box mylang.NanumGothic.exp1.box ...

클론한 langdata 레포지토리를 참조하여 이 한글 데이터를 바탕으로 새로운 unicharset 파일을 만들어 냅니다.

set_unicharset_properties -U unicharset -O kor.unicharset --script_dir=../langdata

생성된

convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
1을
convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
2으로 이름을 변경합니다.

font_properties

글꼴과 맞는 파일을 작성합니다.

형식은

convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
3
convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
4
convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
5
convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
6
convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
7
convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
8 입니다.

Clustering

클러스터링은

convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
9,
tesseract mylang.NanumGothic.exp1.tif mylang.NanumGothic.exp1 -l kor batch.nochop makebox
0 두가지 명령을 수행할 수 있습니다.
convert -units PixelsPerInch result.png -density 300 mylang.NanumGothic.exp1.tif
9은 영어 문자에 추가로 결합되는 문자(ḗ, ɔ̄́, r̥̄)처럼 인도 어 이외에서는 사용해서는 안됩니다. 그래도
tesseract mylang.NanumGothic.exp1.tif mylang.NanumGothic.exp1 -l kor batch.nochop makebox
2 파일은 생성됩니다.