7.7 KiB
7.7 KiB
流星探测器配置指南
本文档详细介绍了如何配置和选择使用不同的流星探测器。系统支持两种类型的探测器:
- 亮度探测器 (BrightnessDetector) - 基于帧间亮度对比的简单探测器
- CAMS探测器 (CamsDetector) - 基于CAMS FTP格式的帧堆叠探测器
亮度探测器 (BrightnessDetector)
亮度探测器通过分析连续视频帧之间的亮度变化来检测流星。当亮度变化超过特定阈值且持续一定的帧数时,它会触发检测事件。
配置参数
亮度探测器有以下配置参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
min_brightness_delta |
f32 | 30.0 | 最小亮度变化阈值 (0-255) |
min_pixel_change |
u32 | 10 | 触发检测的最小像素变化数 |
min_frames |
u32 | 3 | 最小连续帧数要求 |
sensitivity |
f32 | 0.7 | 灵敏度系数 (0.0-1.0) |
id |
String | 自动生成 | 探测器唯一标识 |
参数建议
-
城市光害环境:
min_brightness_delta: 40-50 (更高的阈值减少误报)min_pixel_change: 15-20min_frames: 4-5 (更多帧确认减少闪光和噪声误报)sensitivity: 0.6-0.7
-
郊外黑暗环境:
min_brightness_delta: 20-30 (较低的阈值捕获较暗的流星)min_pixel_change: 8-10min_frames: 2-3 (较少帧确认捕获快速流星)sensitivity: 0.8-0.9
适用场景
亮度探测器适合以下场景:
- 资源受限的设备(如树莓派)
- 需要实时检测的场景
- 检测明亮、快速的流星
- 当系统内存有限,无法进行256帧的堆叠时
CAMS探测器 (CamsDetector)
CAMS探测器基于CAMS (Cameras for Allsky Meteor Surveillance) FTP格式,通过收集256帧视频并生成4种特征图像(maxpixel、avepixel、stdpixel、maxframe)来检测流星。这种方法可以检测出非常暗的流星,但需要更多的计算资源和内存。
配置参数
CAMS探测器有以下配置参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
brightness_threshold |
u8 | 30 | maxpixel图像亮度阈值 (0-255) |
std_to_avg_ratio_threshold |
f32 | 1.5 | stdpixel与avepixel的比率阈值 |
min_pixel_count |
u32 | 10 | 满足条件的最小像素数 |
min_trajectory_length |
u32 | 5 | 最小轨迹长度 |
save_all_feature_images |
bool | false | 是否保存所有特征图像(不仅是检测到的) |
output_dir |
PathBuf | "output" | 输出目录 |
file_prefix |
String | "meteor" | 文件前缀 |
id |
String | 自动生成 | 探测器唯一标识 |
参数建议
-
城市光害环境:
brightness_threshold: 35-45std_to_avg_ratio_threshold: 1.8-2.0 (更高的比率减少光害影响)min_pixel_count: 12-15min_trajectory_length: 6-8
-
郊外黑暗环境:
brightness_threshold: 20-30std_to_avg_ratio_threshold: 1.3-1.5min_pixel_count: 8-10min_trajectory_length: 4-5
适用场景
CAMS探测器适合以下场景:
- 资源充足的设备(如台式机或高性能单板机)
- 科学研究级别的流星检测
- 需要检测暗弱流星的场景
- 对检测准确性要求较高的场景
在配置文件中设置探测器
可以在config.toml文件中配置探测管道及其使用的探测器:
# 基本检测参数(用于兼容老版本)
[detection]
min_brightness_delta = 30.0
min_pixel_change = 10
min_frames = 3
event_buffer_seconds = 10
sensitivity = 0.7
# 探测管道配置
[detection.pipeline]
max_parallel_workers = 4
# 聚合策略:any (任一探测器), all (所有探测器), majority (多数探测器)
aggregation_strategy = "any"
# 亮度探测器配置
[[detection.pipeline.detectors]]
type = "brightness"
min_brightness_delta = 30.0
min_pixel_change = 10
min_frames = 3
sensitivity = 0.7
id = "brightness-main"
# CAMS探测器配置
[[detection.pipeline.detectors]]
type = "cams"
brightness_threshold = 30
std_to_avg_ratio_threshold = 1.5
min_pixel_count = 10
min_trajectory_length = 5
save_all_feature_images = false
output_dir = "output/cams"
file_prefix = "meteor"
id = "cams-main"
在命令行中使用示例程序
示例程序cams_detector_demo提供了一个灵活的命令行界面,可以测试不同的探测器:
# 使用亮度探测器
cargo run --example cams_detector_demo -- \
--input your_video.mp4 \
--detector brightness \
--min-brightness-delta 35.0 \
--min-pixel-change 12 \
--min-frames 4 \
--sensitivity 0.8 \
--display
# 使用CAMS探测器
cargo run --example cams_detector_demo -- \
--input your_video.mp4 \
--detector cams \
--brightness-threshold 30 \
--std-ratio-threshold 1.5 \
--min-pixel-count 10 \
--min-trajectory-length 5 \
--save-all \
--display
# 同时使用两种探测器(并行处理)
cargo run --example cams_detector_demo -- \
--input your_video.mp4 \
--detector both \
--parallel \
--aggregation majority \
--display
如何选择探测器
以下是选择探测器的建议:
-
根据硬件资源:
- 对于资源受限的设备(如树莓派),优先使用亮度探测器
- 对于高性能设备,可以使用CAMS探测器或同时使用两者
-
根据观测环境:
- 在光污染严重的城市环境,亮度探测器可能产生较多误报,CAMS探测器更稳定
- 在暗黑的郊外环境,两种探测器都能有效工作
-
根据探测目标:
- 如果主要关注明亮的火流星,亮度探测器足够
- 如果希望捕获微弱流星或进行科学统计,CAMS探测器更合适
-
最佳做法:
- 如果资源允许,建议同时使用两种探测器并设置为"any"聚合策略提高捕获率
- 如果需要减少误报,可以设置为"all"聚合策略
- 使用"majority"策略在增加更多探测器时提供平衡
检查当前配置
可以查看系统日志了解当前使用的探测器配置:
# 查看日志中的探测器信息
grep "detector" meteor_detect.log
# 运行示例程序时使用更详细的日志级别
RUST_LOG=debug cargo run --example cams_detector_demo -- --input video.mp4
也可以编写一个简单的脚本来检查当前配置:
// 打印当前探测器配置
for detector in pipeline.get_detector_configs() {
match detector {
DetectorConfig::Brightness(params) => {
println!("Brightness detector: {}", params.id);
println!(" min_brightness_delta: {}", params.min_brightness_delta);
println!(" min_pixel_change: {}", params.min_pixel_change);
println!(" min_frames: {}", params.min_frames);
println!(" sensitivity: {}", params.sensitivity);
},
DetectorConfig::Cams(params) => {
println!("CAMS detector: {}", params.id);
println!(" brightness_threshold: {}", params.brightness_threshold);
println!(" std_to_avg_ratio_threshold: {}", params.std_to_avg_ratio_threshold);
println!(" min_pixel_count: {}", params.min_pixel_count);
println!(" min_trajectory_length: {}", params.min_trajectory_length);
}
}
}