LoginSignup
26
33

More than 5 years have passed since last update.

Keras + OpenCV で画像認識

Posted at

Abstract

Keras と OpenCV を使って、画像を分類するプログラムを試作しました。バックギャモンのプレシジョンダイスの出目を判定することができます。精度もまあまあのものが出来ました。

Related work

去年も同じものを作りました。その時は、Caffe + OpenCV でした。

そこそこ動いたのですが、Caffeが難しかったのと、C++でちまちま書くのが面倒になり、すぐに飽きてしまいました。
しかし、この時作った学習用データは今回も同じものを使いました。ある意味、学習用データを作る作業が一番大変なので、今回は去年の自分の肩の上に乗った仕事です。

モデルを学習させる

CIFAR10のサンプルのモデルを使いました。
画像ファイルから、トレーニングと検証用のデータを読み込ませるには、ここにあるように ImageDataGenerator.flow_from_directory() を使うと楽チンです。

OpenCVの画像で predictする

出来上がったモデルを使って、画像を分類してみます。JPEGファイルを読み込んで分類するなら、先ほどのblogにあるコードが使えます。

img = load_img('data/train/cats/cat.0.jpg')  # this is a PIL image
x = img_to_array(img)  # this is a Numpy array with shape (3, 150, 150)
x = x.reshape((1,) + x.shape)  # this is a Numpy array with shape (1, 3, 150, 150)
x /= 255

この x を引数にして model.predict() を呼べばいいです。

しかし、OpenCV形式のデータを使うにはひと手間必要でした。
OpenCVの画像データは、すでに numpy の arrayでしたが、色の順番が BGR になっているので RGB へ変換が必要です。さらに、arrayの形を合わせるためにごにょごにょします。

x = cv2.cvtColor(img, cv2.COLOR_BGR2RGB).astype(np.float32)
x = x.transpose((2, 0, 1))
x = x.reshape((1,) + x.shape)
x /= 255

Conclusions

Caffeに挫折した私ですが、Kerasならなんとかなりそうです。冒頭にあるYouTube動画のプログラムは 100行そこそこです。Python覚えてマジでよかったです。

Future work

バックギャモンのチェッカー認識にもチャレンジしようと思っています。

Acknowlegements

以下のページを参考にさせていただきました。

26
33
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
33