作ったもの
https://hub.docker.com/r/kaakaa/opencv-contrib-python3/
OpenCV で文字列認識
画像処理ライブラリの OpenCV で文字列認識をする場合、OpenCV ContoribItseez/opencv_contribの text モジュールを通じてtesseract-ocrを利用するのが定番のようです。 opencv で文字認識その1 Tesseract ラッパ - whoopsidaisies’s diary
OpenCV の機能で画像中の文字列の存在する位置を特定し、その特定したそれぞれの位置に対して Tesseract-ocr の文字列認識を実行する模様。
日本語を認識する場合、Tesseract で用意されている日本語トレーニングデータが使えそうです(まだ使ったことは無い)。 tesseract-ocr の言語データ(jpn.traineddata)について(その 1) - 古都の IT 職人 Blog
日本語文字列認識なら NHocr というのもあるらしい。 日本語 OCR ライブラリ NHocr を利用してみる - Qiita
OpenCV Contrib 付き Docker イメージ
OpenCV 自体は公式でプリビルドバイナリが配布されていたりするので、環境構築自体はすぐにできる。
ただ、Contrib のモジュールを使用する場合、公式ではバイナリが配布されておらず、さらに文字列認識を利用する場合は Tesseract をインストールする必要があったりするので、自分でソースからビルドする必要がありそう。
そこら辺の手順が面倒なので、OpenCV + OpenCV Contrib + Tesseract + Python3 環境付きの Docker イメージを作りました。
https://hub.docker.com/r/kaakaa/opencv-contrib-python3/ kaakaa/docker-opencv-contrib-python3: Dockerfile for OpenCV, OpenCV contrib and Python 3.5
元々、こちらの Docker イメージaustriker/docker-opencv-contrib-python3を使おうとしましたが、Tesseract が入ってなかったので、そのあたりを修正しました。
試しに実行
docker-opencv-contrib-python3/compose-sample at master · kaakaa/docker-opencv-contrib-python3の方に、文字列認識用の Web アプリが立ち上がる docker-compose を用意しました。 (Web アプリとしても文字列認識としても、まだまだ使い物レベルにはならないですが)
実際に実行してみた結果が下記画面。
下の画像のピンクで囲まれた部分が、OpenCV によって特定された文字列位置なのですが、画像全体として認識されてしまっているよう。 一行一行認識してほしいのですが。
そこらへんはいろいろチューニングしていく必要がありそうです。