作ったもの
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によって特定された文字列位置なのですが、画像全体として認識されてしまっているよう。
一行一行認識してほしいのですが。
そこらへんはいろいろチューニングしていく必要がありそうです。