📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

ラズベリーパイ4で顔認識から人を識別するところまでやってみました!PythonとOpenCVでお手軽に実行可能です。

ITエンジニアもりしーの動画7:46

Transcription

どうもみなさんこんにちは。多いでしょうか。今日は Raspberry Pi 4 と OpenCV を使って顔の認識、そして人の識別というのをしていきたいとおもいます。

まず概要としては、Raspberry Pi 用のカメラで顔の撮影をして、その顔の写真をもとに、この顔が誰であるという学習をさせます。そして、その学習データを基に、このカメラで撮影している人を判断して、誰か写っているという判断をしていきたいと思います。

それでは、どの程度顔を認識できたかを見ていきます。

それでは、まずプログラムを起動して、このような形のダイヤルが表示されているんですけど、この画面。講座と誘惑広いわけですね。表示されていて、顔を若干横に向けたりすると、この顔判定ができなくなってしまうんですけど、このぐらいの代替照明の角度であれば、ほぼ間違いなく判定されているという状況になります。そして、Raspberry Pi 4 では、だいたい1秒間に5フレームぐらいが最大かなという感じがしています。

次はカメラからある程度離れた距離での確認をしてみたんですけど、カメラからだいたい3.5メートルから4メートルぐらい離れたこの状態でも、それほど問題なく認識をしてくれました。さらにサングラスをかけた状態も試してみました。サングラスをかけていない状態の学習データしか私じゃないんですけど、この通り、サングラスをかけた状態でもある程度識別してくれるようです。

今回使うのはこちらのカメラのみです。Amazon とかで1000円しないぐらいで売ってると思うので、もし興味のある方は一応説明欄にリンクを載せておきましたので、チェックしてみてください。

それでは、このカメラを Raspberry Pi のこちらに接続をしていきます。接続にはこのフラットのリボンケーブルを利用します。Raspberry Pi の GPIO を上にした場合、銀色というか端子が見えている方が左になるように差し込みます。そして、しっかり差し込んだら、この端にある黒いプラスチックのパーツを押し込むと完了です。ちなみに、このケーブル自体が引っ張ってもなかなか抜けないぐらい、持ち上がるぐらいしっかり支えるようになっています。あとはカメラの方にこのようにケーブルを差し込んで、またこの黒い部分をまた押し込んで完了です。

それでは、今接続したカメラを有効化していく作業をしていきます。まずは Raspberry Pi メニューから設定、そしてこちらに Raspberry Pi の設定というのがある。これをクリック。千葉楽するとウィンドウがなっちゃうんですけど、このインターフェースというところで、カメラ。これを有効にチェックをつけて OK ボタンを押します。で、押すとこの再起動しますかというのを聞いてくるので、はい。そして再起動完了すると、もうカメラが使えるようになっているはずです。

次は Raspberry Pi にソフトウェアを用意していきたいとおもいます。今回使うプログラミング言語は Python、そして OpenCV というソフトウェアを利用して顔認識を行っていきます。Python 自体は Raspberry Pi にもともとインストールされているので、特に何もする必要はないんですが、OpenCV の方はインストールされていないので、これをインストールする方法をやっていきます。

では、インストールのスクリプトを利用するので、ターミナルを開いてダウンロードをしていきます。で、ダウンロードという風に言ったんですけど、これは GitHub に置いてあるプロジェクトなので、Git clone というコマンドでダウンロードをしていきます。表示されている通りにコマンドを入力して Enter を押すと、いつかファイルがダウンロードされるので、その内の1つのファイルを実行していきます。

まずは ls コマンドでフォルダはできているかを確認します。確認すると install_opencv というフォルダができているので、cd コマンドでこのフォルダに移動します。フォルダの中には3つファイルがあるんですけど、今回実行するのはこの install_opencv.sh というファイルになります。では、このプログラムを実行していきます。実行方法は ./install_opencv.sh と入力して Enter。

これによりインストールが開始されました。まずは Raspberry Pi の OS のアップデートとか、いろいろ走るんですけど、だいたい1時間ぐらい時間がかかってしまうんじゃないかなというふうに思います。そして1時間後にインストールが終わると、だいたいこのようなログが表示されているというふうに思います。

ということを、インストールが終わったので、一旦ターミナルは閉じてしまう。次は新しくプロジェクトはダウンロードされているので、それを確認していきます。

それでは、ホームディレクトリ配下に先ほどのスクリプトで facial_recognition というフォルダ、プロジェクトダウンロードされていると思います。

それでは、顔の写真を用意していきます。headshots.py というプログラムを実行していきます。で、このプログラムは何をやっているかというと、単純に写真をとって、この dataset というフォルダの下に写真データを格納するだけのプログラムになっています。

では、この headshots.py プログラムを起動します。ダブルクリックして、このような感じで開発環境は開いてくるので、この再生ボタンを押します。で、画面の下の方に名前を入れてねと出てくるので、これのないで自分の名前はこうだと、いうふうに入力して Enter。起動すると、こんな感じで画面に自分の顔が表示されます。で、スペースキーを押すと写真が撮影されるので、こんな感じですね。で、ちょっとずつ角度を変えて、左向きと右向き、そして上、下ぐらいを撮っておけば、大体いいかなと思います。撮影が終わったら Escape キーを押します。

dataset というフォルダの下に名前のフォルダができていると思います。最終的には自分はこのような感じで、笑顔の写真とかを混ぜたりして撮影をしました。もし撮り直ししたいという場合は、この dataset フォルダの下の名前のフォルダごと削除をしてください。プログラムはこのように書いているので、もしフォルダがあった場合はエラーという風に処理しています。

それでは、この撮影したデータを基に、この顔だったらこのユーザーですよというデータを作っていきたいと思います。それをするのが、この train_model.py というプログラムです。で、ダブルクリックして、そしてこの再生ボタンを押します。発足の train_model.py は実行されてますよというのが出て、1分、2分ぐらいで終了すると思います。

ということで、学習が終わりましたね。それほどトレーニングにもただスクリプトを実行するだけで簡単に実行できるので、結構誰でも出来ちゃうんじゃないのかなというふうに思います。で、学習の結果、この embeddings.pickle というファイルができあがって、これが顔の写真データ、本当に顔の特徴を数値化したデータになります。

では次は、出来上がったデータを基に顔の判定をしていきます。facial_rec.py というプログラムをダブルクリックで開いて、また再生ボタンを押して起動します。そうすると、だいたいこのような形で顔認識が開始されて、もし顔が判断できたものも人まで判断できないときは unknown というラベルが頭の上に表示されています。そして、このプログラムを終了するには、キーボードの小文字の q ですね。数字ではない方の q を押すと終了することができます。

そして終了した後、このコンソールに起動していた時間とフレームレートが表示されます。このような感じで10点の花初という値が表示されているんですけど、これは100行下の平均で顔がカメラに映り込んでいる場合は3から5 fps ぐらいしか自分の場合は出ませんでした。

そしてもう一つサンプルとして、特定のユーザーだけ認識した時に LED が数秒間オンになるというプログラムをサンプルとして置いておきましょう。もし何かの参考になれば幸いです。

と、まぁこのようにかなり簡単にできてしまうので、初めて行った時は本当に拍子抜けというか、これだけでできちゃうんだなっていうので、逆にびっくりしました。ドアの前に付けておくことができるのであれば、この人の管理とか、ある程度セキュリティが必要な場所で通知を出したりとか、そういったことができるようになります。

それでは次回はこのカメラを使っての顔認識、人を、その特定のユーザーしか開けられないドアというのを作ってみたいなというふうに思います。ということで、それではまた今度。本当はセットアップスクリプトではなくて、Docker とかでイメージをつくっちゃった方がいいかなというふうに思ったんですけど、Raspberry Pi でやるのにね、なんか Docker はちょっと何か違うかなと。自分ほとんど改変せず、もともとやっている方のソースコードをただコピーして、基にはもともとこういったコードが書かれていて、顔の Python のコード量を見ていただければ分かるんですけど、非常に少ないコードで完成されています。なかなかすごいなというふうに思います。

ということで、それではまた今度。