Files
yolov26_3d/tools/temporal_analysis/visualize_tracking_batch.sh

89 lines
3.4 KiB
Bash
Raw Normal View History

2026-06-24 09:35:46 +08:00
#!/bin/bash
# 批量将跟踪结果可视化到视频帧上。
#
# 流程(每个 case
# 直接读取 camera4.bin将 merge_tracking.json 叠加到每帧,保存可视化图片目录或 mp4。
# 无需保存中间帧,节省磁盘空间。
#
# 目录约定(与 test_merged_model.sh 保持一致):
# CASES_ROOT/.../{case_id}/{sub}/sigmastar.1/camera4.bin ← 原始视频
# RESULTS_ROOT/MODEL_NAME/{run_name}/merge_tracking.json ← 跟踪结果
# RESULTS_ROOT/MODEL_NAME/{run_name}/tracking_vis.mp4 ← 可视化输出SAVE_VIDEO=true
# RESULTS_ROOT/MODEL_NAME/{run_name}/tracking_vis/ ← 可视化图片SAVE_VIDEO=false
# Set PYTHONPATH to project root for module imports
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
export PYTHONPATH="${PROJECT_ROOT}:${PYTHONPATH}"
# -----------------------------------------------------------------------
# 配置区:与 test_merged_model.sh / track_objects.sh 保持一致
# -----------------------------------------------------------------------
CASES_ROOT="/data1/dongying/Mono3d/G1M3/cases_coding"
RESULTS_ROOT="/data1/dongying/Mono3d/G1M3/cases_coding_results"
MODEL_NAME="torchscript_python_300w_newdata-cncap-v2"
# 可视化选项
SAVE_VIDEO=false # true=保存 mp4false=保存图片目录
VIS_FPS=25 # 输出视频帧率
VIS_CLASS_ID="" # 过滤类别,例如 "--class-id 0";留空则显示全部类别
# -----------------------------------------------------------------------
# 批量循环:与 test_merged_model.sh 相同的路径推导逻辑
# -----------------------------------------------------------------------
while IFS= read -r -d '' camera4_bin; do
sigmastar_dir=$(dirname "$camera4_bin")
rel_path="${sigmastar_dir#"$CASES_ROOT"/}"
rel_path="${rel_path%/sigmastar.1}"
run_name=$(echo "$rel_path" | tr '/ ' '__')
case_dir="${RESULTS_ROOT}/${MODEL_NAME}/${run_name}"
tracking_file="${case_dir}/merge_tracking.json"
# 跟踪结果不存在则跳过(该 case 尚未跑 track_objects.sh
if [[ ! -f "$tracking_file" ]]; then
echo "[SKIP] No merge_tracking.json: $case_dir"
continue
fi
echo ""
echo "=========================================="
echo "Case : $run_name"
echo "Video : $camera4_bin"
echo "Track : $tracking_file"
echo "=========================================="
# ------------------------------------------------------------------
# 直接读取视频并可视化(不保存中间帧)
# ------------------------------------------------------------------
if [[ "$SAVE_VIDEO" == true ]]; then
output_arg="${case_dir}/tracking_vis.mp4"
save_video_flag="--save-video"
echo "[INFO] Visualizing → $output_arg"
else
output_arg="${case_dir}/tracking_vis"
save_video_flag=""
echo "[INFO] Visualizing → $output_arg/"
fi
python "${PROJECT_ROOT}/tools/temporal_analysis/visualize_tracking_boxes.py" \
--tracking "$tracking_file" \
--images "$camera4_bin" \
--output "$output_arg" \
--fps "$VIS_FPS" \
$save_video_flag \
$VIS_CLASS_ID
if [[ $? -ne 0 ]]; then
echo "[ERROR] Visualization failed for case: $run_name"
continue
fi
echo "[DONE] $run_name"
done < <(find "$CASES_ROOT" -name "camera4.bin" -print0 | sort -z)
echo ""
echo "All cases processed."