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
kerasのapplicationには、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で一回簡単に試してみるのも良いと思います。
この記事が気に入ったらサポートをしてみませんか?