[Python]カスケード分類器で動画上から特定の画像を検出する[OpenCV]①
特定の人物だけを検出したいという要望は意外に多い
以前、知り合いの社長から「監視カメラで、特定の人物や動きをしている人を検知できたらな~」といった話を聞いたことがあります。
特に何かビジネスに発展するような話題ではなかったのですが、カメラの前に特定の人物が現れたら、その人物を検出するような仕組みも面白いと思ったので考えてみました。
模索
こういった方法は通常、ディープラーニングを活用するという選択肢が一般的かと思います。
しかしもっと気軽に、計算コストをかけずにやる方法があればそれに越したことはない。特に特定の人物だけに反応するようなシステムですと、あまりデータも用意できないということもあります。まずは少ないデータでもできる方法を考えてみることも解決策の一つだと思います。
OpenCVのカスケード分類器ではどうか?
そこで思いついたのが、OpenCVを活用した分類器を用いれば簡単にできるのではないかということ。少ないデータでも画像を大きく水増しすることである程度の実用性も担保できる、かつ精度をそこまで求めないとしたらベストチョイスだと思います。
なお、カスケード分類器と深層学習との違いなどは下記のサイトに詳しい記載がありました。
環境
カスケード分類器の作成には下記のファイルが必要となります。この辺のやり方と必要なファイルは公式サイトから確認できます。OpenCV – 3.4.16と書いているところからダウンロードします(OpenCV4以降には同ファイルが存在しないとのこと…)。
opencv_traincascade.exe
opencv_world346.dll
opencv_createsamples.exe
インストール方法は下記のサイトに詳しく掲載されています。
構築のポイントと流れ
カスケード分類器の作成には、正解画像と不正解画像の二つの種類の画像必要。
不正解画像は正解画像が映っていないものを用意します。
実用的なものを作るのに、正解画像を「7000枚」、不正解画像を「3000枚」程度必要とのこと…。これほど大量の画像を用意するのは難しいので、「createsamples」というプログラムを用いて1枚の画像を1000枚ほどに水増しする(7枚の画像を用意できれば7000枚の画像が用意できますね。)
不正解画像は水増しする必要はないが、リストにまとめます。
作成した正解画像と不正解画像を用いてカスケード分類器を作成します。
作成したカスケード分類器を用いて、webカメラのリアルタイム映像に映った人物を検出します。
ちょっと長くなるので実際の構築は次回以降、順次まとめたいと思います。
この記事が気に入ったらサポートをしてみませんか?