ラズベリーパイで顔認識(改-1)


約6年ほど前のラズベリーパイで顔認識の改訂版です。これは2017年にAdam Geitgey氏 によって最初に公開されたface_recognitionを使ったものでプラットフォームもラズパイ3Bというやや(というか、かなり)非力なものでした。
またデータセットも欧米人の男性が多く、女性や子供、日本人などの顔の認識精度はやや低いものでした。
2024年に日本人による日本人の顔データを含んだデータが公開され認識精度も改善され、同時期にラズパイ5が発表されたことで速度も実用に達しています。

スイッチサイエンスではカメラとMicroSDカード込みのセット版(ラズパイ本体は除く)がリーズナブルな価格で販売されています。
とにかくやってみたい方はご購入を。

ここではラズパイとカメラ(V1.3)は持っておるぞ、面倒もいとわないという方向けに前回の顔認識(識別)システムの改訂版として一からやってみます。

H/Wは以下のものを使用しました。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OSはTrixie(64-bit)  Desktopです。

OSインストール済みでカメラも装着済みとしておきます。


詳細は上記の顔識別システム_取扱説明書にほぼ書いている通りですが、若干変更する部分もあります。

ラズパイ5B(16GB)とラズパイ4B  (2GB) では動作速度は全然違います。4Bはカクカクしていますが5Bは全くスムーズです。

以下順を追っていきます。

まず、顔識別のためのリポジトリをクローンして一括ダウンロードしておきます。

faceには以下のものが入っています。

headshots_OnePerson.py     一人分顔写真を撮り、datasetに保存
headshots_MultiplePeople.py    複数人顔写真を撮り、datasetに保存
train_model.py         datasetの写真をトレーニングしてモデルを作る
facial_recognition.py        カメラ で写真を撮り顔識別をおこないます
config.py            各種設定を保存しています
dataset(ディレクトリ)                      顔データを保存するフォルダ
face_dat(ディレクトリ)                   処理に必要なファイルを保存するフォルダ
face_cut.py                                          顔写真を切り出し、データを確認します
kill_video_processes.sh                  何かの理由でカメラが使用できなくなった時に解放する

 

次に仮想環境を作成して入ります。

上記クローンしておいたfaceディレクトリに入って、ライブラリインストールの準備をしておきます。

キャッシュパージをしていますが、何もないのでそういうメッセージがでます。

ライブラリのインストールと環境構築

説明書では、libatlas-base-devがインストールされようとしますがはリポジトリに存在しません。libopenblas-devがあるので問題ないようですのでここでは省いています(Bookworm以前では必要なようです)。

一つ顔を登録して必要なファイルを作成しておきます。

これをサボるとfacial_recognition.pyを実行できませんでした。

カメラアプリが起動します。

名前を英数で入力。

誰かの顔(ご自分のでOK)をカメラのフレームに入れてスペースキーを押します。特徴点を収集する必要から正面を向いた顔を使います。多少の斜め横からの角度の写真はOKのようですが、真横やあおりの角度でも有効なのかは分かりません。

 

終了はescキー。

で、学習済みモデルをdlibの公式サイトから入手してface_datに展開しておきます。

元のディレクトリに戻ります。

以下を実行して顔データを処理します。

顔を判別できるか以下を実行してチェック。
実行すると顔の部分を切り出して、resultというディレクトリに保存します。

顔を判別できたものは、Savedとなりますが、
顔が判別できなかった写真は
「顔が見つかりません」とメッセージが出ます。
削除する場合は対象データのディレクトリごと削除して、撮影をやり直してください。

 

認識精度はtolerance_parameterの値に依存します。0.0 <tolerance_parameter<1.0
デフォルトは0.6で、下げると誤認識が減りますが、認識されにくくなり、上げると認識されやすくなりますが、誤認識が増えます…..とのことです。この値はconfig.pyの中に記述されています。

 

では顔認識(識別)のアプリを起動します。

顔が検出されたら緑の矩形で囲まれ、認識(識別)名が表示されますが、知らない人の場合はunknownと表示されます。

プログラムを終了する際は、カメラウィンドウを選択している状態で、escキーを押してください。

なんらかの理由でカメラがフリーズする場合があります。その際プログラムを終了した上で、
sh kill_video_processes.sh
として、カメラを掴んでいるプロセスを止めてください。
もしくは、ラズパイを再起動してください。

仮想環境を抜けて終了する場合は

 

これらの操作はOSがTrixieであれば共通です。

 

また、よく似た顔の場合誤認識が発生しますが、曖昧な場合は緑の矩形とunknownの赤い矩形が交互に表示されます。

 

 

●一連の操作のおさらい

OSが起動したらターミナルを起動して仮想環境に入る

source V_face/bin/activate

で、faceディレクトリに移動してアプリ起動

 

cd face
pip cache purge
python3 facial_recognition.py

 

escキーでカメラを終了

仮想環境を抜ける

deactivate

 


Appendix

ラズパイ4B + Bookworm (32-bit) Desktopを使う場合

顔識別システム_取扱説明書にほぼ書いている通りです。

全構築には50分くらいかかっています。

一応動きます…….というレベルです。

 

git clone https://github.com/momorara/face

仮想環境を作る
python -m venv V_face –system-site-packages
仮想環境に入る
source V_face/bin/activate

faceディレクトリに入る
cd face

pip cache purge
pip install –upgrade pip
sudo apt update
sudo apt install -y cmake libopenblas-dev liblapack-dev libjpeg-dev libatlas-base-dev
sudo apt install -y libgtk2.0-dev libgtk-3-dev
pip install -r requirements.txt –no-input
date

cd face_dat
wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
bunzip2 shape_predictor_68_face_landmarks.dat.bz2

元のディレクトリに戻る
cd ..

モデル作成
python3 train_model.py

顔を判別できるか以下を実行してチェック。
実行すると顔の部分を切り出して、resultというディレクトリに保存します。

python3 face_cut.py

顔を判別できたものは、Savedとなりますが、
顔が判別できなかった写真は
「顔が見つかりません」とメッセージが出ます。
命名したディレクトリごと削除して、撮影をやり直してください。

顔認識アプリ起動
python3 facial_recognition.py

プログラムを終了する際は、カメラウィンドウを選択している状態で、escキーを押す

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*