Python3+OpenCV3でパッケージ認識してみましょう

こんにちは。

喫茶店探しを自動化したい」の記事のサードパーティAPIを使うと、学習させた形が画像全体のどこにあるのか…の大体の位置を取得できます。

ここで、四隅の点をきっちり取れたらできることも拡がりそうだな?って思ったので少し調査と試作を進めてみました。今回は喫茶店のマッチのパッケージを認識してみます。

park

使うマッチはこちらです!

AKAZEアルゴリズムを採用

OpenCVではSIFTやSURFなどの特徴点抽出方法が使えますが、どうやらどちらもライセンス問題(少し面倒くさそう)があるそうです。OpenCV3のAKAZEはそれらの問題を解決したバージョンとのことですので、これを採用したいと思います。

参考までに環境を載せておきます。入れ方使い方は検索すると出てくると思いますので、ここでは割愛します。特にPython実行前に正しくパスを通すように気をつけましょう。

Ubuntu 16.04.3
Python 3.5.2
OpenCV 3.4.0

公式のサンプルを改変したPythonがこちら。

第1引数に先ほどのマッチのパッケージ画像、第2引数にそのマッチが写り込んだ画像を渡して実行すると四隅の点が返ってきていそうな感じがします。

スクリーンショット 2018-03-26 16.12.35

周囲の色だけ抜いてみる

四隅が取れるならばそこに何かを被せたり切り抜いたりいろいろできます。
今回はimageMagickを使って、マッチの周囲の色だけモノクロにしてみます。
コマンドでもできますが、PHPで実行できるように組んだのでソースを載せておきます。エラー処理は適宜行なってくださいませ。

2〜11行目まででPythonの実行結果から四隅の座標を数値として配列に保管します。
14〜17行目では誤認知を避けるためにあまりにも小さい認識結果をエラーとしています。
20〜28行目ではconvertコマンド(imageMagick)を使って画像をマスク化やモノクロ化、合成しています。

user

tmp1

tmp2

tmp3

tmp4

マッチ以外の色が綺麗に抜けました(゜-゜)

●この記事を書いた人