はい、Raspberry Pi 3にカメラモジュールを接続し、OpenCVを使った顔認証による出退勤管理プログラムを作成する提案をします。データはローカルで管理します。
Raspberry Pi 3 顔認証出退勤管理システム
1. システム概要
- ハードウェア: Raspberry Pi 3、Raspberry Pi カメラモジュール
- ソフトウェア: Raspbian OS、Python、OpenCV、face_recognitionライブラリ(OpenCVベース)
- 機能:
- カメラ映像からの顔検出
- 登録済み顔データとの照合による個人識別
- 出勤・退勤時刻の記録(ローカルファイルまたはSQLiteデータベース)
- 管理者によるユーザー登録・削除
- データ管理: ローカルファイル(CSVまたはSQLiteデータベース)
- はい、Raspberry Pi 3にカメラモジュールを接続し、OpenCVを使った顔認証による出退勤管理プログラムを作成する提案をします。データはローカルで管理します。
- Raspberry Pi 3 顔認証出退勤管理システム
- 1. システム概要
- ハードウェア: Raspberry Pi 3、Raspberry Pi カメラモジュール
- ソフトウェア: Raspbian OS、Python、OpenCV、face_recognitionライブラリ(OpenCVベース)
- 機能:
- カメラ映像からの顔検出
- 登録済み顔データとの照合による個人識別
- 出勤・退勤時刻の記録(ローカルファイルまたはSQLiteデータベース)
- 管理者によるユーザー登録・削除
- データ管理: ローカルファイル(CSVまたはSQLiteデータベース)
- 2. 必要となるもの
- ハードウェア:
- Raspberry Pi 3 Model B/B+: システムの核となります。
- Raspberry Pi カメラモジュール: 顔を撮影するために必要です。Pi 3に対応したバージョンを選びましょう(例: Raspberry Pi Camera Module 3)。
- Micro SDカード: OSおよびプログラムの保存用(16GB以上推奨)。
- 電源アダプター: Raspberry Pi 用(5V/2.5A以上推奨)。
- ディスプレイ、キーボード、マウス: 初期設定やデバッグ時に必要ですが、SSH接続ができれば常時必要ではありません。
- ケース: 必要に応じて。
- ソフトウェア:
- Raspberry Pi OS (旧 Raspbian): 公式OS。
- Python 3: プログラムの主要言語。
- OpenCV: 顔検出・認識の基礎となるライブラリ。
- face_recognition: OpenCVをベースにした、より手軽に顔認識を実装できるPythonライブラリ。
- numpy: 数値計算ライブラリ。
- Pillow (PIL Fork): 画像処理ライブラリ(
face_recognitionの依存関係としてインストールされることがあります)。
ステップ3: プログラムの作成
以下のPythonスクリプトを参考に、主要な部分を実装します。
プログラム構成案:
attendance_system.py: メインプログラム。カメラからの映像取得、顔認証、出退勤記録。face_database.py: 顔データの登録・管理を行うユーティリティスクリプト(またはattendance_system.pyに含める)。faces/ディレクトリ: 登録するユーザーの顔写真(一人一枚、ファイル名で氏名がわかるように)を保存。attendance.csv(またはattendance.db): 出退勤記録を保存するファイル。
face_database.py (顔データ登録の例)
このスクリプトは、事前に用意した顔画像から顔エンコーディングを生成し、辞書型で保存します。
Raspberry Pi 顔認証出退勤管理システム - 機能拡張版
1. システム構成の変更点
GUIフロントエンド: Tkinter(Python標準ライブラリ)を採用し、Raspberry Piに直接接続されたディスプレイで操作します。
Webインターフェース: Flask(軽量Webフレームワーク)を採用し、ネットワーク経由でブラウザからアクセスできるようにします。
データ管理: CSVファイルでは複雑な検索や集計が難しいため、SQLiteデータベースへ移行します。これにより、ユーザー情報と出退勤ログを一元的に管理しやすくなります。
バックエンドロジック: 顔認証やデータベース操作など、GUIやWebとは独立したコアロジックをクラスとして分離し、再利用性を高めます。
2. 必要となるもの(追加・変更)
ソフトウェア:
Flask: Webインターフェース用 (pip install Flask)
SQLAlchemy: PythonからSQLiteを操作するためのORM (Object Relational Mapper) または、標準の sqlite3 モジュールを直接使用 (pip install SQLAlchemy または不要)
3. システム設計とプログラム構成案
プロジェクトディレクトリ構造:
attendance_system/
├── main.py # メインの実行ファイル(GUIを起動)
├── core.py # 顔認証、DB操作などのコアロジック
├── gui.py # TkinterによるGUI定義
├── web.py # FlaskによるWebインターフェース定義
├── database.py # データベーススキーマと初期化
├── encodings.pickle # 登録済み顔エンコーディング (face_database.pyで生成)
├── faces/ # 登録するユーザーの顔写真
│ ├── user1.jpg
│ └── user2.png
├── templates/ # FlaskのHTMLテンプレート
│ ├── index.html
│ └── logs.html
└── static/ # Flaskの静的ファイル(CSS, JSなど)
└── style.css
cd attendance_system
python3 -m venv venv_attendance # 仮想環境作成
source venv_attendance/bin/activate # 仮想環境アクティベート
必要なライブラリのインストール:
pip install numpy opencv-python face-recognition pillow Flask
データベースの初期化と顔エンコーディングの生成:
初回起動時やユーザーを追加・削除した際に、core.py内の encode_faces() 関数(またはmain.pyの起動時に自動で実行される)がencodings.pickleとDBを更新します。
GUIからユーザー登録する際は、自動的にDBとエンコーディングファイルが更新されます。
Webからユーザー登録する場合も同様です。
システム起動:
python3 main.py
TkinterのGUIウィンドウが表示され、カメラ映像が表示されます。
同時に、Flask Webサーバーがバックグラウンドで起動します。Raspberry PiのIPアドレス(例: http://192.168.1.100:5000)にブラウザでアクセスすると、Webインターフェースが表示されます。
6. 各機能の動作確認
GUI:
顔認証タブ: カメラ映像が表示され、顔が認識されると名前が表示され、「出勤」「退勤」ボタンが有効化されることを確認。
出勤/退勤ボタン:
認識された状態で「出勤」を押すと、ログに記録される。同日中に再度出勤できないことを確認。
出勤後1時間経過しないと「退勤」が押せない(またはエラーメッセージが表示される)ことを確認。
退勤後、次の出勤が可能になることを確認。
誤認識訂正: 「誤認識訂正」ボタンを押すとダイアログが表示され、正しい名前と行動を選択して記録できることを確認。
ユーザー管理タブ:
「ユーザー登録」で写真ファイルを選択し、名前を入力して登録できることを確認。登録後、ユーザー一覧に表示されることを確認。
ユーザー一覧から選択して「選択ユーザー削除」できることを確認。
ログ表示タブ: 出退勤ログがリアルタイムに近い形で表示されることを確認。
Webインターフェース:
ブラウザからRaspberry PiのIPアドレスとポート5000(例: http://<RaspberryPiのIPアドレス>:5000)にアクセスし、トップページが表示されることを確認。
「出退勤ログ」で全てのログが表示されることを確認。
「ユーザー管理」でユーザー一覧が表示され、新しいユーザーの追加(faces/に画像がある前提)、既存ユーザーの削除ができることを確認。
現在のスワップファイルを停止:
sudo dphys-swapfile swapoff
設定ファイルを編集:
sudo nano /etc/dphys-swapfile
CONF_SWAPSIZE の値を元の CONF_SWAPSIZE="100" に戻すか、行頭に # を付けてコメントアウトします。(デフォルトは100MBです)
例:
CONF_SWAPSIZE="100" # このように元に戻す
# CONF_SWAPSIZE="2048" # もしくは、変更した行をコメントアウト
変更したら、Ctrl+X を押し、Y を押して保存し、Enter で閉じます。
元のスワップファイルを有効にする:
sudo dphys-swapfile swapon