顔認識はますます人気が高まっており、私たちのほとんどはすでにそれを認識せずに使用しています。単純なFacebookタグの提案、Snapchatフィルター、高度な空港セキュリティ監視など、顔認識はすでにその魔法を使っています。中国は、生徒の出席と行動を監視するために学校で顔認識を使用し始めました。小売店は、顔認識を使用して顧客を分類し、詐欺の履歴を持つ人々を隔離し始めています。さらに多くの変更が進行中であり、このテクノロジーが近い将来どこでも見られることは間違いありません。
このチュートリアルでは、RaspberryPiのOpenCVライブラリを使用して独自の顔認識システムを構築する方法を学習します。このシステムをポータブルRaspberryPiにインストールする利点は、どこにでもインストールして監視システムとして機能できることです。すべての顔認識システムと同様に、チュートリアルには2つのPythonスクリプトが含まれます。1つは特定の人物の写真のセットを分析してデータセット(YMLファイル)を作成するトレーナープログラムです。 2番目のプログラムはRecognizerプログラムです顔を検出し、このYMLファイルを使用して顔を認識し、人物名を指定します。ここで説明する両方のプログラムは、Raspberry Pi(Linux)用ですが、ごくわずかな変更を加えたWindowsコンピューターでも動作します。OpenCVを使い始めるための初心者向けの一連のチュートリアルがすでにあります。ここで、すべてのOpenCVチュートリアルを確認できます。
前提条件
前に述べたように、OpenCVライブラリを使用して顔を検出および認識します。したがって、このチュートリアルに進む前に、必ずPiにOpenCVライブラリをインストールしてください。また、2AアダプターでPiに電力を供給し、SSH経由でビデオ出力を取得できないため、HDMIケーブルを介してディスプレイモニターに接続します。
また、OpenCVがどのように機能するかについても説明しません。画像処理の学習に興味がある場合は、このOpenCVの基本と高度な画像処理チュートリアルを確認してください。この画像セグメンテーションチュートリアルでは、輪郭、ブロブ検出などについても学ぶことができます。
顔認識がOpenCVでどのように機能するか
始める前に、顔検出と顔認識は2つの異なるものであることを理解することが重要です。で顔検出人物の顔だけが検出されたソフトウェアは、その人が何のアイデアを持っていません。では顔認識ソフトウェアは、顔を検出しますだけでなく、人を認識します。ここで、顔認識を実行する前に顔検出を実行する必要があることは明らかです。 OpenCVが顔やその他のオブジェクトをどのように正確に検出するかを説明することはできません。したがって、このオブジェクト検出チュートリアルに従うことができることを知りたい場合は。
ウェブカメラからのビデオフィードは、次々に更新される静止画像の長いシーケンスにすぎません。そして、これらの画像のそれぞれは、それぞれの位置にまとめられた異なる値のピクセルの単なるコレクションです。では、プログラムはどのようにしてこれらのピクセルから顔を検出し、その中の人物をさらに認識することができるのでしょうか。その背後には多くのアルゴリズムがあり、それらを説明しようとすることはこの記事の範囲を超えていますが、OpenCVライブラリを使用しているため、概念を深く理解することなく顔認識を実行するのは非常に簡単です
OpenCVのカスケード分類子を使用した顔検出
顔を検出できた場合にのみ、顔を認識したり覚えたりすることができます。顔などのオブジェクトを検出するために、OpenCVは分類子と呼ばれるものを使用します。これらの分類子は、事前にトレーニングされたデータセット(XMLファイル)であり、この場合は顔の特定のオブジェクトを検出するために使用できます。顔検出分類子の詳細については、こちらをご覧ください。顔の検出とは別に、分類子は鼻、目、車両のナンバープレート、笑顔などの他のオブジェクトを検出できます。ケース分類子のリストは、以下のZIPファイルからダウンロードできます。
Pythonでのオブジェクト検出のための分類子
あるいは、OpenCVでは、カスケード分類子をトレーニングすることで、画像内の他のオブジェクトを検出するために使用できる独自の分類子を作成することもできます。このチュートリアルでは、「haarcascade_frontalface_default.xml」という分類子を使用して、正面の位置から顔を検出します。様子を見よう