#!/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 "================================================================="