4.3 KiB
Phase 9 GUI仕様
目的と構成
Phase 1〜8の実験実行、条件設定、映像確認、状態監視、ログ確認、統計解析をWindows向けローカルGUIから操作できるようにする。GUIは研究用プロトタイプであり、既存CLIを置き換えない。
MainWindowは表示、ExperimentControllerは既存Applicationのワーカースレッド実行、AnalysisControllerはPhase 8のrun_analysis_cli実行を担当する。カメラ、YOLO、各Phaseの処理やロガーはGUIへ複製しない。
MainWindowと各パネル
- Experiment: camera/video、Prompt/Control/Disabled、音声、音量、顔処理頻度、Yaw方向、統合ログを設定する。
- Preview: OpenCV BGR画像をRGBへ変換し、縦横比を維持して表示する。
- Status: FPS、frame、active/total tracks、crossings、prompt/pseudo prompt/response、turn、ログ場所を表示する。
- Logs: 開始・終了、解析状態、警告、例外を表示する。
- Analysis: 入出力、再帰検索、グラフ、Fisher/カイ二乗、Mann–Whitney/Welch tを設定する。
GUI起動直後にはカメラとYOLOを初期化せず、Start後にだけApplicationを生成する。
ExperimentController
GUI入力をdefault YAML、experiment YAMLの後に最優先上書きとしてマージする。Applicationの二重起動を拒否し、start/stop/pause/resumeを協調的に制御する。プレビューはgui.preview_max_fpsで間引く。
AnalysisController
Phase 8解析を別スレッドで実行し、カメラやYOLOを初期化しない。完了時に生成ファイル一覧を返す。実験終了後の自動解析も選択できる。
Application連携とRuntimeMetrics
Applicationへ描画済みフレームとRuntimeMetricsの任意コールバックを追加した。CLI時は未指定なので従来動作を維持する。RuntimeMetricsはframe、elapsed time、FPS、追跡数、訪問・通過数、顔検出数、振り向き数、音声条件、prompt/pseudo/response数、人物状態内訳、ログ場所を保持する。
スレッドと停止
映像処理と統計解析はGUIスレッド外で実行する。Widget更新はQt Signal/SlotでGUIスレッドに戻す。StopはApplication.request_stop()を呼び、既存finally処理がsummary確定、logger close、Face/Audio/Tracker close、Camera/VideoWriter release、OpenCV window破棄を行う。finalizeに数秒かかる場合がある。
入力検証
camera indexは0以上、volumeは0〜1、face interval/max personsは1以上、動画入力は既存ファイル必須、voice modeはprompt/control/disabled、Yaw方向はpositive/negativeとする。Promptで音声が未指定または存在しない場合は警告する。
結果を開く機能
Windowsではos.startfile、macOS/Linuxでは標準ファイルマネージャーを使用する。解析結果一覧のダブルクリックで保存場所を開く。
テスト
GUI非依存モデル、入力検証、mock Applicationによる開始・停止・一時停止、mock解析runner、BGR→RGB変換をテストする。PySide6がない環境ではQt依存テストのみskipするため、カメラを起動しない。
手動確認
python main.py guiで起動し、Start前にカメラLEDとYOLOロードが始まらないこと。- Promptで音声を選択し、通過、prompt count、response count、Stop後の統合ログを確認する。
- Controlで音声が鳴らずpseudo prompt countが増えることを確認する。
- 動画入力、pause/resume、プレビュー、状態表示を確認する。
- Analysisから
data/logs/unifiedを解析し、CSVとplotsを生成・表示できることを確認する。
既知の制約
- 実験前にCLIでも実機動作を確認する。
- CPU環境ではプレビューによりFPSが低下する可能性があり、表示FPSと処理FPSは一致しないことがある。
- GUIはID switch、顔認証、個人識別を解決しない。
- 統計結果は因果関係を直接証明しない。
Phase 10への引き継ぎ
GuiExperimentRequest、GuiAnalysisRequest、RuntimeMetrics、Controllerのstart/stop/pause/resumeと完了コールバックを安定インターフェースとして、実験プロトコル、条件ローテーション、チェックリスト、品質確認を追加できる。