Python 動画に写る人を1人だけ検出する方法

PythonのOpenCVを使って動画に写る人を1人だけ検出する方法とプログラムの説明を投稿します

動画の読み込みと表示はこちらの投稿でPython OpenCVを使った動画の読み込みと表示紹介しているので、この投稿では1人だけ検出するプログラムをメインに紹介します。

人を検出するときに使うhaarcascadeファイルのダウンロード方法はこちらOpenCVを使った顔と目の検出方法 Pythonの投稿で紹介しています。

読み込んで表示した動画はPexelsの動画を使わさせてもらいました。

目次

・もと動画

・動画に写る人を1人だけ検出した様子

・動画に写る人を1人だけ検出するプログラム

・補足

・本当に1番大きい高さを選択しているのか確認


もと動画


人を検出するのに使うもと動画になります。

動画に写る人を1人だけ検出した様子

動画に写る人を1人だけ検出するプログラム

Pythonで動画に写る人を検出する方法で投稿した”動画に写る人を検出するプログラム“から変更したところが10行目から18行目だけなので、その部分のプログラムを説明します。

10行目は検出した1人だけの座標x,y,w,hを入れるためのリストdata_1を用意しています。

12行目から15行目は1フレーム(画像)の中から検出した人の数、for文で繰り返しています。

そして、繰り返すなかで検出した人の高さにあたる値(images[i][3])と0を入れて初期化した変数hhif文で比較して、
images[i][3]が大きい場合は変数hhにその大きい値を入れ、1フレーム(画像)の中で高さが1番大きい座標を見つけるまで比較を繰り返します。

17、18行目は高さが1番大きい座標をx、y、w、hに入れて、cv2.rectangleでその座標をもとに赤い四角の枠で囲みます。

補足

x,y,w,hそれぞれの意味について、xとyは検出した人の位置を表す座標になります。xは横軸yは縦軸の意味です。そして、wとhは検出した人の大きさを表します。wは幅hは高さの意味です。

images[i][0]=x 横軸
images[i][1]=y 縦軸
images[i][2]=w 幅
images[i][3]=h 高さ

本当に1番大きい高さを選択しているのか確認

8行目にprint(“全体”,images)を追加し、19行目にprint(“一番高い”,data_1)を追加して、変数data_1に高さが1番大きい座標が入っているのか確認します。
その様子がこちら↓になります。

実行結果を見てわかるように、images[i][3]の高さが1番大きい座標をdata_1に入れています。

1人だけの検出以外に動画に写る人の中から3人を検出する方法をこちら↓の投稿で紹介しています。
Python 動画に写る人の中から3人を検出する方法