Tesseract-OCR.3.0.2.exe 를 다운받아 Java소스로 구현하는 것까지 했음.
문자 학습을 해보자 (영어)
1.
https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
jTessBoxEditorFX-2.0-RC.zip 위의 경로에서 jTessBoxEditor 다운로드한다.
압축을 풀고 'train' 파일 실행
(다운로드 후 안에있는 이미 다운받은 tesseract-ocr은 지워주었다)
2.
메모장에 문장을 작성하고 저장한다.
문장예시)
The (quick) brown {fox} jumps! over the $3,456.78 <lazy> #90 dog & duck/goose, as 12.5% of E-mail from aspammer@website.com is spam?
3.
.txt파일 .tif로 변환)
jTessBoxEditor에서 TIFF/BOX Generator 탭 ->
input 방금 작성한 텍스트파일 선택 ->
output은 tif파일 저장할 경로 jTessBoxEditorFX\samples\vie ->
랭귀지 설정(원하는대로 설정가능), 폰트 설정->
Generate 클릭 ->
jTessBoxEditorFX\samples\vie 경로에서 box파일이 생성된것을 볼 수 있다.
4.
에디터에서 Box Editor 탭->open->
방금만들어준 파일을 불러와서 수정할거있음하고 저장.->
box파일이 생긴 경로 jTessBoxEditorFX\samples\vie 에서 cmd창을 열어준다.->
tif파일의 이름(test.bradleyhanditc.exp0)을 넣어서 command라인에 작성
ex)
tesseract.exe
test.bradleyhanditc.exp0.tif
test.bradleyhanditc.exp0 nobatch box.train
결과)
vie 폴더에 test.font_properties파일이 생겼다. 파일명에서 test.을 지워준다.
5.
command라인에 입력하면 unicharset을 생성해준다.
unicharset_extractor.exe
test.bradleyhanditc.exp0.box
6.
클러스터링
command라인에 입력
shapeclustering -F font_properties -U unicharset
test.bradleyhanditc.exp0.tr
(4번에서 언급한 font_properties 파일명 앞에 랭귀지를 빼주지않으면 에러남)
7.
command라인에 입력
mftraining.exe -F font_properties -U unicharset -O eng.unicharset
test.bradleyhanditc.exp0.tr
여기까지 하면 새로운 파일들이 생성되어있다. inttemp, pffmtable, shapetable
8.
normproto 파일이 하나 더 필요하다. 어디서 무슨파일이 생성되는지는 버전에따라 다른듯.
command라인에 입력
cntraining
test.bradleyhanditc.exp0.tr
여기까지해서 생성된 inttemp, pffmtable, shapetable, normproto, unicharset 5개 파일 앞에
test. 을 붙여준다. (자신이 설정한 랭귀지명)
9.
파일들 합치기
command라인에 입력 combine_tessdata.exe 랭귀지명
. (반드시 마침표찍어야함)
combine_tessdata.exe
test.
여기까지하면 test.traineddata 라는 파일이 생긴다.
10.
9번 파일을 Tesseract-OCR\tessdata 에 넣어준다.
확인하기 command라인 입력
tesseract
test.bradleyhanditc.exp0.tif output -l test
---------------------------------------------------------------------------------------
참고> 트레이닝 튜토리얼(영어)
https://github.com/tesseract-ocr/tesseract/wiki/Training-Tesseract-3.00%E2%80%933.02
되긴하는데 100%는 아니다 W를 VV로 인식한다.
java코드에서 어떻게 xxx.traineddata를 읽어와야하는지 모르겠다.