# Video-based Respiration Rate Detection Algorithm 该项目是一个基于视频图像的呼吸频率检测算法的实现。它可以从视频中提取人体的呼吸曲线并计算呼吸频率。该算法使用了光流法、相关性引导的光流法、滤波、归一化等技术来提高检测精度。同时,它提供了多种呼吸频率计算方法供选择,包括FFT、Peak Counting、Crossing Point和Negative Feedback Crossover Point等。 ## 文件结构 - `params.py`: 包含所有可配置的参数及其默认值。 - `RespirationRateDetector.py`: 实现了呼吸频率检测算法的核心逻辑。 - `demo.py`: 演示程序,从摄像头读取视频流并实时显示呼吸曲线和呼吸频率。 ## 使用方法 1. 克隆该项目到本地。 2. 安装所需的Python依赖包,OpenCV、NumPy、SciPy、Matplotlib。 3. 根据需要在`params.py`中调整参数设置。 4. 运行`demo.py`启动演示程序。 程序将打开一个窗口显示从摄像头捕获的视频流,并在另一个窗口中绘制实时呼吸曲线。同时,它还会在视频窗口上显示使用不同方法计算得到的呼吸频率值。 ## 核心算法 该算法的核心步骤包括: 1. **光流法**:使用光流法跟踪视频中的特征点,并计算这些特征点的运动幅度和。 2. **相关性引导的光流法**:通过计算每个特征点与呼吸曲线的相关性,筛选出与呼吸相关的特征点,以提高检测精度。 3. **滤波**:对原始呼吸曲线进行带通滤波,去除高频和低频噪声。 4. **归一化**:将滤波后的呼吸曲线进行归一化处理。 5. **呼吸频率计算**:使用FFT、Peak Counting、Crossing Point和Negative Feedback Crossover Point等多种方法计算呼吸频率。 ## 参数说明 `params.py`中包含了该算法的所有可配置参数及其默认值。主要参数包括: - `--video-path`: 输入视频文件的路径。默认值为'./1.mp4'。 - `--FSS`: 是否启用特征点选择策略(Feature Point Selection Strategy)。默认为True。 - `--CGOF`: 是否启用相关性引导的光流法(Correlation-Guided Optical Flow Method)。默认为True。 - `--filter`: 是否对呼吸曲线进行滤波。默认为True。 - `--Normalization`: 是否对呼吸曲线进行归一化。默认为True。 - `--RR_Evaluation`: 是否计算呼吸频率。默认为True。 其他参数控制光流法、特征点选择策略、滤波和呼吸频率计算的具体设置。 - `--OFP-maxCorners`: 光流法中检测特征点的最大数量。默认为100。 - `--OFP-qualityLevel`: 光流法中特征点检测的质量等级。默认为0.1。 - `--OFP-minDistance`: 光流法中特征点之间的最小距离。默认为7。 - `--OFP-mask`: 光流法中使用的mask,用于指定感兴趣区域。默认为None。 - `--OFP-QualityLevelRV`: 当无法检测到足够数量的特征点时,降低质量等级的步长值。默认为0.05。 - `--OFP-winSize`: 光流法中金字塔Lucas-Kanade光流估计器的窗口大小。默认为(15,15)。 - `--OFP-maxLevel`: 光流法中的金字塔层数。默认为2。 - `--FSS-switch`: 是否启用特征点选择策略。 - `--FSS-maxCorners`: 特征点选择策略中检测特征点的最大数量。默认为100。 - `--FSS-qualityLevel`: 特征点选择策略中特征点检测的质量等级。默认为0.1。 - `--FSS-minDistance`: 特征点选择策略中特征点之间的最小距离。默认为7。 - `--FSS-mask`: 特征点选择策略中使用的mask。默认为None。 - `--FSS-QualityLevelRV`: 当无法检测到足够数量的特征点时,降低质量等级的步长值。默认为0.05。 - `--FSS-FPN`: 特征点选择策略中要选择的特征点数量。默认为5。 - `--CGOF-switch`: 是否启用相关性引导的光流法。 - `--Filter-switch`: 是否对呼吸曲线进行滤波。 - `--Filter-type`: 滤波器的类型,可选'lowpass'、'highpass'、'bandpass'和'bandstop'。默认为'bandpass'。 - `--Filter-order`: 滤波器的阶数。默认为3。 - `--Filter-LowPass`: 带通滤波器的低通频率(次/分钟)。默认为2。 - `--Filter-HighPass`: 带通滤波器的高通频率(次/分钟)。默认为40。 - `--Normalization-switch`: 是否对呼吸曲线进行归一化。 - `--RR-switch`: 是否计算呼吸频率。 - `--RR-Algorithm-PC-Height`: Peak Counting算法中使用的峰值高度阈值。默认为None。 - `--RR-Algorithm-PC-Threshold`: Peak Counting算法中使用的峰值门限。默认为None。 - `--RR-Algorithm-PC-MaxRR`: Peak Counting算法中呼吸频率的最大值(次/分钟)。默认为45。 - `--RR-Algorithm-CP-shfit_distance`: Crossing Point算法中使用的移位距离。默认为15。 - `--RR-Algorithm-NFCP-shfit_distance`: Negative Feedback Crossover Point算法中使用的移位距离。默认为15。 - `--RR-Algorithm-NFCP-qualityLevel`: Negative Feedback Crossover Point算法中使用的质量等级。默认为0.6。