作ったもの

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アプリとしても文字列認識としても、まだまだ使い物レベルにはならないですが)

実際に実行してみた結果が下記画面。

sample.png

下の画像のピンクで囲まれた部分が、OpenCVによって特定された文字列位置なのですが、画像全体として認識されてしまっているよう。 一行一行認識してほしいのですが。

そこらへんはいろいろチューニングしていく必要がありそうです。

comments powered by Disqus