Raspberry Pi 4でお手軽に高性能な顔認識をしたい


はじめに

Pythonでお手軽に高性能な顔認識ができるface_recognitionというライブラリがあります.画像や動画内の顔を認識するだけではなく,顔のランドマーク(目,鼻,口など)の認識や人物の識別などが数行のプログラムでできるようになっています.しかも様々なハードウェアやOSに対応しているようです.

もちろんWindowsにも対応しており,以前私のメインPC(Windows10)でセットアップしようとしてみたのですが,どうしてもうまく行かず諦めてしまいました.ちなみにそのときはface_recognitionの代わりにmtcnnというライブラリを使いました.

今回はまた改めてface_recognitionを使ってみたくなったので,Raspberry Pi 4でセットアップしてみました.

環境

  • Raspberry Pi 4 ModelB 4GB
  • Raspbian Buster
  • Python 3.7.3

セットアップ

dlibインストール

まずdlibというライブラリをインストールする必要があるようです.

この動画を参考にインストールしました.
How to install dlib on Raspberry Pi 4 or Linux

まずパッケージを更新します.

sudo apt update && sudo apt upgrade

dlibのインストールに必要なパッケージをインストールします.

sudo apt install build-essential cmake pkg-config

次にdlib.netに行き,左下の"Download dlib"と書いてある青いボタンからdlibをダウンロードします.

dlib-19.21.tar.bz2という名前のファイルがダウンロードされるので,エクスプローラから展開します.

するとdlib-19.21というフォルダができます.中身は画像のようになっています.

次にターミナルからこのフォルダに移動し,dlibのビルド・インストールを行います.

まずビルドします.10~20分くらいかかります.
Python3で実行するように注意します.

sudo python3 setup.py build

インストールします.これも10~20分くらいかかります.

sudo python3 setup.py build`

以上でインストールが完了しているはずです.Pythonから簡単に確認してみます.
dlibをインポートしてみて特にエラーが出なければ大丈夫です.

$ python3
Python 3.7.3 (default, Jul 25 2020, 13:03:44) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import dlib
>>> dlib.__version__
'19.21.0'

face_recognitionのインストール

pipでインストールするだけです.

pip3 install face_recognition

使ってみる

簡単な顔認識プログラムを書いてみました.

script.py
import face_recognition
from PIL import Image, ImageDraw

image = face_recognition.load_image_file("image.jpeg")

face_locations = face_recognition.face_locations(image)
print(f"{len(face_locations)} faces detected.")

pil_image = Image.fromarray(image)
draw = ImageDraw.Draw(pil_image)

for loc in face_locations:
    top, right, bottom, left = loc
    draw.rectangle((left, top, right, bottom), width=8)

pil_image.save("./output.jpg")

すごくお手軽です.
ただ処理に結構時間がかかります.測定してみたらみたら17秒でした.人数が多いせいもあるかもしれません.

$ time python3 ./script.py
9 faces detected.

real    0m17.715s
user    0m15.845s
sys 0m1.625s

face_recognitionの使い方についてはGitHubを見てください.
face_recognition

近いうちにカメラモジュールで顔認識を試してみたいです.