2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

dockerのtesseract-ocrでお手軽OCRする

Last updated at Posted at 2020-07-16

概要

dockerで公開されているtesseractを使ってお手軽にOCR(光学的文字認識)する手順です。
公開されている手順そのままになりますが、dockerでの利用が簡単だったので日本語で残しておこうと思います。

手順

  1. docker pullする
  2. scriptファイルをDLする
  3. test.shをOCRしたいファイル向けに書き換える
  4. 結果の確認

docker pullする

なにはともあれ

docker pull tesseractshadow/tesseract4re

scriptファイルをDLする

scriptファイルをダウンロードして解凍してください
こちらのソース一式にdocker pullしたイメージを使ったshellが入っています。
もちろんscriptファイルがなくてもdocker imageの利用は可能ですが、あったほうが簡単に使えるのでDLします。

test.shをOCRしたいファイル向けに書き換える

そのままでもサンプルは利用可能ですが、自分が用意した画像に変えたほうが楽しいと思うので、OCRするファイルパスを修正します。

cd /path/to/your/directory/{回答したディレクトリ}
vim test.sh

ocr-files以下を好きなファイルパスに変更します。

docker cp ./ocr-files/phototest.tif t4re:/home/work/$TASK_TMP_DIR/

こちらのphototest.tifの部分を上記で指定したファイル名に変更します。

docker exec -it t4re /bin/bash -c "mkdir -p ./$TASK_TMP_DIR/out/; cd ./$TASK_TMP_DIR/out/; tesseract ../phototest.tif phototest -l eng --psm 1 --oem 3 txt pdf hocr"

結果の確認

以下でOCRを実行できます。

sh test.sh

以下のディレクトリ以下にできたファイルが確認できると思います。

scripts/ocr-files/output/TASK_xxxxx/out/

様々なOCR

test.sh内のtesseractコマンドのオプションを修正することで様々な結果が出力されます。
自分が利用したかったのはpsm(page segmentation mode)のレイアウトを考慮してくれるオプションです。

以下の様にpsmのオプションを1から11に変更すると、画像のレイアウトを考慮したOCRをしてくれます。またoemは1を指定する必要があります。

docker exec -it t4re /bin/bash -c "mkdir -p ./$TASK_TMP_DIR/out/; cd ./$TASK_TMP_DIR/out/; tesseract ../phototest.tif phototest -l eng --psm 11 --oem 1 txt pdf hocr"

さらに以下のように出力の結果をtsvにすると座標や、何番目のブロックとして文字列を読み取ったかの情報が得られます。

docker exec -it t4re /bin/bash -c "mkdir -p ./$TASK_TMP_DIR/out/; cd ./$TASK_TMP_DIR/out/; tesseract ../phototest.tif phototest -l eng --psm 11 --oem 1 tsv"

結果TSV(抜粋)
block_numやtop, left, width, heightといった値が入り、それに該当したテキストが取得できています。これを使えばどの位置にどの文字があるか?というのがわかるので様々な用途に応用できそうですね。

level	page_num	block_num	par_num	line_num	word_num	left	top	width	height	conf	text
1	1	0	0	0	0	0	0	640	480	-1	
2	1	1	0	0	0	36	92	582	269	-1	
3	1	1	1	0	0	36	92	582	92	-1	
4	1	1	1	1	0	36	92	544	30	-1	
5	1	1	1	1	1	36	92	60	24	96	This
5	1	1	1	1	2	109	92	20	24	96	is
5	1	1	1	1	3	141	98	15	18	96	a
5	1	1	1	1	4	169	92	32	24	96	lot
5	1	1	1	1	5	212	92	28	24	96	of
5	1	1	1	1	6	251	92	31	24	96	12
5	1	1	1	1	7	296	92	68	30	96	point
5	1	1	1	1	8	374	93	53	23	96	text
5	1	1	1	1	9	437	93	26	23	96	to

終わりに

tesseractはDeepLearningを利用して文字認識しています。
学習データも様々用意されており、読ませる学習データにより日本語や世界各国の言語が認識できます。
また、もちろん自分で学習データを用意することも可能です。

flutterでもtesseractを利用したライブラリが出ていて、非常に簡単に利用できました。(使い方や精度の問題はクリアしないといけませんが)
flutterでの利用例も別の機会に記載しようかと思います。

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?