RaspberryPi と Web カメラを用いた簡易的な「混雑率推定のためのシステム」です.開発プロセスは Zenn でドキュメント化してあります.詳しい情報はそちらを参照してください.ただし,こちらのリポジトリは定期的にアップデートされるのでドキュメントの内容と変わっていることもあります.
- Web カメラで画像を撮影する
- 画像を Google の Cloud Vision API に送る
- Cloud Vision API で人の検出 (およびカウント) をおこなう
- 返ってきた結果から混雑率を計算する
- データベースに格納する
RaspberryPi でエッジコンピューティングの入門を行う目的で開発したものですがローカルでも動きます.
- Local : macOS Monterey (12.1)
- Node.js (v12.21.0)
- npm (7.5.2)
- RaspberryPi 4 Model B (RAM 4GB)
- OS : Ubuntu Desktop ( 20.04.3 64-bit )
- Node.js (v12.21.0)
- npm (7.5.2)
- DB
- Cloud Firestore
基本的なディレクトリ構成以下のようになっています.どのファイルを編集するかは,この構成を元に説明していきます(必要なファイルだけ記述しています).
※ ディレクトリ構成はマークダウンの関係で記述が崩れてしまい正確ではない部分があるのであくまで参考程度にしてください.
congestion-estimation
L package.json
L README.md
L img.jpg (Webカメラで撮影した画像)
L src
L index.js (これはルーティング用なので今回使わない)
L edge.js (ラズパイではこのファイルを実行するだけ)
L config.js (認証情報など(gitにはpushされない))
L services
L webcam
L WebcamControlService.js (Webcam操作系)
L ComputerVision
L ObjectDetectionService.js (Cloud Vision API を利用する)
L CRUD
L FirestoreService.js (DB操作)
基本的に services
以下に必要な機能を実装し,それを edge.js
から呼び出していきます.
Cloud Vision API や Firebase/Firestore は設定済みで,環境変数やサービスアカウントが正常に設定されていればローカルでも RaspberryPi でも実行できます.設定方法などは Zenn のドキュメントを参照してください.
src/
以下にあるedge.js
を実行すればすべての処理が実行される- プロジェクトルートで
node ./src/edge.js
- プロジェクトルートで
- プログラムは
node-cron
で定期実行されるようになっているので,終了させるまで動き続けます.
※ プログラムを終了し忘れると,Cloud Vision API などは料金がかかるので注意してください.
- 撮影した写真はオブジェクト検知終了時に削除する
- Firestore に格納する際のタイムスタンプの調整