89 lines
3.4 KiB
Bash
Executable File
89 lines
3.4 KiB
Bash
Executable File
#!/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."
|