乗合バスの乗降映像・GPS データを解析し、乗降客の OD(Origin-Destination)情報を自動生成するツールです。
カメラ映像から人物検出・顔認識・Re-ID を行い、乗降をマッチングして OD 表を作成します。
| ノートブック | 処理内容 |
|---|---|
01_GPS&カメラデータ保存_ver05.ipynb |
GPS ログ・カメラ動画を AWS S3 から取得し、ローカルに保存 |
02_バス乗降の時間推定_ver04.ipynb |
GPS データをもとに各バス停への到着・出発時刻を推定 |
03_バス乗降の動画解析_ver08.ipynb |
YOLO・FaceAnalysis・StrongSORT により乗車・降車人物を検出・追跡 |
04_マッチング_ver02.ipynb |
顔特徴量・Re-ID 特徴量のコサイン類似度により乗車・降車人物をマッチング |
05_マッチング画像のエクセル保存_ver03 1.ipynb |
マッチング結果画像を Excel ファイルに整形・保存 |
06_OD表自動生成_ver7.ipynb |
マッチング結果から乗降バス停の OD 表を自動生成 |
07_乗降者判定用の画像挿入.ipynb |
乗降判定確認用の画像を Excel に挿入 |
01~05の連続実行_ver01.ipynb |
上記 01〜05 を連続実行するランチャー |
od/
├── INPUT/
│ ├── yolov8l.pt # YOLOv8 モデルウェイト
│ ├── osnet_ibn_x1_0_msmt17.pt # OSNet Re-ID モデルウェイト
│ ├── stop.csv # バス停マスタ
│ ├── stops_ew.csv # 路線別バス停(東西方向)
│ ├── stops_sn.csv # 路線別バス停(南北方向)
│ ├── timetable_ew.csv # 時刻表(東西方向)
│ ├── timetable_sn.csv # 時刻表(南北方向)
│ ├── start_ew.csv # 運行開始情報(東西方向)
│ └── start_sn.csv # 運行開始情報(南北方向)
└── *.ipynb # 各処理ノートブック
- Python 3.9 以上
- Jupyter Notebook / JupyterLab
- GPU 環境推奨(YOLO・Re-ID 推論処理を含むため)
pip install boto3 pandas numpy geopy scikit-learn Pillow openpyxl \
ultralytics insightface boxmot loguru opencv-python
insightfaceのインストールには C++ ビルドツールが必要な場合があります。
boxmotはStrongSORTトラッカーを使用します。
以下変数定義を実際の環境に合わせて更新。
<BUCKET_CAM_S3>:カメラデータを格納しているS3バケット名
例) "odcollect-camera-data-xxxxxxxxxx-ap-northeast-1"
<BUCKET_GPS_S3>:GPSデータを格納しているS3バケット名
例) "odcollect-gps-data-xxxxxxxxxx-ap-northeast-1"
INPUT/フォルダに必要なモデルウェイトおよびマスタ CSV を配置します。- 各ノートブックを順番に実行します(または
01~05の連続実行_ver01.ipynbを使用)。 - 実行時に日付(例:
20250804)の入力を求められます。
| ライブラリ | バージョン(目安) | ライセンス | 用途 |
|---|---|---|---|
| boto3 | ≥1.28 | Apache License 2.0 | AWS S3 からのデータ取得 |
| pandas | ≥2.0 | BSD 3-Clause | データ処理・CSV 操作 |
| NumPy | ≥1.24 | BSD 3-Clause | 数値計算・配列操作 |
| geopy | ≥2.4 | MIT License | GPS 座標間距離計算 |
| scikit-learn | ≥1.3 | BSD 3-Clause | コサイン類似度計算 |
| Pillow | ≥10.0 | HPND (MIT互換) | 画像読み書き |
| openpyxl | ≥3.1 | MIT License | Excel ファイル操作 |
| ultralytics (YOLOv8) | ≥8.0 | AGPL-3.0 | 人物検出 |
| insightface | ≥0.7 | MIT License(コード) / 非商用限定(モデル) ※1 | 顔認識・顔特徴量抽出 |
| boxmot | ≥10.0 | AGPL-3.0 | StrongSORT による人物追跡 (Re-ID) |
| OpenCV (opencv-python) | ≥4.8 | Apache License 2.0 | 動画読み込み・フレーム処理 |
| loguru | ≥0.7 | MIT License | ログ出力 |
⚠️ AGPL-3.0 に関する注意
ultralytics(YOLOv8)およびboxmotは GNU Affero General Public License v3.0 (AGPL-3.0) の下で配布されています。
AGPL-3.0 は「ネットワーク経由でユーザーにサービスを提供する行為」も配布と同等に扱い、その場合も派生物のソースコード開示を要求します。本ツールはオフラインのバッチ解析ツールであり、ネットワーク経由のサービス提供を意図していません。
そのため、本ツールを内部解析目的で使用する範囲においては、AGPL-3.0 のソースコード開示義務は原則として発生しません。
ただし、以下のケースに該当する場合は AGPL-3.0 の条件が適用されます。十分に確認のうえ、必要に応じて商用ライセンスを取得してください。
本ツールの処理をネットワーク経由で外部ユーザーに提供するサービスへ組み込む場合
AGPL-3.0 ライブラリを改変して配布する場合
ultralytics 商用ライセンス: https://www.ultralytics.com/license
boxmot 商用ライセンス: https://github.com/mikel-brostrom/boxmot#license
※1 insightface モデルウェイトに関する注意
insightface ライブラリ(コード) は MIT License ですが、同プロジェクトが提供する 学習済みモデルウェイト(GitHub リポジトリおよび python-package による自動ダウンロードを含む)は
非商用研究目的のみ(Non-commercial research purposes only) の利用に限定されています。
本ツールが使用するbuffalo_lモデル(顔検出・認識・年齢性別推定等)もこの制限対象です。
商用利用・社外サービスへの組み込みは、ライブラリのライセンスに関わらずモデルウェイトの利用条件に違反する可能性があります。
商用利用を検討する場合は、insightface 公式(recognition-oss-pack@insightface.ai)へライセンス確認を行ってください。
参照: https://github.com/deepinsight/insightface#license
| モデル | ファイル | ライセンス |
|---|---|---|
| YOLOv8l | INPUT/yolov8l.pt |
AGPL-3.0(ultralytics 公式モデル) |
| insightface 顔認識モデル | python-package による自動ダウンロード | 非商用研究目的のみ(insightface 公式モデルポリシー) |
| OSNet-IBN (MSMT17) | INPUT/osnet_ibn_x1_0_msmt17.pt |
MIT License(torchreid/boxmot 提供) |
os, re, csv, sys, json, pathlib, datetime, logging, io, subprocess, shutil, glob, math, warnings, typing
これらは Python 標準ライブラリであり、PSF(Python Software Foundation)ライセンスの下で提供されます。
- 動画データおよび GPS データには個人情報が含まれる可能性があります。取り扱いには十分ご注意ください。
- モデルウェイトファイル(
.pt)は本リポジトリには含まれていません。別途入手・配置が必要です。