某家電メーカーの技術者がスキルアップのために勉強したことを記録するブログですこの広告は、90日以上更新していないブログに表示しています。Learning前回、GITHUBで公開されているFaceNetを動かしてみました。今回はこれを使って登録した人の顔を自動で撮影するおもちゃを作ってみたいと思います。masaeng.hatenablog.comソースコードの修正FaceNetのcompare.pyを修正して、USBカメラで撮影した映像に対して、FaceNetで顔認証を行うスクリプトを作成しました。dist_ave実行時には以下のように引数を指定します。0登録したい顔画像をフォルダに入れて、引数でそのパスを指定します。画像は複数枚入れてもOKです。data/registered/*のようにワイルドカードで複数枚の指定が可能です。その他の引数は元のcompare.pyと同様です。処理内容を図にすると以下のような感じです。登録顔画像と未知の顔の距離を計算し、閾値比較をします。顔画像を4枚以上登録した場合は距離が近い方から3点の距離の平均値を閾値比較に使用しています。fr_thresholdという変数で定義しています。上記ソースコードでは閾値は1.2ですが、カメラの撮影条件によって適切な値に設定してください。ラズパイ上で動作させるこのスクリプトをさらに応用して、登録した顔がカメラに写ったらその画像をJPGで保存するプログラムを作ります。これをラズパイ上で動作させ、撮影したことが分かるように撮影したらLEDを1秒間点灯させるようにしたいと思います。(ラズパイで動かす意味はあまりありませんが・・・)以前勉強した、ラズパイでLEDを点灯させる処理を上記のソースコードに追加します。1回路図は前回同様こちらです。38,40ピンは今回使いません。作成したスクリプト実行させてみるとこのように登録顔を見つけたときにLEDが点灯します。36ピンにつながっています。息子の写真1枚登録し、1~2時間ほどスクリプトを走らせてみた結果、このように写真が撮れています。(リモートからラズパイにアクセスしています。)全部で47枚の写真が撮れており、正しく息子を判別して写真撮影できたのはわずか7枚(正解率約15%)でした。そもそも顔でないものを顔と誤判別していたり、親子である私と息子の識別ができていないなど、性能はまだまだでした。登録顔が1枚だけだったので、いろいろな角度の顔画像を登録すればもう少し性能が上がるのではと思います。まとめGITHUBで公開されているFaceNetの顔認識を使って、登録した人の写真を自動で撮影する機器をラズベリーパイで作ってみました。登録顔が1枚だけだったので、精度が今一つでしたが、FaceNetの概要を理解でき、また、所望の機能をプログラムで実現することができました。今後もディープラーニングを使った機器のアイデアを考えて、実際に作っていけたらと考えています。WORK月別アーカイブはてなブログをはじめよう!masashi_kさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。