この記事ではReal-Time Face Recognition: An End-to-End Project – Hackster.ioを参考に、Raspberry Pi上で動作する顔認識システムを構築してみます。
利用するデバイス
- Raspberry Pi 3 B+
- カメラモジュール v2
利用する技術
- Python3
- OpenCV
ライブラリのインストール
まずは必要になるライブラリをインストールします。
sudo pip3 install opencv-python sudo pip3 install pillow sudo apt-get install libatlas-base-dev sudo apt install libjasper1 -y
OpenCVとともに、取得した画像を扱うPILをインストールします。
テスト
まずはちゃんとカメラで認識できるかテストしてみます。今回はRaspberry PiにHDMIディスプレイを接続して確認しています。 raspi-config
でカメラを有効にした後、下記コマンドを実行します。
sudo modprobe bcm2835-v4l2
そしてこちらのコードをダウンロードして実行します。実行後、カメラモウィンドウが開き、顔が表示されれば問題ありません。
顔を認識する
顔を認識する際には、こちらのスクリプトをダウンロードして実行します。他にも顔と目を認識する、笑い顔を認識する、笑い顔と目を認識するサンプルファイルが用意されています。
実行結果は例えば以下のようになります。
顔だけ認識した場合。
顔と目を認識した場合。
顔画像を作成する
では顔認証のために、最初に顔画像を用意します。まずこちらの設定ファイルをダウンロードします。同じディレクトリにこのスクリプトファイルを置きます。最後に dataset というディレクトリを作成します。
スクリプトを実行すると、顔の画像を30枚保存して処理が終了します。
$ ls dataset/ User.1.1.jpg User.1.13.jpg User.1.17.jpg User.1.20.jpg User.1.24.jpg User.1.28.jpg User.1.4.jpg User.1.8.jpg User.1.10.jpg User.1.14.jpg User.1.18.jpg User.1.21.jpg User.1.25.jpg User.1.29.jpg User.1.5.jpg User.1.9.jpg User.1.11.jpg User.1.15.jpg User.1.19.jpg User.1.22.jpg User.1.26.jpg User.1.3.jpg User.1.6.jpg User.1.12.jpg User.1.16.jpg User.1.2.jpg User.1.23.jpg User.1.27.jpg User.1.30.jpg User.1.7.jpg
顔画像を学習する
集めた顔画像を使って学習を行います。設定はYAMLファイルになります。保存されるファイルのために trainer というディレクトリを作成しておきます。トレーニングはこちらのスクリプトで行います。
もし AttributeError: module 'cv2.cv2' has no attribute 'face'
というエラーが出たら、下記のコマンドを実行してください。
$ sudo pip3 install opencv-contrib-python
また ImportError: libhdf5_serial.so.100: cannot open shared object file: No such file or directory
というエラーの場合は下記のコマンドを実行します。
$ sudo apt install libhdf5-100
試す
学習が正しく行われたのかテストします。こちらのスクリプトをダウンロードし、実行します。
枠線の中に、認識精度が出ています(名前はコードにハードコーディングされているだけです)。30〜60%程度の認識精度です。逆に登録していない顔の場合はマイナスの認識精度になっています。
課題
今回作ったシステムの場合、顔写真でも認識してしまいます。本来の顔認識であれば、写真では反応しないようにすべきでしょう。
まとめ
このシステムはあくまで簡易的なもので、実用的とは言えないでしょう。しかし顔を認識し、それを学習するという基本的な動きは顔認識システムと変わりません。写真や彫刻などを除外する仕組みであったり、学習量を増やすことで認識精度を高めることができれば、ちょっとした入退室管理システムは作れそうですね。
Real-Time Face Recognition: An End-to-End Project – Hackster.io
おわりに
Raspberry Piを使ったエッジAIのIoTシステムを構築に興味のある方はぜひIoTエンジニア養成キットで学習してみたりisaax User Groupe勉強会に参加してみてはいかがでしょうか。
]]>