YOLOとTensorflowとOCRでゼッケン番号検索システム

最近はpythonで画像認証や検出システムを作っている志知です。
今しがた利用しているのはYOLOとTensorflow。

Tensorflowとはなんだろう、と言う話もできますが
ここは一つ会社のブログですので『どう使うか』という点で話を広げたいと思います。

YOLOとTensorflow

とはいえまず機能の説明は必要なので少し触れます。
TensorflowとはGoogleが開発しオープンソースで公開している、
機械学習に用いるためのソフトウェアライブラリです(wikipedia調べ)。

つまりこれを使えば誰でも機械学習ができるんだ
という大変親切便利なライブラリです。

YOLOというのは画像認識のアルゴリズムで、物凄く端的にいうと

『これ(画像)』が何かを調べるのがYOLO。
で、本来『これ(画像)』をYOLOに伝えて結果を処理するのは長い文章を書かないといけないのですけど
それをわかりやすく誰でも使えるようにしたのがTensorflowと思ってください。
語弊はありますが。

YOLOとTensorflowでゼッケン番号検出

というわけでYOLOには弊社が必要としているシステムを学習してもらいました。
マラソンランナーのゼッケンを読み取って欲しい。
何故ならフォトラボの要望でそういうのがあるから。

フォトラボ、弊社が運営している写真販売サイト フォトラボです。
良ければアクセスお待ちしております。

宣伝は置いておき契約中のショップ様も販売されるマラソン大会のイベントにて
ゼッケン番号で検索するシステムを導入できないものかと。

そういった要望です。

導入手順を考える

さて、まずは画像検出と写真検索の導線を作らなければなりません。
フォトラボには元々写真検索用のシステムがあります。
これには写真一枚一枚に対し検索単語を設定することで機能します。

ここにゼッケン番号を入力できれば検索に使えます。
ではその入力を自動化するにはどうすればいいか。

そこで画像検出です。
YOLOを使いゼッケンを検索したらそこからテキストを読み取ります。

と聞くと簡単に繋がるかもしれませんが、一つ問題があります。
画像からテキストを読み取るOCR。
現在公開されているライブラリは基本的に画像一枚に対する検出です。
ゼッケンの場所がわかってもそれをOCRに伝える術はないのです。

勿論座標を検出できる処理を組み込めばできますが
現在のライブラリの組み合わせで使うことを考えた場合、さてどうしたものか。

とはいえ答えは単純です。
画像一枚でしかOCRに通せないなら、ゼッケンを画像一枚にしてしまえばいい。

YOLOの画像検出を画像の切り離しに使う

導き出された答えはこれです。
Tensorflowはjson形式の配列で検出、保存ができます。
そのjsonを別のpythonプログラムで読み、OpenCVを使って画像を切り離す。
切り離した画像をOCRに通してテキストを抽出する。
抽出したテキストを元画像に関連させてDBに保存する。

というライブラリを3,4度跨ぐシステムを作っておりました。
フリー素材写真でいうと

画像検出でゼッケン番号検索

元画像を

画像検出でゼッケン番号検索

ゼッケンで切り離し

画像検出でゼッケン番号検索

テキストを得る。
そして保存する。

因みに一部の人しか検出していないのは、
写真販売サイトで使う以上『写真を買いたい人』が検出されなければなりません。
ぼやけているゼッケンのランナーはきっとその人ではありません。
という独自のアルゴリズム(コダワリ)による結果です。
(あとゼッケンが隠れているので検出できません)

とはいえ検出を柔軟に行えれば
顧客の求める抽出方法に近づけていけるのも確かです。

現在開発段階ですが、近くデモページを公開できると思います。
その時はまた弊社HPにてご案内致します。

追記:
画像検出から画像を切り離すシステムの元は、
以前に私が作った顔検出から座標を特定し顔のパーツを切り離すシステムです。
目、鼻、口、頬、眉などなど。
公開はしておりませんがそういうシステムも作れます。

最新ブログ一覧