89 lines
3.4 KiB
Bash
89 lines
3.4 KiB
Bash
|
|
#!/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=保存 mp4;false=保存图片目录
|
|||
|
|
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."
|