batch: root_dir: "../VIDEOS/cycle7/kandang-atas" camera_glob: "kandang_*_camera_{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: kandang-atas db_path: db/chicken_counts.db cycle_start_date: "2026-05-22" #day 0 execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid stages: early_cycle: day_min: 0 day_max: 15 detection: conf: 0.1 min_box_area_px: 100 roi: min_overlap_ratio: 0.1 # 0.25 mid_cycle: day_min: 16 day_max: 999 defaults: detection: model_path: models/NUC5070_chicken-detection-model-v26n-300e-best-2026-05-02-NEW.engine # TensorRT engine (RTX 5070) classes: [0] ignored_classes: [1, 2] conf: 0.40 # mild lift vs 0.35; 0.55 was undercounting iou: 0.55 imgsz: 640 device: "0" min_box_area_px: 3000 validate_while_inside: true dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true buffer_above_px: 250 buffer_below_px: 250 show_in_overlay: true tracker: tracker_config_path: configs/trackers/botsort_chicken.yaml persist: true track_buffer: 90 gate: mode: two_line lines_y: [420, 730] direction: bottom_to_up motion: enabled: true axis: vertical forward_sign: 1.0 ema_alpha: 0.2 reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 min_features: 40 # ↓ 60 → less optical flow computation max_corners: 50 # ↓ 80 → fewer corner featuresis stride_frames: 3 # ↑ 2 → motion detection every 3rd frame flow_scale: 0.5 quality_level: 0.01 min_distance: 8 block_radius: 6 overlay: show_boxes: true show_track_trails: false trail_length: 20 show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false count_anchor: [780, 120] inside_box_only: true validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - [255, 255, 0] - [0, 255, 255] display: show_window: false encoder: auto output_bitrate_kbps: 2000 # ↓ 4000 → faster encoding codec_preference: [avc1, mp4v, H264] performance: half: false overlay_buffer_reuse: true inference_stride: 2 stream: enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 save_images: false # ✗ → disable checkpoint JPEG I/O spikes log_to_terminal: true roi: inset_left_px: 60 inset_right_px: 60 inset_top_px: 0 inset_bottom_px: 0 min_overlap_ratio: 0.30 cameras: CC1: camera_num: 1 count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - [250, 330] - [1650, 330] - [1650, 720] - [250, 720] CC2: camera_num: 2 count_anchor: [900, 120] detection: conf: 0.5 # From 0.45 dedupe_radius_px: 32 dedupe_frames: 24 # From 18 roi: points: - [20, 380] - [1880, 380] - [1880, 720] - [20, 720] CC3: camera_num: 3 count_anchor: [900, 120] detection: dedupe_radius_px: 24 dedupe_frames: 16 # From 12 roi: points: - [20, 330] - [1880, 330] - [1880, 720] - [20, 720] CC4: camera_num: 4 count_anchor: [700, 120] roi: points: - [50, 330] - [1450, 330] - [1450, 720] - [50, 720]