单目3D初始代码
This commit is contained in:
260
tools/feishu_project/run_issue_data_visualize_tracking.sh
Executable file
260
tools/feishu_project/run_issue_data_visualize_tracking.sh
Executable file
@@ -0,0 +1,260 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
PROJECT_ROOT=$(cd "${SCRIPT_DIR}/../.." && pwd)
|
||||
export PYTHONPATH="${PROJECT_ROOT}:${PYTHONPATH:-}"
|
||||
|
||||
RESULTS_ROOT=${RESULTS_ROOT:-/data1/dongying/Mono3d/G1Q3/feishu_project/inference_issue_data}
|
||||
DOWNLOAD_ROOT=${DOWNLOAD_ROOT:-/data1/dongying/Mono3d/G1Q3/feishu_project/downloaded_issue_data}
|
||||
OUTPUT_ROOT=${OUTPUT_ROOT:-}
|
||||
OUTPUT_DIR_NAME=${OUTPUT_DIR_NAME:-tracking_vis_raw}
|
||||
PYTHON_BIN=${PYTHON_BIN:-/deeplearning_team/ydong/dongying/miniconda/envs/dev/bin/python}
|
||||
VISUALIZE_SCRIPT=${VISUALIZE_SCRIPT:-"${PROJECT_ROOT}/tools/temporal_analysis/visualize_tracking_boxes.py"}
|
||||
TRACKING_JSON_NAME=${TRACKING_JSON_NAME:-merge.json}
|
||||
VIS_MAX_FRAMES=${VIS_MAX_FRAMES:-}
|
||||
VIS_CLASS_ID=${VIS_CLASS_ID:-}
|
||||
VIS_TRACK_IDS=${VIS_TRACK_IDS:-}
|
||||
VIS_SHOW_TRAJECTORY=${VIS_SHOW_TRAJECTORY:-0}
|
||||
|
||||
TARGET_PATH=""
|
||||
ISSUE_IDS=()
|
||||
|
||||
while (($# > 0)); do
|
||||
case "$1" in
|
||||
--issue-id)
|
||||
if (($# < 2)); then
|
||||
echo "Error: --issue-id requires a value" >&2
|
||||
exit 1
|
||||
fi
|
||||
ISSUE_IDS+=("$2")
|
||||
shift 2
|
||||
;;
|
||||
--issue-id=*)
|
||||
ISSUE_IDS+=("${1#*=}")
|
||||
shift
|
||||
;;
|
||||
-*)
|
||||
echo "Error: unsupported option: $1" >&2
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
if [[ -n "${TARGET_PATH}" ]]; then
|
||||
echo "Error: multiple target paths provided: ${TARGET_PATH} and $1" >&2
|
||||
exit 1
|
||||
fi
|
||||
TARGET_PATH="$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ -z "${TARGET_PATH}" ]]; then
|
||||
TARGET_PATH="${RESULTS_ROOT}"
|
||||
fi
|
||||
|
||||
if [[ ! -e "${TARGET_PATH}" ]]; then
|
||||
echo "Error: target path does not exist: ${TARGET_PATH}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
resolve_abs_path() {
|
||||
local target_path="$1"
|
||||
if [[ -d "${target_path}" ]]; then
|
||||
(
|
||||
cd "${target_path}"
|
||||
pwd -P
|
||||
)
|
||||
return 0
|
||||
fi
|
||||
|
||||
local parent_dir
|
||||
parent_dir=$(
|
||||
cd "$(dirname "${target_path}")"
|
||||
pwd -P
|
||||
)
|
||||
printf '%s/%s\n' "${parent_dir}" "$(basename "${target_path}")"
|
||||
}
|
||||
|
||||
RESULTS_ROOT_ABS="$(resolve_abs_path "${RESULTS_ROOT}")"
|
||||
DOWNLOAD_ROOT_ABS="$(resolve_abs_path "${DOWNLOAD_ROOT}")"
|
||||
|
||||
is_case_dir() {
|
||||
local dir_path="$1"
|
||||
[[ -d "${dir_path}" ]] && [[ -f "${dir_path}/${TRACKING_JSON_NAME}" ]]
|
||||
}
|
||||
|
||||
derive_output_dir() {
|
||||
local case_dir="$1"
|
||||
local case_abs
|
||||
local rel_case_dir
|
||||
|
||||
case_abs="$(resolve_abs_path "${case_dir}")"
|
||||
if [[ -n "${OUTPUT_ROOT}" ]]; then
|
||||
if [[ "${case_abs}" == "${RESULTS_ROOT_ABS}" ]]; then
|
||||
printf '%s\n' "${OUTPUT_ROOT}"
|
||||
return 0
|
||||
fi
|
||||
if [[ "${case_abs}" == "${RESULTS_ROOT_ABS}"/* ]]; then
|
||||
rel_case_dir="${case_abs#"${RESULTS_ROOT_ABS}/"}"
|
||||
printf '%s/%s\n' "${OUTPUT_ROOT%/}" "${rel_case_dir}"
|
||||
return 0
|
||||
fi
|
||||
printf '%s/%s\n' "${OUTPUT_ROOT%/}" "$(basename "${case_abs}")"
|
||||
return 0
|
||||
fi
|
||||
|
||||
printf '%s/%s\n' "${case_abs}" "${OUTPUT_DIR_NAME}"
|
||||
}
|
||||
|
||||
derive_raw_video_path() {
|
||||
local case_dir="$1"
|
||||
local case_abs
|
||||
local rel_case_dir
|
||||
|
||||
case_abs="$(resolve_abs_path "${case_dir}")"
|
||||
if [[ "${case_abs}" != "${RESULTS_ROOT_ABS}" && "${case_abs}" != "${RESULTS_ROOT_ABS}"/* ]]; then
|
||||
echo "Error: case directory is not under RESULTS_ROOT: ${case_abs}" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ "${case_abs}" == "${RESULTS_ROOT_ABS}" ]]; then
|
||||
echo "Error: cannot derive a raw video path from the results root itself" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
rel_case_dir="${case_abs#"${RESULTS_ROOT_ABS}/"}"
|
||||
printf '%s/%s/sigmastar.1/camera4.bin\n' "${DOWNLOAD_ROOT_ABS}" "${rel_case_dir}"
|
||||
}
|
||||
|
||||
run_single_case() {
|
||||
local case_dir="$1"
|
||||
local tracking_json="${case_dir}/${TRACKING_JSON_NAME}"
|
||||
local raw_video_path
|
||||
local output_dir
|
||||
local cmd
|
||||
|
||||
if [[ ! -f "${tracking_json}" ]]; then
|
||||
echo "[ERROR] ${TRACKING_JSON_NAME} not found in case directory: ${case_dir}" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
raw_video_path="$(derive_raw_video_path "${case_dir}")"
|
||||
if [[ ! -f "${raw_video_path}" ]]; then
|
||||
echo "[ERROR] camera4.bin not found for case: ${case_dir}" >&2
|
||||
echo " expected: ${raw_video_path}" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
output_dir="$(derive_output_dir "${case_dir}")"
|
||||
|
||||
cmd=(
|
||||
"${PYTHON_BIN}" "${VISUALIZE_SCRIPT}"
|
||||
--tracking "${tracking_json}"
|
||||
--images "${raw_video_path}"
|
||||
--output "${output_dir}"
|
||||
--align-by-frame-id
|
||||
)
|
||||
|
||||
if [[ -n "${VIS_MAX_FRAMES}" ]]; then
|
||||
cmd+=(--max-frames "${VIS_MAX_FRAMES}")
|
||||
fi
|
||||
|
||||
if [[ -n "${VIS_CLASS_ID}" ]]; then
|
||||
cmd+=(--class-id "${VIS_CLASS_ID}")
|
||||
fi
|
||||
|
||||
if [[ -n "${VIS_TRACK_IDS}" ]]; then
|
||||
# shellcheck disable=SC2206
|
||||
local track_id_arr=(${VIS_TRACK_IDS})
|
||||
cmd+=(--track-ids "${track_id_arr[@]}")
|
||||
fi
|
||||
|
||||
if [[ "${VIS_SHOW_TRAJECTORY}" == "1" ]]; then
|
||||
cmd+=(--show-trajectory)
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "######################################################################"
|
||||
echo "# Feishu issue-data raw-image visualization"
|
||||
echo "######################################################################"
|
||||
echo "Case : ${case_dir}"
|
||||
echo "Track : ${tracking_json}"
|
||||
echo "Video : ${raw_video_path}"
|
||||
echo "Output : ${output_dir}"
|
||||
|
||||
"${cmd[@]}"
|
||||
}
|
||||
|
||||
run_batch_root() {
|
||||
local batch_root="$1"
|
||||
local total_cases=0
|
||||
local success_cases=0
|
||||
local failed_cases=0
|
||||
|
||||
while IFS= read -r -d '' tracking_json; do
|
||||
local case_dir
|
||||
case_dir="$(dirname "${tracking_json}")"
|
||||
((total_cases += 1))
|
||||
|
||||
if run_single_case "${case_dir}"; then
|
||||
((success_cases += 1))
|
||||
else
|
||||
((failed_cases += 1))
|
||||
printf '[FAIL] case=%s\n' "${case_dir}" >&2
|
||||
fi
|
||||
done < <(
|
||||
find "${batch_root}" -type f -name "${TRACKING_JSON_NAME}" -print0 | sort -z
|
||||
)
|
||||
|
||||
if [[ "${total_cases}" -eq 0 ]]; then
|
||||
echo "[ERROR] No ${TRACKING_JSON_NAME} files were found under: ${batch_root}" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
printf '[DONE] cases=%d success=%d failed=%d\n' \
|
||||
"${total_cases}" "${success_cases}" "${failed_cases}"
|
||||
|
||||
[[ "${failed_cases}" -eq 0 ]]
|
||||
}
|
||||
|
||||
if [[ "${#ISSUE_IDS[@]}" -eq 0 ]]; then
|
||||
if is_case_dir "${TARGET_PATH}"; then
|
||||
run_single_case "${TARGET_PATH}"
|
||||
elif [[ -d "${TARGET_PATH}" ]]; then
|
||||
run_batch_root "${TARGET_PATH}"
|
||||
else
|
||||
echo "Error: unsupported target path: ${TARGET_PATH}" >&2
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
total_issues=0
|
||||
success_issues=0
|
||||
failed_issues=0
|
||||
|
||||
for issue_id in "${ISSUE_IDS[@]}"; do
|
||||
issue_root="${TARGET_PATH}/issue_${issue_id}"
|
||||
((total_issues += 1))
|
||||
|
||||
if [[ ! -d "${issue_root}" ]]; then
|
||||
echo "[FAIL] issue_${issue_id}: not found under ${TARGET_PATH}" >&2
|
||||
((failed_issues += 1))
|
||||
continue
|
||||
fi
|
||||
|
||||
if run_batch_root "${issue_root}"; then
|
||||
((success_issues += 1))
|
||||
else
|
||||
((failed_issues += 1))
|
||||
echo "[FAIL] issue_${issue_id}: visualization failed" >&2
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
printf '[DONE] issues=%d success=%d failed=%d\n' \
|
||||
"${total_issues}" "${success_issues}" "${failed_issues}"
|
||||
|
||||
[[ "${failed_issues}" -eq 0 ]]
|
||||
Reference in New Issue
Block a user