見出し画像

10行くらいでOpenCVでキャプチャしてkerasで物体認識してみる

import cv2
from tensorflow.keras.applications.mobilenet_v2 import MobileNetV2, \
                                                       preprocess_input, \
                                                       decode_predictions
app = MobileNetV2()
cap = cv2.VideoCapture(0)
while True:
   ret, original = cap.read()
   im = cv2.cvtColor(original, cv2.COLOR_BGR2RGB)
   im = cv2.resize(im, (224, 224))
   pred = app.predict(preprocess_input(im[None]))
   print(decode_predictions(pred)[0][0])
   cv2.imshow("im", original)
   if cv2.waitKey(30) != -1:
       break

kerasapplicationには、VGG、Resnet、Xceptionなどの基本的なディープラニングの物体認識モデルが入っている。サンプルでは、mobilenet_v2を使っているが、ここをVGGなどに変えると他のモデルも試せる。

app = MobileNetV2()

を呼び出すと学習済みの重みファイルがダウンロードされる。VGGとかはファイルサイズが大きいので注意。

   ret, original = cap.read()
   im = cv2.cvtColor(original, cv2.COLOR_BGR2RGB)
   im = cv2.resize(im, (224, 224))  

あとは、モデルに入力するために画像のカラーモードや大きさなどのを合わせる。BGRをRBGに変換して、mobilenet_v2では224x224がデフォルトのサイズなので大きさ変更。

pred = app.predict(preprocess_input(im[None]))
print(decode_predictions(pred)[0][0])

モデルの入力は4次元のnumpyのarrayなので拡張して、preprocess_inputで前処理して入力すると、物体認識される。最後にdecode_predictionsで結果を変換して表示。

ディープラニングのフレームワークは、いろいろあって難しいのあるけど、勉強するにはkerasのapplicationsで一回簡単に試してみるのも良いと思います。

この記事が気に入ったらサポートをしてみませんか?