10
8

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 5 years have passed since last update.

tesseract+pytesseractのdockerコンテナ

Last updated at Posted at 2018-10-11

はじめに

スキャンした画像からデータを抽出してデータベースに…という需要はそこそこあると思います。そんなときに鉄板と噂なのがtesseract。ただ、このツール、どうもOSによってインストール方法がまちまち。ならだいたいの環境でインストールしてあるであろう(誇張)、dockerコンテナにしてしまえ!というのがことの始まりです。

ついでに画像処理に強そうなPythonも含めたのがポイント。あとはPythonでスクリプトを書くだけです。普段、Pythonを使わないので知らなかったんですが、PIL、すごく便利ですね〜

2018/10/11現在で、tesseract 3.04.01が動かせます。Pythonとの接続はpytesseractを使いました。世の中にはPyOCRというのもあるそうです。

作り方

  1. python3のlatestのDocker imageをベースに、
  2. tesseractと依存ライブラリをaptでインストールして、
  3. 必要なpythonライブラリをpipでインストール

ちなみにPythonのDocker imageがDebian GNU/Linux 9 (stretch)でしたので、それを参考にやり方を探しました。

# 1. python3のlatestのDocker imageをベースに、
FROM python:latest

# 2. tesseractと依存ライブラリをaptでインストールして、
RUN apt-get update
RUN apt-get -y install \
    tesseract-ocr \
    tesseract-ocr-jpn
RUN apt-get clean

# 3. 必要なpythonライブラリをpipでインストール
RUN pip install --upgrade pip; \
    pip install \
    pillow \
    pytesseract

ENTRYPOINT ["/usr/bin/tail", "-f", "/dev/null"]

困ったこと:画像が小さいとエラー

あまりに小さい画像だとエラーを吐く模様。Empty Page!!と言われます。PILのresize等で画像を拡大して読み取れば回避できました。当初、エラーの原因がわからず苦労しました。Leptonicaというパッケージに依存しているらしいので、それがないとダメ?と思ってビルド&インストールしたりと大立ち回りの遠回り…

作ったもの

GitHubとDockerHubに上げました。DockerもPythonもとおりいっぺんな理解ですので、お手柔らかに…

DockerHub

cranpun/tesseractpython

GitHub

cranpun/tesseract-python-container

サンプルコードも放り込んだので試すには楽かもしれないです。Dockerさえ入っていればコマンド数発。

(余談)動かしてみました

GitHubに放り込んだサンプルの動作結果です。git clone後、以下で試せます。

$ docker-compose build    # そこそこの時間がかかります。
$ docker-compose up -d
$ docker-compose exec tesseractpython python /opt/sample/sample.py
  # ↑これがサンプルのPythonスクリプトの実行。→解説1
$ docker-compose exec tesseractpython tesseract /opt/sample/textsample1.png stdout -l eng+jpn
  # ↑tesseractのコマンドもインストールしてあるので直接叩くこともできます。→解説2
$ docker-compose stop    # 遊び終わったらコンテナ停止

注意点として、一番上のフォルダを、コンテナ内の/optにマウントしてあるので、Pythonのコードやdocker-compose execでコマンド叩くときにはそれを踏まえてください(docker-compose.ymlのvolumesで指定した通りです)。

解説1

sampleフォルダ内のsample.pyの結果です。samle1.png〜sample4.pngを読み取ります。PythonのPILで1マスごとに(雑に)切り取って、tesseractの1文字モードで識別してみました。

読み取った画像と結果の一部をご紹介します。

sample1.png

数字のみ
sample1.png

↓読み取り結果。まさかのパーフェクト。

1
2
3
4
5
6
7
8
9

sample3.png

難しい漢字はどうでしょう? くずりゅうせ...

sample3.png

↓読み取り結果。こちらも期待以上の精度。なぜか参が9になりました。

捌
壱
弐
漆
玖
9
陸
伍
肆

解説2

文章画像の読み取りです。textsample1.pngとtextsample2.png。tesseractコマンドを直接叩くやり方で試してみました。オプションは言語指定、-l eng+jpnのみです。

textsample1.png

英文。MITライセンスの一部です。


textsample1.png


↓読み取り結果。文字として見るなら2割くらい...?英語だけとわかっているなら、言語はengだけのほうがまだマシな印象です。

MIT LItehse
C叩y‥g=t 川 2m …叩皿

陶叩m伽 】… hereby granted, free 〝T (Marge, m 洲 四巖伽 〝吐…"Mg z mW
ef thIs software 剛 mm…“ 血m爬"鮨UM 川es ぱ爬 Software"), to deal
m the Suftware mthnut rEstr】〔tm", md皿…g …伽吐 h爪n鹸m” the ug…
m use, mpy, m。d‥y, merge, nuhllsn, ulstnbute, sumtehse, and/Dr sell
mm“ 〝f the Software, and m 州耐 胸m肪 m w加爪 the Software LS



mrmshea m 伽 馴 皿m… m the faUumng m皿…M~:

鵬 above 〔叩y‥g吐 皿…E 伽 ms 州…m伽 皿…e 伽〝 膿 …‥皿皿 m 〕‥
mm“ gr mmm… 加川… “T the Suftware.

THE 50mm IS mvan "AS ーS", WーTH。UT WA剛W DF 鮒) KーND, EXPRESS 吹
IMPLIED, ーNCLU囁ーNG Bur NOT LIMITED m THE WARRANTIES NF NER〔H鮒T^飄ーLーTV,
FーmESS FOR A PARTIEULAR PURP囁SE MD N叩ーNFRーN5EME爪・ ーN N“ EVENT SHALL THE
剛T叩RS 吹 ⑳門肛酬T HOLDERS BE LIABLE FOR 畑〉 CLAIM, DAMAGES 吹 OTHER
LーABーLーTV' WHETHER ーN 鮒 A〔Tー叩 DF ⑳爪叫吼 mar DR DTHERWISE, ARISING mm,
伽T NF 脈 ーN camEmuN mm THE SOFTWARE 脈 THE USE 吹 OTHER DEALINGS IN THE
50mm.

textsample2.png

日本語は読み取れるでしょうか?サンプルはこの記事の抜粋。最終稿前のキャプチャなので少し違う文章なのはご愛嬌。


textsample2.png


↓読み取り結果。先程よりちょっといいかも?読めなくもな…いや読めないですね。


スキヤ〉した画像か デ一タを油出してデ一タべ一ス〔〔…と髏`う扁要{暮そこそこ
ぁると思います〝 そんなとき【こ鉄板と噂なのが【eSSe陶C【。 ただ、 このツ一ル、 ど
うも。Sにょ つてイ)ス 卜一ルがいろいろ大変な槙様。 ならだいたいの人がイ〉

ス 卜一ルしてるでぁろう (誇張) 、 d0Cke「CG‥【竈…eバ〔してしまえ璽 というのが
ことの始まりです”

ついでに画像処理に強そ うなpyーh。nも含めたのがポイ ン 卜〝 ぁ と はPW加n署〈
'け です” 晋段ヽ PWh叩使わないんで知 らなかったんですが~ PL すご < 便利
ですね~



20ーg/ー0/ーー現在でヽ lesserac‘ 3.04.01ifig7mt ま す〝

所感

文章を読み取ろうと思うとそのままでは大変そうな印象です。もし使うなら、解説1のように切り出したり、画像を拡大したりシャープネスにしたり、オプションを調整したり等、工夫がいるという結果でした。tesseract本体もver4が開発中とのことで将来はより精度が上がるかもなー、と期待しております。

追記(2019/09/30)

@rapidliner00 さんからコメントをいただいた(ありがとうございます!)ので試したら、ものすごく精度が上がっておりました。詳しくは@rapidliner00 さんからコメントをご覧ください。

tesseract-ocr、現在はデフォルトだと4.0.0-2がインストールされるようですね。tesseract本体のバージョンも4.1までリリースされているようなので、今後ますます成長しそうな予感がします。

せっかくなのでDockerHubのイメージも更新しました。

10
8
2

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
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?