forked from zakaria/chicken-counting-sukawarna-det
75 lines
2.7 KiB
Bash
Executable File
75 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Master runner for 5-coop / 10-floor daily processing
|
|
set -u
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
export PYTHONPATH="$SCRIPT_DIR/src"
|
|
|
|
if [ -f "$SCRIPT_DIR/venv/bin/python" ]; then
|
|
PYTHON="$SCRIPT_DIR/venv/bin/python"
|
|
else
|
|
PYTHON="python3"
|
|
fi
|
|
|
|
DATE="${1:-$(date +%Y-%m-%d)}"
|
|
FILTER="${2:-}" # Optional filter like 'K1', 'K2', 'K1-L3', or leave empty for all
|
|
MODE="${3:-parallel_processes}"
|
|
|
|
# Auto-discover all configured floors in configs/floor_config/ (sorted naturally)
|
|
CONFIGS=()
|
|
for cfg in $(ls -1 "$SCRIPT_DIR/configs/floor_config/"*.yaml 2>/dev/null | sort -V); do
|
|
base_name="$(basename "$cfg" .yaml)"
|
|
if [ -n "$FILTER" ] && [[ "$base_name" != *"$FILTER"* ]]; then
|
|
continue
|
|
fi
|
|
CONFIGS+=("configs/floor_config/$(basename "$cfg")")
|
|
done
|
|
|
|
# Startup check: Ensure sibling VIDEOS directory exists
|
|
VIDEOS_BASE="$SCRIPT_DIR/../VIDEOS"
|
|
if [ ! -d "$VIDEOS_BASE" ]; then
|
|
echo "[setup] 📁 Sibling directory '$VIDEOS_BASE' not found; creating directory skeleton..."
|
|
mkdir -p "$VIDEOS_BASE/cycle7"
|
|
fi
|
|
|
|
echo "================================================================="
|
|
echo " Starting Multi-Floor Batch Processing for Date: $DATE"
|
|
if [ -n "$FILTER" ]; then
|
|
echo " Filter Applied: $FILTER"
|
|
fi
|
|
echo " Discovered Floors (${#CONFIGS[@]} total): ${CONFIGS[*]}"
|
|
echo " Execution Mode: $MODE"
|
|
echo "================================================================="
|
|
|
|
SUCCESS_COUNT=0
|
|
SKIPPED_COUNT=0
|
|
|
|
for config in "${CONFIGS[@]}"; do
|
|
if [ -f "$SCRIPT_DIR/$config" ]; then
|
|
floor_name="$(basename "$config" .yaml)"
|
|
video_day_dir="$SCRIPT_DIR/../VIDEOS/cycle7/$floor_name/$DATE"
|
|
|
|
# If videos don't exist for this floor/date on this machine, skip cleanly
|
|
if [ ! -d "$video_day_dir" ] && [ ! -d "$SCRIPT_DIR/../VIDEOS/cycle7/$floor_name" ]; then
|
|
echo "⏭️ [SKIPPED] $floor_name: No video directory found at ../VIDEOS/cycle7/$floor_name/$DATE"
|
|
SKIPPED_COUNT=$((SKIPPED_COUNT + 1))
|
|
continue
|
|
fi
|
|
|
|
echo ""
|
|
echo ">>> [PROCESSING] Location Config: $config <<<"
|
|
if $PYTHON -m chicken_counter.cli batch --config "$config" --date "$DATE" --mode "$MODE"; then
|
|
SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
|
|
else
|
|
echo "⚠️ [SKIPPED / ERROR] $config for date $DATE (video not found or error occurred)."
|
|
SKIPPED_COUNT=$((SKIPPED_COUNT + 1))
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
echo "================================================================="
|
|
echo " Multi-Floor Batch Summary: $SUCCESS_COUNT completed, $SKIPPED_COUNT skipped."
|
|
echo " Database: db/chicken_counts.db"
|
|
echo "================================================================="
|