ラズパイカメラとOpenCvを使って女優の顔認識してみた

RaspberryPi
スポンサーリンク

ラズパイで個人の顔を認識できたら、いろいろなことに使えそうじゃないですか?

OpenCvとラズパイ3B+を使って、押しの女優さんの顔を認識したいと思います。

著作権や肖像権の関係で画像は載せられませんが、あしからず…

Real-Time Face Recognition: An End-to-End Projectというサイトを参考に実装しました。

コードをコピペするだけで実装できるよう、概要はざっくり解説しています。

使用する機器

ラズパイ3B+

ラズパイカメラ

全体の流れ

参考サイトからの引用

大きく3つのステップで実装していきます。

  1. 顔認識の元となる画像データを集める(人にはそれぞれidをつける)
  2. 顔認識をするための識別機を作成
  3. 実際に顔認識を行う(ここでidを名前と紐づける)

準備すること

ライブラリのインストール

以下のライブラリをインストールします

ラズパイにはpython2系と3系が入っていますので,pip3コマンドを使用しましょう!

私の使用したバージョンは以下の通りです。

OpenCVのインストールがうまくいかない方はラズパイ OpenCVインストール方法 (カスケード分類器のダウンロードもします)を参考にしてみてください!

カスケード分類器のダウンロード

ラズパイ OpenCVインストール方法 (カスケード分類器のダウンロードもします)

にカスケード分類器ダウンロードの手順が詳しく書いてありますので参考にしてください。

今回は「haarcascades」フォルダの中の「haarcascade_frontalface_default.xml 」というファイルのみ使用しますので、これを「FacialRecognition」ディレクトリにコピペします。

詳しくは後述します。

カメラの接続確認

カメラをラズパイ3B+に接続したら、

ホーム画面設定RaspberryPiの設定

の順に進むと以下の画面が表示されます。カメラを有効にして、再起動しましょう

ターミナルで以下のコマンドを入力し、supported=1 detected=1と表示されればOKです。

ディレクトリ構造

「FacialRecognition」、「datasets」、「trainer」

の三つのディレクトリをまずは作成しましょう。下記の順番でターミナルに入力したら作成できます。

そして、先ほどダウンロードした「haarcascade_frontalface_default.xml」を親ディレクトリの「FacialRecognition」に入れておきましょう!

以上で前準備は終了です。あとはソースコードをマネするだけで実装できます。

ソースコード

各ソースコードの番号(01,02,03)は先ほどの手順(ステップ)に対応しています

コピペを前提としているので詳しい解説はしません

01_face_dataset.py

画像を集めるステップです。

プログラムを動作させると、idの入力が求められます。その後、カメラで30枚の写真を撮影します。

このようなファイル名で30枚の画像が、「datasetsディレクトリ」に保存されます。

保存されている画像は白黒で顔の部分が切り取られている状態になっています。

写真を30枚よりも増やしたい場合は、30の部分の数字を変えてください。

cv2.cvtColorに関するエラーが出た時の対策

FacialRecognitionディレクトリで上記のコマンドを入力してみてください。

02_face_dataset.py

顔認識をするための分類器を訓練するステップです。

ここはとてもシンプルで、上記のプログラムを実行するだけで「trainer.yml」ファイルが出来上がります。やることは以上です。

attribute error “face”というエラーが出た時の対策

色々試したのですが、最終的に以下のコマンドでエラーがなくなりました

ホームディレクトリで上記のコマンドを入力してみてください。

私が試した一覧も載せておきます

03_face_dataset.py

最後に、顔認識をするステップです。ここではこのコードにのみ注目してください。

このリストがidの番号と対応しています。

上の例でいうと、id=0→None、 id=1→Nameということになります。

もし人数を増やしたければidを増やして写真を撮り、このリストに名前を追加してください。

結果

左から、元画像、別画像、他人の画像という並びです。

  • 元の画像:64%
  • 別の画像:6~20%(写真によりunknownのものも)
  • 他の人の画像:unkown

このような結果になりました。(肖像権の関係もあるのでイメージ図で対応してます)

30枚しか使用していないのでこんなものかなと思います。画像を増やせば精度も上がりそうですね!

応用すれば簡単な防犯システムにも使えそうです!ラズパイでディープラーニングを行うのは少し厳しいので(できなくもないですが)とても便利でありがたい機能です。

おわりに

いかがでしたでしょうか?OpenCvを使うだけで結構簡単に顔認識ができるんです。

わたしはネットの画像を写真でとるという面倒くさいことをしましたが、皆さんは自分自身の顔などで挑戦してみるといいかもしれません。

コードをコピーするだけでできますので、是非やってみてください!

コメント

タイトルとURLをコピーしました