diff --git a/README.md b/README.md index 5681926..39650a7 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,281 @@ +# 聴診器解析・動画処理パイプライン + +本プロジェクトは, 複数のPythonスクリプトを用いて, 聴診器の位置検出や解析, 動画の前処理・後処理, モザイク処理, 姿勢推定, 最小包含円計算などを行う総合解析パイプラインです. +各スクリプトは, 様々な機械学習モデル (YOLOX, EARSNet, XGBoost, LightGBM, mmdet, mmpose, PoseNet, YuNetなど) を利用して, 入力動画や画像から必要な情報を抽出し, 結果をCSVや可視化画像, 動画として出力します. + +--- + +## 目次 +- [聴診器解析・動画処理パイプライン](#聴診器解析動画処理パイプライン) + - [目次](#目次) + - [概要](#概要) + - [システム要件](#システム要件) + - [インストール方法](#インストール方法) + - [フォルダ構成例](#フォルダ構成例) + - [各スクリプトの説明](#各スクリプトの説明) + - [calc\_circle.py](#calc_circlepy) + - [check\_normalized.py](#check_normalizedpy) + - [config.py](#configpy) + - [crop.py](#croppy) + - [main.py](#mainpy) + - [make-demo-SP.py](#make-demo-sppy) + - [output\_posenet.py](#output_posenetpy) + - [stethoscope\_analysis.py](#stethoscope_analysispy) + - [video\_fps\_converter.py](#video_fps_converterpy) + - [実行方法](#実行方法) + - [追加のpipインストールコマンド](#追加のpipインストールコマンド) + +--- + +## 概要 + +本プロジェクトは以下の処理を実現します: +- **最小包含円の計算** (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およびセットアップツールのアップグレード** + ```bash + pip install --upgrade pip setuptools wheel + ``` + +3. **必要なPythonライブラリのインストール** + プロジェクトルートに`requirements.txt`を作成し, 以下の内容を記述します(必要に応じて追加してください): + ```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 + ``` + 次のコマンドを実行してインストールします: + ```bash + pip install -r requirements.txt + ``` + +4. **追加のpipインストールコマンド** + 以下のコマンドも実行してください: + ```bash + 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** + ```bash + python calc_circle.py + ``` +- **check_normalized.py** + ```bash + python check_normalized.py + ``` +- **crop.py** + ```bash + python crop.py + ``` +- **main.py** + ```bash + python main.py --video_path ./video/your_video.mp4 --output_dir output + ``` +- **make-demo-SP.py** + ```bash + python make-demo-SP.py + ``` +- **output_posenet.py** + ```bash + python output_posenet.py + ``` +- **stethoscope_analysis.py** + ```bash + python stethoscope_analysis.py + ``` +- **video_fps_converter.py** + ```bash + python video_fps_converter.py input_video.mp4 output_video.mp4 --fps 30 --speed 1.0 + ``` + +各スクリプト実行前に, 必要なモデルファイル, CSV, 画像, 動画などの入力データが正しく配置されていることをご確認ください. + +--- + +## 追加のpipインストールコマンド + +上記の`requirements.txt`に加え, 以下のコマンドも実行してください: ```bash 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