第一次
This commit is contained in:
97
fst_data_pipeline/pipelines/volc/bag-copy.sh
Normal file
97
fst_data_pipeline/pipelines/volc/bag-copy.sh
Normal file
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
# 外部必须导出:
|
||||
# INPUT_ROOT WORKFLOW_ID SUB_DIR OUTPUT_ROOT
|
||||
|
||||
INPUT_ROOT="${INPUT_ROOT}/${WORKFLOW_ID}"
|
||||
INPUT_DIR="${INPUT_ROOT}/${SUB_DIR}" # 实际指向 bagdir_splits 上一级
|
||||
OUTPUT_DIR="${OUTPUT_ROOT}" # 通常就是 /nas_perception/.../output/wfxxx
|
||||
|
||||
log(){
|
||||
echo "[$(date '+%F %T')] [$$] $*"
|
||||
}
|
||||
|
||||
#----------------------------------------------------------
|
||||
# 统一封装:目录同步 / 文件拷贝
|
||||
#----------------------------------------------------------
|
||||
sync_dir(){
|
||||
local srcDir="$1" dstDir="$2"
|
||||
if [[ -d ${srcDir} ]]; then
|
||||
log " + $(basename "${srcDir}")/"
|
||||
mkdir -p "${dstDir}"
|
||||
rsync -a --delete "${srcDir}/" "${dstDir}/"
|
||||
fi
|
||||
}
|
||||
|
||||
sync_file(){
|
||||
local srcFile="$1" dstDir="$2"
|
||||
if [[ -f ${srcFile} ]]; then
|
||||
log " + $(basename "${srcFile}")"
|
||||
mkdir -p "${dstDir}"
|
||||
cp -p "${srcFile}" "${dstDir}/"
|
||||
fi
|
||||
}
|
||||
|
||||
#----------------------------------------------------------
|
||||
# 主逻辑
|
||||
#----------------------------------------------------------
|
||||
log "Script started"
|
||||
log "INPUT_DIR = ${INPUT_DIR}"
|
||||
log "OUTPUT_DIR = ${OUTPUT_DIR}"
|
||||
|
||||
[[ -d ${INPUT_DIR} ]] || { log "ERROR: INPUT_DIR not found: ${INPUT_DIR}"; exit 1; }
|
||||
|
||||
while IFS= read -r -d '' src; do
|
||||
# 去掉 split_N 层级,得到纯 bag.dir 名
|
||||
rel="${src#${INPUT_DIR}/*/}"
|
||||
dest="${OUTPUT_DIR}/${rel}/derived/${SUB_DIR}"
|
||||
mkdir -p "${dest}"
|
||||
|
||||
basename_bag=$(basename "$src") # xxx.bag.dir
|
||||
pkgname="${basename_bag%.bag.dir}" # xxx
|
||||
split_name=$(basename "$(dirname "$src")") # split_0 / split_1 / ...
|
||||
truth_root="${INPUT_DIR}/${split_name}"
|
||||
|
||||
log "==================== Processing ${pkgname} ==================="
|
||||
|
||||
# 1. 老 object 重命名同步
|
||||
sync_dir "${src}/object_det_ep20" "${dest}/object_det_al"
|
||||
sync_dir "${src}/object_tracking" "${dest}/object_tracking_al"
|
||||
|
||||
# 2. 目录类:slam + lidar_gt + 新增 6 目录
|
||||
for item in slam_lidar_ground slam_lidar_none_ground \
|
||||
lidar_gt_pandar128_5f_front lidar_gt_pandar128_5f_rear \
|
||||
object_det_ep20_lrgt_front object_det_ep20_lrgt_rear \
|
||||
object_lrgt_filter object_postprocess; do
|
||||
sync_dir "${src}/${item}" "${dest}/${item}"
|
||||
done
|
||||
|
||||
# 3. 文件类
|
||||
for item in bev_image_ground.png ego_motion_slam_lidar.csv; do
|
||||
sync_file "${src}/${item}" "${dest}"
|
||||
done
|
||||
|
||||
# 4. osm & split_json(源在 OUTPUT_ROOT/SUB_DIR/split_N/)
|
||||
osm_src="${truth_root}/osm_out/${pkgname}.osm"
|
||||
if [[ -f ${osm_src} ]]; then
|
||||
log " + ${pkgname}.osm -> input bag.dir"
|
||||
cp -p "${osm_src}" "${src}/"
|
||||
log " + ${pkgname}.osm -> output"
|
||||
cp -p "${src}/${pkgname}.osm" "${dest}/"
|
||||
fi
|
||||
|
||||
split_src="${truth_root}/split_json/${pkgname}"
|
||||
if [[ -d ${split_src} ]]; then
|
||||
log " + split_json/ -> input bag.dir"
|
||||
rsync -a --delete "${split_src}/" "${src}/split_json/"
|
||||
log " + split_json/ -> output"
|
||||
sync_dir "${src}/split_json" "${dest}/split_json"
|
||||
fi
|
||||
|
||||
# 5. 2dseg and occ
|
||||
sync_dir "${src}/${SUB_DIR}" "${dest}"
|
||||
|
||||
done < <(find "${INPUT_DIR}" -mindepth 2 -maxdepth 2 -type d -name '*.bag.dir' -print0)
|
||||
|
||||
log "============================================================"
|
||||
log "All done, success!"
|
||||
Reference in New Issue
Block a user