Newer
Older
Demo-Maker / README.md
@mikado-4410 mikado-4410 on 22 Feb 2025 10 KB [update]README.mdの更新

聴診器解析・動画処理パイプライン

本プロジェクトは, 複数のPythonスクリプトを用いて, 聴診器の位置検出や解析, 動画の前処理・後処理, モザイク処理, 姿勢推定, 最小包含円計算などを行う総合解析パイプラインです.
各スクリプトは, 様々な機械学習モデル (YOLOX, EARSNet, XGBoost, LightGBM, mmdet, mmpose, PoseNet, YuNetなど) を利用して, 入力動画や画像から必要な情報を抽出し, 結果をCSVや可視化画像, 動画として出力します.


目次


概要

本プロジェクトは以下の処理を実現します:

  • 最小包含円の計算 (calc_circle.py, stethoscope_analysis.py)
    複数の点群から, 聴診器など対象物の位置を囲む最小の円 (直径・半径) を計算します.

  • 正規化および可視化 (check_normalized.py)
    各画像における肩, 腰, 聴診器の座標を正規化し, 結果をグラフや画像に描画して保存します.

  • モデル設定とパラメータ管理 (config.py)
    各種モデル (YOLOX, EARSNet, XGBoost, LightGBM, など) の設定や色設定, 動画パス, キャッシュ設定などを管理します.

  • 動画のクロップ処理 (crop.py)
    指定した時間範囲で動画を切り出す処理を行います.

  • 統合パイプライン処理 (main.py)
    動画からフレーム抽出, 姿勢推定 (RTMpose/PoseNet) によるキーポイント検出, 聴診器検出 (YOLOX/SSD/EARSNetなど), 各手法の結果を正規化してCSVに保存し, 可視化や動画化を行う一連の処理を実施します.

  • 顔領域のモザイク処理 (make-demo-SP.py)
    YuNet (FaceDetectorYN) を用いて, 動画内の顔領域にモザイク処理を施し, 結果を動画と各フレーム画像として出力します.

  • PoseNetによる骨格検出 (output_posenet.py)
    動画からフレームを抽出し, PoseNetで骨格検出を実行, 結果を画像に描画した後, 出力動画を作成します.

  • 聴診器解析 (stethoscope_analysis.py)
    各手法による聴診器検出結果から最小包含円や標準偏差を算出し, 体の画像上に各結果の円を描画するとともに, 数値データの比較グラフを作成します.

  • 動画のFPS変換および再生速度調整 (video_fps_converter.py)
    FFmpegを利用して, 入力動画のフレームレートや再生速度を変更し, 指定時間に合わせた出力動画を作成します.


システム要件

  • OS: Windows, macOS, Linux (OpenCV, FFmpegが動作する環境)
  • Python: 3.x (推奨3.7以上)
  • GPU: CUDA対応GPU (必要に応じて, torchとmmcvなどを利用する場合)
  • FFmpeg: FFmpegおよびFFprobeがインストールされ, システムパスまたは指定パスで利用可能であること

インストール方法

  1. Pythonおよび仮想環境の準備
    Pythonをインストールし, 必要に応じて仮想環境を作成してください.

  2. pipおよびセットアップツールのアップグレード

    pip install --upgrade pip setuptools wheel
    
  3. 必要なPythonライブラリのインストール
    プロジェクトルートにrequirements.txtを作成し, 以下の内容を記述します(必要に応じて追加してください):

    opencv-python
    numpy
    matplotlib
    pandas
    fpdf
    torch==2.1.0
    torchvision==0.16.0
    torchaudio==2.1.0
    mmcv==2.1.0
    mmdet==3.3.0
    mmpose==1.3.2
    

    次のコマンドを実行してインストールします:

    pip install -r requirements.txt
    
  4. 追加のpipインストールコマンド
    以下のコマンドも実行してください:

    pip install --upgrade pip setuptools wheel
    pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121
    pip install mmcv==2.1.0 -f https://download.openmmlab.com/mmcv/dist/cu121/torch2.1/index.html
    pip install mmdet==3.3.0
    pip install mmpose==1.3.2
    

フォルダ構成例

project/
│   calc_circle.py
│   check_normalized.py
│   config.py
│   crop.py
│   main.py
│   make-demo-SP.py
│   output_posenet.py
│   stethoscope_analysis.py
│   video_fps_converter.py
│   requirements.txt
│   README.md
│
├── models/                # 各種学習済みモデル (YOLOX, EARSNet, XGBoost, LightGBM, など)
├── modules/               # モジュール (EARSNet, RTMpose, etc.)
├── output/                # 出力結果 (CSV, 画像, 動画)
├── video/                 # 入力動画ファイル
└── images/                # 解析対象の画像 (例: BodyF.png など)

各スクリプトの説明

calc_circle.py

  • 機能:
    CSVファイルから各モデル (conv, Xgboost, lightGBM) の聴診器座標を読み込み, 点群から最小包含円を計算して直径を求めます.

  • 主な関数:

    • read_csv_file: CSVファイルを辞書形式で読み込みます.
    • min_circle: 与えられた点群から最小包含円の中心と半径を計算します.
    • process_data: 各モデルの座標データを処理し, 直径を返します.

check_normalized.py

  • 機能:
    正規化済み座標 (肩, 腰, 聴診器) のCSVファイルを読み込み, 各画像上に座標と骨格ラインを描画して, 画像として保存します.

  • 主な関数:

    • plot_coordinates: 各画像の座標データを散布図および接続線でプロットし, 結果画像を指定ディレクトリに保存します.

config.py

  • 機能:
    各種モデルの設定ファイルのパス, デバイス設定, カラー設定, モデル実行フラグ, バッチサイズ, 動画パスなど, 全体のパラメータを一元管理します.

crop.py

  • 機能:
    指定された開始時間と終了時間に基づき, 入力動画をクロップ (切り出し) するスクリプトです.

  • 主な関数:

    • crop_video_time: 動画ファイルを読み込み, 指定時間範囲でクロップし, 出力動画として保存します.

main.py

  • 機能:
    動画からフレーム抽出, RTMpose/PoseNetによる姿勢推定, YOLOX/SSDによる聴診器検出, EARSNetによる聴診器推論, 各種モデル (conv, XGBoost, LightGBM) を用いた座標推定, 正規化, 結果のCSV出力, 可視化画像および動画の生成など, パイプライン全体の処理を統合的に実行します.

  • 特徴:

    • FPS測定のためのスレッド実装
    • 複数のモデルおよびパイプライン処理の時間計測と結果出力

make-demo-SP.py

  • 機能:
    YuNet (FaceDetectorYN) を用いて動画内の顔領域にモザイク処理を施し, モザイク処理済み動画と各フレーム画像を出力します.

  • 主な処理:

    • 顔検出, モザイク処理, フレームの保存, 出力動画の生成

output_posenet.py

  • 機能:
    入力動画からフレームを抽出し, PoseNetを利用して骨格検出を実施, 結果画像にFPS情報を描画し, 出力動画として生成します.

  • 主な関数:

    • video_to_frames: 動画からフレームを抽出して保存します.
    • process_frames_with_posenet: 各フレームに対してPoseNetで骨格検出を行い, 結果を保存します.
    • create_video_from_images: 保存した画像から動画を生成します.

stethoscope_analysis.py

  • 機能:
    各手法による聴診器検出結果の座標データから, 最小包含円や標準偏差を算出し, 体の画像上に検出結果の円を描画, また統計情報や比較グラフ (棒グラフ) を生成してCSVおよび画像として保存します.

  • 主な関数:

    • calculate_welzl_circle: Welzlのアルゴリズムを用いて最小包含円を計算します.
    • calculate_metrics_for_sequence: 標準偏差と最小包含円の半径, 中心座標を算出します.
    • draw_circles_on_body: 体の画像に各手法の結果を円とラベルで描画します.

video_fps_converter.py

  • 機能:
    FFmpegを利用して, 入力動画のフレームレートおよび再生速度を変更し, 指定された出力動画を生成します.

  • 主な処理:

    • FFmpeg/FFprobeのパス取得, 動画の長さ取得
    • convert_video_fps: 指定FPSおよび速度に基づき動画を変換し, 出力ファイルとして保存

実行方法

各スクリプトは, コマンドラインから直接実行可能です. 例:

  • calc_circle.py
    python calc_circle.py
    
  • check_normalized.py
    python check_normalized.py
    
  • crop.py
    python crop.py
    
  • main.py
    python main.py --video_path ./video/your_video.mp4 --output_dir output
    
  • make-demo-SP.py
    python make-demo-SP.py
    
  • output_posenet.py
    python output_posenet.py
    
  • stethoscope_analysis.py
    python stethoscope_analysis.py
    
  • video_fps_converter.py
    python video_fps_converter.py input_video.mp4 output_video.mp4 --fps 30 --speed 1.0
    

各スクリプト実行前に, 必要なモデルファイル, CSV, 画像, 動画などの入力データが正しく配置されていることをご確認ください.


追加のpipインストールコマンド

上記のrequirements.txtに加え, 以下のコマンドも実行してください:

pip install --upgrade pip setuptools wheel
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121
pip install mmcv==2.1.0 -f https://download.openmmlab.com/mmcv/dist/cu121/torch2.1/index.html
pip install mmdet==3.3.0
pip install mmpose==1.3.2