振戦事例 動画解析プロトコル・パイプライン

作成日:2026-04-19 / 対象:パーキンソン病 / 本態性振戦 / 小脳性振戦 / 関連:tremor-analyzer~/work/medical-tools/tremor-analyzer/

目次 0. 目的 1. 撮影プロトコル 2. 解析パイプライン 3. 解析指標 4. 振戦分類の判定基準 5. データ品質チェック 6. 実行コマンド 7. よくある問題と対処 8. 参考文献

0. 目的

1. 撮影プロトコル

1.1 機材

1.2 撮影条件

項目推奨最低
フレームレート60 fps30 fps(ナイキスト15Hz 確保)
解像度1920×10801280×720
被写体距離50cm〜1m手が画面1/3以上
撮影角度正面(患者と同じ高さ)俯瞰は不可
両手同時必須(左右差評価)

1.3 ★ 撮影環境 図解

共通環境(カメラ・照明・距離・両手同時)と 4条件の患者姿勢・カメラ位置を一目で確認できる図解。

振戦4条件撮影環境図

図:振戦 4条件 撮影環境セットアップ(Claude Design)

1.4 ★ 4条件撮影(各30秒以上)

1
安静時(Rest Tremor)
・手を膝の上または肘掛けに置く/脚を組まない
・視線は前方、リラックスした姿勢
PD 検出の最重要条件 ここで4–6Hzの pill-rolling を捉える
2
姿勢時(Postural Tremor)
・両手を前に水平伸展(肘を伸ばし、指を開いた状態)
・30秒保持
ET 検出の最重要条件 ここで6–12Hzの対称性振戦を捉える
3
動作時(Action / Intention Tremor)
・指-鼻試験を3回(目を閉じて・ゆっくり)
・コップを持つ動作/文字を書く動作
小脳性の検出 目標接近時の振幅増大を確認
4
Distraction(注意散らし)
・安静時姿勢のまま「100から7ずつ引き算」または「逆唱」
・30秒継続
PD安静時振戦が増強する現象を捉える(鑑別の決め手)

1.5 撮影記録テンプレート

項目記録値
撮影日時YYYY-MM-DD HH:MM
撮影場所外来 / 通所 / 訪問 / 在宅
薬物状態ON / OFF(最終内服時刻を記録)
診断PD / ET / 小脳性 / 鑑別中
優位側左 / 右 / 不明
主訴ふるえの時期・強さ・影響
NFOG-Q(FOG併存評価時)
MDS-UPDRS 3.170–4 点
プライバシー:顔が写る場合は自動モザイク処理(fog-analyzer/scripts/anonymize_video.py 流用)を事前に適用する。

2. 解析パイプライン(5段階)

1
動画 → 手キーポイントCSV(MediaPipe Hands)
・両手 21点 × 3軸(x, y, visibility)をフレーム別に抽出
・出力:data/keypoints/patient_XXX.csv(約4MB/60秒60fps)
・処理時間:60秒動画で約1–2分(CPU)
2
前処理
・欠損補間(最大10フレーム、ffill/bfill)
・Butterworthバンドパス(2–15Hz、4次)— 低周波ドリフト・高周波ノイズ除外
・Visibility < 0.3 のフレームをNaN→補間
3
スペクトル解析
・Welch法で全体PSD(nperseg = 2秒×fps)
・PD帯(4–6Hz)・ET帯(6–12Hz)・小脳性帯(3–5Hz)のパワー積算
・スライディングFFT(2秒窓、0.2秒ステップ)で時系列変化捕捉
4
振戦分類
・ピーク周波数の位置で候補分類を決定
・各帯域のパワー比(>20%)で信頼性確認
・左右パワー差で非対称性計算
・優位側判定(パワー比 1.3倍以上で判定、未満は「両側」)
5
レポート生成
・6パネルClaude Designダッシュボード(PNG, 130dpi)
・自己完結型HTML(base64埋め込み)
・JSON サマリー(全指標)
・ケースカンファ議論スライド(pptx + Cloudflare Pages 公開)

3. 解析指標

3.1 振戦そのものの指標(片手ごと)

指標算出方法臨床的意義
Peak Frequency (Hz)PSD の 2–15Hz 範囲での最大値PD/ET/小脳性 の鑑別
Peak Powerピーク周波数のパワー値振戦の強さ
PD帯比率 (4–6Hz)PD帯積分 / 全体積分PD 振戦の純度
ET帯比率 (6–12Hz)ET帯積分 / 全体積分ET 振戦の純度
Tremor Constancy (%)振戦検出ウィンドウ / 全ウィンドウ持続性(間欠/持続)
Mean Amplitude各ウィンドウの Peak-to-Peak 中央値振幅の重症度

3.2 両手統合指標

指標意味
Asymmetry Index = |L-R| / max(L, R)左右差(PD 一側優位性の確認)
Dominant ClassificationPD / ET / Cerebellar / Physio / None
Dominant Handleft / right / both

4. 振戦分類の判定基準

分類周波数文脈左右対称性治療反応
PD4–6 Hz安静時非対称L-dopa ◎
ET6–12 Hz姿勢・動作時対称β遮断薬 ◎
小脳性3–5 Hz動作時(目標接近で増大)両側特効薬なし
生理的8–12 Hz姿勢時(低振幅)対称カフェイン断ち
判定の優先順位(ケースカンファ判定カード):
Peak frequency(最重要、PD/ET 直接鑑別)
Peak power(閾値 > 1e-6 で振戦あり判定)
帯域パワー比 > 20%(分類の信頼性確認)
Asymmetry Index(一側性=PD の補助)
Tremor Constancy(持続性)
検出率(データ品質ゲート)

5. データ品質チェック

5.1 自動チェック項目

項目閾値低値時の対応
手検出率≥ 70%70%未満なら解釈保留・再撮影推奨
有効フレーム数≥ fps × 1.0 秒FFTに不足なら判定不可
Visibility≥ 0.3 平均照明・背景改善

5.2 撮影失敗のサイン

6. 実行コマンド

6.1 個別実行

# 合成データテスト(動画不要)
cd ~/work/medical-tools/tremor-analyzer
py src/test_tremor_analyzer.py

# 動画 → キーポイントCSV
py src/tremor_analyzer.py --video data/videos/patient01.mp4 --output data/results/patient01

# CSV再解析(パラメータ調整用、軽い処理)
py src/tremor_analyzer.py --csv data/keypoints/patient01.csv --fps 60 --output data/results/patient01

6.2 ケースカンファ議論資料(次回実装予定)

# 症例情報 JSON を編集
cp templates/discussion/case_info_template.json data/presentation/case_YYYYMMDD.json

# 一気通貫実行(pipeline.py 振戦版は次回セッション実装予定)
py templates/discussion/pipeline.py --case data/presentation/case_YYYYMMDD.json

7. よくある問題と対処

症状原因対処
手が検出されない照明不足 / 手が画面外150lux以上 / 近接撮影
振戦なし判定(分類 None)振幅が小さすぎ or 閾値過大peak_power_threshold 緩和(1e-6→1e-7)
PD のはずが ET と誤分類安静時条件未達成 / 姿勢混在撮影条件の分離徹底、安静時のみ切り出し
左右が逆になるMediaPipe Handedness 誤判定最初のフレームで手動確認・左右反転フラグ
FFT ピーク不明瞭fps 不足(30fps以下)60fps 撮影推奨
1秒未満の断続振戦撮影時間不足最低30秒、推奨60秒以上

8. 参考文献