【OpenCV応用編 第2回】群衆の中から人を見つけ出す!歩行者検出(全身検出)に挑戦しよう 🚶
「顔が隠れていても、そこに『人』がいることを認識させたい!」 「監視カメラの映像から、人の数を数えるにはどうすればいいの?」 「顔検出以外にも、物体を検出する別の方法ってあるの?」 こんにちは! OpenCV探検隊、隊長のPythonistaです! 前回の第1回 では、顔というターゲットをさらに深掘りし、「目」や「笑顔」といった細かいパーツを検出する方法を学びましたね。 シリーズ第2回となる今回は、逆にグッと視野を広げて、人物の**「全身」**を検出する**歩行者検出 (Pedestrian Detection)** に挑戦します! これにより、あなたのプログラムは、カメラからの距離が遠かったり、人物が横を向いていたりして顔が見えなくても、その存在を捉えることができるようになります。この技術は、街中の人流解析や、セキュリティシステム、自動運転技術など、非常に多くの分野で活用されているんですよ。さあ、群衆の中から個人を認識する、新たなステップに進みましょう! 1. 今回の新しい武器:HOG + SVM 前回の顔や目の検出では、「ハールカスケード分類器」という武器を使いました。実は、全身を検出するためのハールカスケード(`haarcascade_fullbody.xml`)も存在するのですが、今回はより一般的に歩行者検出で高い性能を発揮する、別の強力な武器を紹介します。 それが、**HOG (Histogram of Oriented Gradients) 特徴量 + SVM (Support Vector Machine)** という組み合わせです。 HOG特徴量とは? ハールカスケードが画像の「明暗のパターン」を見ていたのに対し、HOGは**「輪郭の向きのパターン」**を見ます。画像の中の明るさが変化する方向(勾配)をたくさん集計し、「人の形は、だいたいこういう向きの輪郭線で構成されているよね」という特徴を捉えます。 例えるなら… ハールカスケードが「目と鼻の位置関係」で見分ける刑事なら、HOGは「全身のシルエット」で見分ける凄腕の探偵のようなものです。 SVMとは? SVMは、HOGによって抽出された「輪郭のパターン」が、果たして「人」のものなのか、それとも「人でない」ものなのか...