| images | 1 year ago | ||
| modules | 1 year ago | ||
| util | 1 year ago | ||
| .gitignore | 1 year ago | ||
| README.md | 1 year ago | ||
| calc_circle.py | 1 year ago | ||
| check_normalized.py | 1 year ago | ||
| config.py | 1 year ago | ||
| crop.py | 1 year ago | ||
| main.py | 1 year ago | ||
| make-demo-SP.py | 1 year ago | ||
| mosaic-image.py | 1 year ago | ||
| output_posenet.py | 1 year ago | ||
| pose-detect.py | 1 year ago | ||
| requirements.txt | 1 year ago | ||
| stethoscope_analysis.py | 1 year ago | ||
| video_fps_converter.py | 1 year ago | ||
本プロジェクトは, 複数の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を利用して, 入力動画のフレームレートや再生速度を変更し, 指定時間に合わせた出力動画を作成します.
Pythonおよび仮想環境の準備
Pythonをインストールし, 必要に応じて仮想環境を作成してください.
pipおよびセットアップツールのアップグレード
pip install --upgrade pip setuptools wheel
必要な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
追加の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 など)
機能:
CSVファイルから各モデル (conv, Xgboost, lightGBM) の聴診器座標を読み込み, 点群から最小包含円を計算して直径を求めます.
主な関数:
read_csv_file: CSVファイルを辞書形式で読み込みます.min_circle: 与えられた点群から最小包含円の中心と半径を計算します.process_data: 各モデルの座標データを処理し, 直径を返します.機能:
正規化済み座標 (肩, 腰, 聴診器) のCSVファイルを読み込み, 各画像上に座標と骨格ラインを描画して, 画像として保存します.
主な関数:
plot_coordinates: 各画像の座標データを散布図および接続線でプロットし, 結果画像を指定ディレクトリに保存します.機能:
指定された開始時間と終了時間に基づき, 入力動画をクロップ (切り出し) するスクリプトです.
主な関数:
crop_video_time: 動画ファイルを読み込み, 指定時間範囲でクロップし, 出力動画として保存します.機能:
動画からフレーム抽出, RTMpose/PoseNetによる姿勢推定, YOLOX/SSDによる聴診器検出, EARSNetによる聴診器推論, 各種モデル (conv, XGBoost, LightGBM) を用いた座標推定, 正規化, 結果のCSV出力, 可視化画像および動画の生成など, パイプライン全体の処理を統合的に実行します.
特徴:
機能:
YuNet (FaceDetectorYN) を用いて動画内の顔領域にモザイク処理を施し, モザイク処理済み動画と各フレーム画像を出力します.
主な処理:
機能:
入力動画からフレームを抽出し, PoseNetを利用して骨格検出を実施, 結果画像にFPS情報を描画し, 出力動画として生成します.
主な関数:
video_to_frames: 動画からフレームを抽出して保存します.process_frames_with_posenet: 各フレームに対してPoseNetで骨格検出を行い, 結果を保存します.create_video_from_images: 保存した画像から動画を生成します.機能:
各手法による聴診器検出結果の座標データから, 最小包含円や標準偏差を算出し, 体の画像上に検出結果の円を描画, また統計情報や比較グラフ (棒グラフ) を生成してCSVおよび画像として保存します.
主な関数:
calculate_welzl_circle: Welzlのアルゴリズムを用いて最小包含円を計算します.calculate_metrics_for_sequence: 標準偏差と最小包含円の半径, 中心座標を算出します.draw_circles_on_body: 体の画像に各手法の結果を円とラベルで描画します.機能:
FFmpegを利用して, 入力動画のフレームレートおよび再生速度を変更し, 指定された出力動画を生成します.
主な処理:
convert_video_fps: 指定FPSおよび速度に基づき動画を変換し, 出力ファイルとして保存各スクリプトは, コマンドラインから直接実行可能です. 例:
python calc_circle.py
python check_normalized.py
python crop.py
python main.py --video_path ./video/your_video.mp4 --output_dir output
python make-demo-SP.py
python output_posenet.py
python stethoscope_analysis.py
python video_fps_converter.py input_video.mp4 output_video.mp4 --fps 30 --speed 1.0
各スクリプト実行前に, 必要なモデルファイル, CSV, 画像, 動画などの入力データが正しく配置されていることをご確認ください.
上記の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