約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は全くスムーズです。
以下順を追っていきます。
まず、顔識別のためのリポジトリをクローンして一括ダウンロードしておきます。
|
1 |
git clone https://github.com/momorara/face |
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 何かの理由でカメラが使用できなくなった時に解放する
次に仮想環境を作成して入ります。
|
1 2 3 |
python -m venv V_face --system-site-packages source V_face/bin/activate |
上記クローンしておいたfaceディレクトリに入って、ライブラリインストールの準備をしておきます。
キャッシュパージをしていますが、何もないのでそういうメッセージがでます。
|
1 2 3 4 5 6 7 |
cd face pip cache purge pip install --upgrade pip sudo apt update |
ライブラリのインストールと環境構築
説明書では、libatlas-base-devがインストールされようとしますがはリポジトリに存在しません。libopenblas-devがあるので問題ないようですのでここでは省いています(Bookworm以前では必要なようです)。
|
1 2 3 4 5 6 7 8 9 10 11 |
sudo apt install -y cmake libopenblas-dev liblapack-dev libjpeg-dev sudo apt install -y libgtk2.0-dev libgtk-3-dev pip install matplotlib==3.8 pip install pandas-stubs pip install -r requirements.txt --no-input date |
一つ顔を登録して必要なファイルを作成しておきます。
これをサボるとfacial_recognition.pyを実行できませんでした。
|
1 |
python3 headshots_OnePerson.py |
カメラアプリが起動します。
名前を英数で入力。
誰かの顔(ご自分のでOK)をカメラのフレームに入れてスペースキーを押します。特徴点を収集する必要から正面を向いた顔を使います。多少の斜め横からの角度の写真はOKのようですが、真横やあおりの角度でも有効なのかは分かりません。
終了はescキー。
で、学習済みモデルをdlibの公式サイトから入手してface_datに展開しておきます。
|
1 2 3 4 5 |
cd face_dat wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 bunzip2 shape_predictor_68_face_landmarks.dat.bz2 |
元のディレクトリに戻ります。
|
1 |
cd .. |
以下を実行して顔データを処理します。
|
1 |
python3 train_model.py |
顔を判別できるか以下を実行してチェック。
実行すると顔の部分を切り出して、resultというディレクトリに保存します。
|
1 |
python3 face_cut.py |
顔を判別できたものは、Savedとなりますが、
顔が判別できなかった写真は
「顔が見つかりません」とメッセージが出ます。
削除する場合は対象データのディレクトリごと削除して、撮影をやり直してください。
認識精度はtolerance_parameterの値に依存します。0.0 <tolerance_parameter<1.0
デフォルトは0.6で、下げると誤認識が減りますが、認識されにくくなり、上げると認識されやすくなりますが、誤認識が増えます…..とのことです。この値はconfig.pyの中に記述されています。
では顔認識(識別)のアプリを起動します。
|
1 |
python3 facial_recognition.py |
顔が検出されたら緑の矩形で囲まれ、認識(識別)名が表示されますが、知らない人の場合はunknownと表示されます。
プログラムを終了する際は、カメラウィンドウを選択している状態で、escキーを押してください。
なんらかの理由でカメラがフリーズする場合があります。その際プログラムを終了した上で、
sh kill_video_processes.sh
として、カメラを掴んでいるプロセスを止めてください。
もしくは、ラズパイを再起動してください。
仮想環境を抜けて終了する場合は
|
1 |
deactivate |
これらの操作は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キーを押す

Leave a Reply