Raspberry Piでリアルタイム顔認識:エンドツーエンドガイド
このチュートリアルでは、OpenCVとPi-Camを使用してRaspberry Pi上でリアルタイム顔認識システムを構築する手順を、ハードウェアセットアップから認識器のトレーニングまで、明確なコードスニペットと実用的なヒントとともに解説します。
以下は、Pi-Camがリアルタイムで顔を検知するライブデモです。
このプロジェクトは、リアルタイム性能に最適化されたオープンソースのOpenCVライブラリに依存しています。ここではRaspbian搭載Raspberry Piに焦点を当てますが、同じコードはmacOSとWindowsでもわずかな調整で動作します。
3つのフェーズ
完全な顔認識ワークフローは、以下の3つの明確な段階に分解できます:
- 顔検知とデータ収集
- 認識器のトレーニング
- リアルタイム顔認識
ステップ1:部品表(BOM)
必須コンポーネント:
- Raspberry Pi 3 – 32.00ドル
- 500万画素 1080p OV5647 ミニカメラモジュール – 13.00ドル
ステップ2:OpenCV 3のインストール
Raspbian StretchへのクリーンなOpenCV 3インストールには、 Adrian Rosebrockのガイド を推奨。チュートリアル完了後、専用のPython仮想環境をアクティブ化:
source ~/.profile
workon cv
環境内でPythonバージョンとOpenCVインストールを確認:
python
>>> import cv2
>>> cv2.__version__
3.3.0以降のバージョン番号が表示されるはずです。
ステップ3:カメラのテスト
カメラが検出されない場合、ドライバーを有効化:
sudo modprobe bcm2835-v4l2
以下のPythonスニペットでPi-Camストリームを開き、カラーとグレースケールで表示、垂直反転(カメラの向きが異なる場合は調整):
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, -1)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', frame)
cv2.imshow('gray', gray)
if cv2.waitKey(30) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
python simpleCamTest.py で実行(プロジェクトのGitHubで入手可能)。 ESC キーで終了。
ステップ4:顔検知
OpenCVのHaar Cascade分類器は、顔検知のための軽量な機械学習アプローチです。事前学習済みXMLファイル( haarcascade_frontalface_default.xml )をダウンロードし、 Cascades フォルダに配置。以下のスクリプトでバウンディングボックス付きリアルタイム顔検知をデモ:
import cv2
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, img = cap.read()
img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray, scaleFactor=1.2, minNeighbors=5, minSize=(20, 20)
)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow('video', img)
if cv2.waitKey(30) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
detectMultiScale パラメータで感度を制御: scaleFactor は各イテレーションで画像サイズを縮小、 minNeighbors は誤検知をフィルタリング、 minSize は検知可能な最小顔サイズを設定。
追加例
プロジェクトのGitHubでさらなる検知オプションを確認:
- faceEyeDetection.py
- faceSmileDetection.py
- faceSmileEyeDetection.py
Haar Cascade Object Detection – Face & Eye Tutorial
ステップ5:データ収集
ラベル付きデータセットの収集はトレーニングに不可欠。プロジェクトフォルダ(例: FacialRecognitionProject )と dataset サブディレクトリを作成:
mkdir FacialRecognitionProject
cd FacialRecognitionProject
mkdir dataset
Haar Cascadeファイルをプロジェクトルートにダウンロード。その後 01_face_dataset.py を実行し、ユーザーごとに30枚の顔画像を取得:
import cv2
import os
cam = cv2.VideoCapture(0)
cam.set(3, 640)
cam.set(4, 480)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face_id = input('\nユーザーID(数値)を入力し、Enterキーを押してください → ')
print('\n[INFO] 顔撮影を初期化中。カメラを見てください…')
count = 0
while True:
ret, img = cam.read()
img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_detector.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
count += 1
cv2.imwrite(f'dataset/User.{face_id}.{count}.jpg', gray[y:y+h, x:x+w])
cv2.imshow('image', img)
if cv2.waitKey(100) & 0xff == 27 or count >= 30:
break
if count >= 30:
break
cam.release()
cv2.destroyAllWindows()
print('\n[INFO] プログラム終了とクリーンアップ。')
各画像は User.{id}.{count}.jpg (例: User.1.4.jpg )という命名規則。必要に応じてサンプル数を調整可能。
ステップ6:トレーナー
収集した画像を使用してOpenCV顔認識器をトレーニング。結果のモデルは trainer フォルダに .yml ファイルとして保存。実装詳細はプロジェクトリポジトリの完全なトレーニングスクリプトを参照。
詳細を見る:Real-Time Face Recognition – End-to-End Project
製造プロセス
- MATRIX Voice搭載Raspberry PiへのGoogle Assistantインストール:ステップバイステップガイド
- Speathe:麻痺ユーザーのための呼吸駆動コミュニケーション
- Windows IoTとRaspberry Piで作るセキュアな顔認証ドアロック
- Raspberry PiとOpenCVによる自動ビジョンベース物体追跡
- Raspberry Piで手書き数字認識:TensorFlowとOpenCVを用いたディープラーニング実装
- Windows IoT Core搭載RoverをRaspberry Pi 2で構築 - 初心者から上級者まで
- GoPiGo v2をWindows 10 IoT Coreで拡張 - Raspberry Pi 3対応
- Python 演算子完全マスター: 包括的ガイド
- Pythonリスト操作:作成、アクセス、変更、高度なテクニック
- Pythonタプル完全ガイド:作成、アクセス、高度な操作
- Python辞書完全ガイド:作成、操作、高度なテクニック