diff --git a/configs/K1-L1.yaml b/configs/K1-L1.yaml index 14671b0..ccf1ea0 100644 --- a/configs/K1-L1.yaml +++ b/configs/K1-L1.yaml @@ -1,14 +1,15 @@ batch: - root_dir: ../VIDEOS/cycle7/K1-L1 - camera_glob: '*cam{num}_*.mp4' + root_dir: "../VIDEOS/cycle7/K1-L1" + camera_glob: "*cam{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: K1-L1 db_path: db/chicken_counts.db - cycle_start_date: '2026-05-22' - execution_mode: parallel_processes + cycle_start_date: "2026-05-22" #day 0 + execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid + stages: early_cycle: day_min: 0 @@ -17,25 +18,23 @@ stages: conf: 0.1 min_box_area_px: 100 roi: - min_overlap_ratio: 0.1 + 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 - classes: - - 0 - ignored_classes: - - 1 - - 2 - conf: 0.4 + 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' + device: "0" min_box_area_px: 3000 validate_while_inside: true - dedupe_radius_px: 0 + dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true @@ -48,9 +47,7 @@ defaults: track_buffer: 90 gate: mode: two_line - lines_y: - - 420 - - 730 + lines_y: [420, 730] direction: bottom_to_up motion: enabled: true @@ -60,9 +57,9 @@ defaults: reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 - min_features: 40 - max_corners: 50 - stride_frames: 3 + 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 @@ -71,116 +68,84 @@ defaults: show_boxes: true show_track_trails: false trail_length: 20 - show_center_marker: false + show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] inside_box_only: true - validated_only: true + validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - - - 255 - - 255 - - 0 - - - 0 - - 255 - - 255 + - [255, 255, 0] + - [0, 255, 255] display: show_window: false encoder: auto - output_bitrate_kbps: 2000 - codec_preference: - - avc1 - - mp4v - - H264 + 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 + enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 - save_images: false + 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.3 + min_overlap_ratio: 0.30 + cameras: CC1: camera_num: 1 - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - - - 250 - - 330 - - - 1650 - - 330 - - - 1650 - - 720 - - - 250 - - 720 + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] CC2: camera_num: 2 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: - conf: 0.5 + conf: 0.5 # From 0.45 dedupe_radius_px: 32 - dedupe_frames: 24 + dedupe_frames: 24 # From 18 roi: points: - - - 20 - - 380 - - - 1880 - - 380 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] CC3: camera_num: 3 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: dedupe_radius_px: 24 - dedupe_frames: 16 + dedupe_frames: 16 # From 12 roi: points: - - - 20 - - 330 - - - 1880 - - 330 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 330] + - [1880, 330] + - [1880, 720] + - [20, 720] CC4: camera_num: 4 - count_anchor: - - 700 - - 120 + count_anchor: [700, 120] roi: points: - - - 50 - - 330 - - - 1450 - - 330 - - - 1450 - - 720 - - - 50 - - 720 + - [50, 330] + - [1450, 330] + - [1450, 720] + - [50, 720] diff --git a/configs/K1-L2.yaml b/configs/K1-L2.yaml index 0bf636e..68049de 100644 --- a/configs/K1-L2.yaml +++ b/configs/K1-L2.yaml @@ -1,14 +1,15 @@ batch: - root_dir: ../VIDEOS/cycle7/K1-L2 - camera_glob: '*cam{num}_*.mp4' + root_dir: "../VIDEOS/cycle7/K1-L2" + camera_glob: "*cam{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: K1-L2 db_path: db/chicken_counts.db - cycle_start_date: '2026-05-22' - execution_mode: parallel_processes + cycle_start_date: "2026-05-22" #day 0 + execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid + stages: early_cycle: day_min: 0 @@ -17,25 +18,23 @@ stages: conf: 0.1 min_box_area_px: 100 roi: - min_overlap_ratio: 0.1 + 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 - classes: - - 0 - ignored_classes: - - 1 - - 2 - conf: 0.4 + 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' + device: "0" min_box_area_px: 3000 validate_while_inside: true - dedupe_radius_px: 0 + dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true @@ -48,9 +47,7 @@ defaults: track_buffer: 90 gate: mode: two_line - lines_y: - - 420 - - 730 + lines_y: [420, 730] direction: bottom_to_up motion: enabled: true @@ -60,9 +57,9 @@ defaults: reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 - min_features: 40 - max_corners: 50 - stride_frames: 3 + 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 @@ -71,116 +68,84 @@ defaults: show_boxes: true show_track_trails: false trail_length: 20 - show_center_marker: false + show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] inside_box_only: true - validated_only: true + validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - - - 255 - - 255 - - 0 - - - 0 - - 255 - - 255 + - [255, 255, 0] + - [0, 255, 255] display: show_window: false encoder: auto - output_bitrate_kbps: 2000 - codec_preference: - - avc1 - - mp4v - - H264 + 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 + enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 - save_images: false + 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.3 + min_overlap_ratio: 0.30 + cameras: CC1: camera_num: 1 - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - - - 250 - - 330 - - - 1650 - - 330 - - - 1650 - - 720 - - - 250 - - 720 + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] CC2: camera_num: 2 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: - conf: 0.5 + conf: 0.5 # From 0.45 dedupe_radius_px: 32 - dedupe_frames: 24 + dedupe_frames: 24 # From 18 roi: points: - - - 20 - - 380 - - - 1880 - - 380 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] CC3: camera_num: 3 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: dedupe_radius_px: 24 - dedupe_frames: 16 + dedupe_frames: 16 # From 12 roi: points: - - - 20 - - 330 - - - 1880 - - 330 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 330] + - [1880, 330] + - [1880, 720] + - [20, 720] CC4: camera_num: 4 - count_anchor: - - 700 - - 120 + count_anchor: [700, 120] roi: points: - - - 50 - - 330 - - - 1450 - - 330 - - - 1450 - - 720 - - - 50 - - 720 + - [50, 330] + - [1450, 330] + - [1450, 720] + - [50, 720] diff --git a/configs/K2-L1.yaml b/configs/K2-L1.yaml index b230da8..fddfed8 100644 --- a/configs/K2-L1.yaml +++ b/configs/K2-L1.yaml @@ -1,14 +1,15 @@ batch: - root_dir: ../VIDEOS/cycle7/K2-L1 - camera_glob: '*cam{num}_*.mp4' + root_dir: "../VIDEOS/cycle7/K2-L1" + camera_glob: "*cam{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: K2-L1 db_path: db/chicken_counts.db - cycle_start_date: '2026-05-22' - execution_mode: parallel_processes + cycle_start_date: "2026-05-22" #day 0 + execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid + stages: early_cycle: day_min: 0 @@ -17,25 +18,23 @@ stages: conf: 0.1 min_box_area_px: 100 roi: - min_overlap_ratio: 0.1 + 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 - classes: - - 0 - ignored_classes: - - 1 - - 2 - conf: 0.4 + 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' + device: "0" min_box_area_px: 3000 validate_while_inside: true - dedupe_radius_px: 0 + dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true @@ -48,9 +47,7 @@ defaults: track_buffer: 90 gate: mode: two_line - lines_y: - - 420 - - 730 + lines_y: [420, 730] direction: bottom_to_up motion: enabled: true @@ -60,9 +57,9 @@ defaults: reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 - min_features: 40 - max_corners: 50 - stride_frames: 3 + 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 @@ -71,116 +68,84 @@ defaults: show_boxes: true show_track_trails: false trail_length: 20 - show_center_marker: false + show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] inside_box_only: true - validated_only: true + validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - - - 255 - - 255 - - 0 - - - 0 - - 255 - - 255 + - [255, 255, 0] + - [0, 255, 255] display: show_window: false encoder: auto - output_bitrate_kbps: 2000 - codec_preference: - - avc1 - - mp4v - - H264 + 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 + enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 - save_images: false + 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.3 + min_overlap_ratio: 0.30 + cameras: CC1: camera_num: 1 - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - - - 250 - - 330 - - - 1650 - - 330 - - - 1650 - - 720 - - - 250 - - 720 + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] CC2: camera_num: 2 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: - conf: 0.5 + conf: 0.5 # From 0.45 dedupe_radius_px: 32 - dedupe_frames: 24 + dedupe_frames: 24 # From 18 roi: points: - - - 20 - - 380 - - - 1880 - - 380 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] CC3: camera_num: 3 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: dedupe_radius_px: 24 - dedupe_frames: 16 + dedupe_frames: 16 # From 12 roi: points: - - - 20 - - 330 - - - 1880 - - 330 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 330] + - [1880, 330] + - [1880, 720] + - [20, 720] CC4: camera_num: 4 - count_anchor: - - 700 - - 120 + count_anchor: [700, 120] roi: points: - - - 50 - - 330 - - - 1450 - - 330 - - - 1450 - - 720 - - - 50 - - 720 + - [50, 330] + - [1450, 330] + - [1450, 720] + - [50, 720] diff --git a/configs/K2-L2.yaml b/configs/K2-L2.yaml index 9050820..829a91b 100644 --- a/configs/K2-L2.yaml +++ b/configs/K2-L2.yaml @@ -1,14 +1,15 @@ batch: - root_dir: ../VIDEOS/cycle7/K2-L2 - camera_glob: '*cam{num}_*.mp4' + root_dir: "../VIDEOS/cycle7/K2-L2" + camera_glob: "*cam{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: K2-L2 db_path: db/chicken_counts.db - cycle_start_date: '2026-05-22' - execution_mode: parallel_processes + cycle_start_date: "2026-05-22" #day 0 + execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid + stages: early_cycle: day_min: 0 @@ -17,25 +18,23 @@ stages: conf: 0.1 min_box_area_px: 100 roi: - min_overlap_ratio: 0.1 + 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 - classes: - - 0 - ignored_classes: - - 1 - - 2 - conf: 0.4 + 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' + device: "0" min_box_area_px: 3000 validate_while_inside: true - dedupe_radius_px: 0 + dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true @@ -48,9 +47,7 @@ defaults: track_buffer: 90 gate: mode: two_line - lines_y: - - 420 - - 730 + lines_y: [420, 730] direction: bottom_to_up motion: enabled: true @@ -60,9 +57,9 @@ defaults: reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 - min_features: 40 - max_corners: 50 - stride_frames: 3 + 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 @@ -71,116 +68,84 @@ defaults: show_boxes: true show_track_trails: false trail_length: 20 - show_center_marker: false + show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] inside_box_only: true - validated_only: true + validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - - - 255 - - 255 - - 0 - - - 0 - - 255 - - 255 + - [255, 255, 0] + - [0, 255, 255] display: show_window: false encoder: auto - output_bitrate_kbps: 2000 - codec_preference: - - avc1 - - mp4v - - H264 + 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 + enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 - save_images: false + 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.3 + min_overlap_ratio: 0.30 + cameras: CC1: camera_num: 1 - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - - - 250 - - 330 - - - 1650 - - 330 - - - 1650 - - 720 - - - 250 - - 720 + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] CC2: camera_num: 2 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: - conf: 0.5 + conf: 0.5 # From 0.45 dedupe_radius_px: 32 - dedupe_frames: 24 + dedupe_frames: 24 # From 18 roi: points: - - - 20 - - 380 - - - 1880 - - 380 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] CC3: camera_num: 3 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: dedupe_radius_px: 24 - dedupe_frames: 16 + dedupe_frames: 16 # From 12 roi: points: - - - 20 - - 330 - - - 1880 - - 330 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 330] + - [1880, 330] + - [1880, 720] + - [20, 720] CC4: camera_num: 4 - count_anchor: - - 700 - - 120 + count_anchor: [700, 120] roi: points: - - - 50 - - 330 - - - 1450 - - 330 - - - 1450 - - 720 - - - 50 - - 720 + - [50, 330] + - [1450, 330] + - [1450, 720] + - [50, 720] diff --git a/configs/K3-L1.yaml b/configs/K3-L1.yaml index 1129db2..fb637ac 100644 --- a/configs/K3-L1.yaml +++ b/configs/K3-L1.yaml @@ -1,14 +1,15 @@ batch: - root_dir: ../VIDEOS/cycle7/K3-L1 - camera_glob: '*cam{num}_*.mp4' + root_dir: "../VIDEOS/cycle7/K3-L1" + camera_glob: "*cam{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: K3-L1 db_path: db/chicken_counts.db - cycle_start_date: '2026-05-22' - execution_mode: parallel_processes + cycle_start_date: "2026-05-22" #day 0 + execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid + stages: early_cycle: day_min: 0 @@ -17,25 +18,23 @@ stages: conf: 0.1 min_box_area_px: 100 roi: - min_overlap_ratio: 0.1 + 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 - classes: - - 0 - ignored_classes: - - 1 - - 2 - conf: 0.4 + 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' + device: "0" min_box_area_px: 3000 validate_while_inside: true - dedupe_radius_px: 0 + dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true @@ -48,9 +47,7 @@ defaults: track_buffer: 90 gate: mode: two_line - lines_y: - - 420 - - 730 + lines_y: [420, 730] direction: bottom_to_up motion: enabled: true @@ -60,9 +57,9 @@ defaults: reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 - min_features: 40 - max_corners: 50 - stride_frames: 3 + 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 @@ -71,116 +68,84 @@ defaults: show_boxes: true show_track_trails: false trail_length: 20 - show_center_marker: false + show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] inside_box_only: true - validated_only: true + validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - - - 255 - - 255 - - 0 - - - 0 - - 255 - - 255 + - [255, 255, 0] + - [0, 255, 255] display: show_window: false encoder: auto - output_bitrate_kbps: 2000 - codec_preference: - - avc1 - - mp4v - - H264 + 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 + enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 - save_images: false + 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.3 + min_overlap_ratio: 0.30 + cameras: CC1: camera_num: 1 - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - - - 250 - - 330 - - - 1650 - - 330 - - - 1650 - - 720 - - - 250 - - 720 + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] CC2: camera_num: 2 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: - conf: 0.5 + conf: 0.5 # From 0.45 dedupe_radius_px: 32 - dedupe_frames: 24 + dedupe_frames: 24 # From 18 roi: points: - - - 20 - - 380 - - - 1880 - - 380 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] CC3: camera_num: 3 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: dedupe_radius_px: 24 - dedupe_frames: 16 + dedupe_frames: 16 # From 12 roi: points: - - - 20 - - 330 - - - 1880 - - 330 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 330] + - [1880, 330] + - [1880, 720] + - [20, 720] CC4: camera_num: 4 - count_anchor: - - 700 - - 120 + count_anchor: [700, 120] roi: points: - - - 50 - - 330 - - - 1450 - - 330 - - - 1450 - - 720 - - - 50 - - 720 + - [50, 330] + - [1450, 330] + - [1450, 720] + - [50, 720] diff --git a/configs/K3-L2.yaml b/configs/K3-L2.yaml index 271a4f5..26e4e44 100644 --- a/configs/K3-L2.yaml +++ b/configs/K3-L2.yaml @@ -1,14 +1,15 @@ batch: - root_dir: ../VIDEOS/cycle7/K3-L2 - camera_glob: '*cam{num}_*.mp4' + root_dir: "../VIDEOS/cycle7/K3-L2" + camera_glob: "*cam{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: K3-L2 db_path: db/chicken_counts.db - cycle_start_date: '2026-05-22' - execution_mode: parallel_processes + cycle_start_date: "2026-05-22" #day 0 + execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid + stages: early_cycle: day_min: 0 @@ -17,25 +18,23 @@ stages: conf: 0.1 min_box_area_px: 100 roi: - min_overlap_ratio: 0.1 + 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 - classes: - - 0 - ignored_classes: - - 1 - - 2 - conf: 0.4 + 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' + device: "0" min_box_area_px: 3000 validate_while_inside: true - dedupe_radius_px: 0 + dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true @@ -48,9 +47,7 @@ defaults: track_buffer: 90 gate: mode: two_line - lines_y: - - 420 - - 730 + lines_y: [420, 730] direction: bottom_to_up motion: enabled: true @@ -60,9 +57,9 @@ defaults: reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 - min_features: 40 - max_corners: 50 - stride_frames: 3 + 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 @@ -71,116 +68,84 @@ defaults: show_boxes: true show_track_trails: false trail_length: 20 - show_center_marker: false + show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] inside_box_only: true - validated_only: true + validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - - - 255 - - 255 - - 0 - - - 0 - - 255 - - 255 + - [255, 255, 0] + - [0, 255, 255] display: show_window: false encoder: auto - output_bitrate_kbps: 2000 - codec_preference: - - avc1 - - mp4v - - H264 + 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 + enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 - save_images: false + 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.3 + min_overlap_ratio: 0.30 + cameras: CC1: camera_num: 1 - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - - - 250 - - 330 - - - 1650 - - 330 - - - 1650 - - 720 - - - 250 - - 720 + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] CC2: camera_num: 2 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: - conf: 0.5 + conf: 0.5 # From 0.45 dedupe_radius_px: 32 - dedupe_frames: 24 + dedupe_frames: 24 # From 18 roi: points: - - - 20 - - 380 - - - 1880 - - 380 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] CC3: camera_num: 3 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: dedupe_radius_px: 24 - dedupe_frames: 16 + dedupe_frames: 16 # From 12 roi: points: - - - 20 - - 330 - - - 1880 - - 330 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 330] + - [1880, 330] + - [1880, 720] + - [20, 720] CC4: camera_num: 4 - count_anchor: - - 700 - - 120 + count_anchor: [700, 120] roi: points: - - - 50 - - 330 - - - 1450 - - 330 - - - 1450 - - 720 - - - 50 - - 720 + - [50, 330] + - [1450, 330] + - [1450, 720] + - [50, 720] diff --git a/configs/K4-L1.yaml b/configs/K4-L1.yaml index 68a5b0b..b43c4cb 100644 --- a/configs/K4-L1.yaml +++ b/configs/K4-L1.yaml @@ -1,14 +1,15 @@ batch: - root_dir: ../VIDEOS/cycle7/K4-L1 - camera_glob: '*cam{num}_*.mp4' + root_dir: "../VIDEOS/cycle7/K4-L1" + camera_glob: "*cam{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: K4-L1 db_path: db/chicken_counts.db - cycle_start_date: '2026-05-22' - execution_mode: parallel_processes + cycle_start_date: "2026-05-22" #day 0 + execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid + stages: early_cycle: day_min: 0 @@ -17,25 +18,23 @@ stages: conf: 0.1 min_box_area_px: 100 roi: - min_overlap_ratio: 0.1 + 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 - classes: - - 0 - ignored_classes: - - 1 - - 2 - conf: 0.4 + 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' + device: "0" min_box_area_px: 3000 validate_while_inside: true - dedupe_radius_px: 0 + dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true @@ -48,9 +47,7 @@ defaults: track_buffer: 90 gate: mode: two_line - lines_y: - - 420 - - 730 + lines_y: [420, 730] direction: bottom_to_up motion: enabled: true @@ -60,9 +57,9 @@ defaults: reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 - min_features: 40 - max_corners: 50 - stride_frames: 3 + 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 @@ -71,116 +68,84 @@ defaults: show_boxes: true show_track_trails: false trail_length: 20 - show_center_marker: false + show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] inside_box_only: true - validated_only: true + validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - - - 255 - - 255 - - 0 - - - 0 - - 255 - - 255 + - [255, 255, 0] + - [0, 255, 255] display: show_window: false encoder: auto - output_bitrate_kbps: 2000 - codec_preference: - - avc1 - - mp4v - - H264 + 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 + enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 - save_images: false + 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.3 + min_overlap_ratio: 0.30 + cameras: CC1: camera_num: 1 - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - - - 250 - - 330 - - - 1650 - - 330 - - - 1650 - - 720 - - - 250 - - 720 + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] CC2: camera_num: 2 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: - conf: 0.5 + conf: 0.5 # From 0.45 dedupe_radius_px: 32 - dedupe_frames: 24 + dedupe_frames: 24 # From 18 roi: points: - - - 20 - - 380 - - - 1880 - - 380 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] CC3: camera_num: 3 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: dedupe_radius_px: 24 - dedupe_frames: 16 + dedupe_frames: 16 # From 12 roi: points: - - - 20 - - 330 - - - 1880 - - 330 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 330] + - [1880, 330] + - [1880, 720] + - [20, 720] CC4: camera_num: 4 - count_anchor: - - 700 - - 120 + count_anchor: [700, 120] roi: points: - - - 50 - - 330 - - - 1450 - - 330 - - - 1450 - - 720 - - - 50 - - 720 + - [50, 330] + - [1450, 330] + - [1450, 720] + - [50, 720] diff --git a/configs/K4-L2.yaml b/configs/K4-L2.yaml index d9725f7..832911e 100644 --- a/configs/K4-L2.yaml +++ b/configs/K4-L2.yaml @@ -1,14 +1,15 @@ batch: - root_dir: ../VIDEOS/cycle7/K4-L2 - camera_glob: '*cam{num}_*.mp4' + root_dir: "../VIDEOS/cycle7/K4-L2" + camera_glob: "*cam{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: K4-L2 db_path: db/chicken_counts.db - cycle_start_date: '2026-05-22' - execution_mode: parallel_processes + cycle_start_date: "2026-05-22" #day 0 + execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid + stages: early_cycle: day_min: 0 @@ -17,25 +18,23 @@ stages: conf: 0.1 min_box_area_px: 100 roi: - min_overlap_ratio: 0.1 + 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 - classes: - - 0 - ignored_classes: - - 1 - - 2 - conf: 0.4 + 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' + device: "0" min_box_area_px: 3000 validate_while_inside: true - dedupe_radius_px: 0 + dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true @@ -48,9 +47,7 @@ defaults: track_buffer: 90 gate: mode: two_line - lines_y: - - 420 - - 730 + lines_y: [420, 730] direction: bottom_to_up motion: enabled: true @@ -60,9 +57,9 @@ defaults: reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 - min_features: 40 - max_corners: 50 - stride_frames: 3 + 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 @@ -71,116 +68,84 @@ defaults: show_boxes: true show_track_trails: false trail_length: 20 - show_center_marker: false + show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] inside_box_only: true - validated_only: true + validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - - - 255 - - 255 - - 0 - - - 0 - - 255 - - 255 + - [255, 255, 0] + - [0, 255, 255] display: show_window: false encoder: auto - output_bitrate_kbps: 2000 - codec_preference: - - avc1 - - mp4v - - H264 + 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 + enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 - save_images: false + 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.3 + min_overlap_ratio: 0.30 + cameras: CC1: camera_num: 1 - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - - - 250 - - 330 - - - 1650 - - 330 - - - 1650 - - 720 - - - 250 - - 720 + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] CC2: camera_num: 2 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: - conf: 0.5 + conf: 0.5 # From 0.45 dedupe_radius_px: 32 - dedupe_frames: 24 + dedupe_frames: 24 # From 18 roi: points: - - - 20 - - 380 - - - 1880 - - 380 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] CC3: camera_num: 3 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: dedupe_radius_px: 24 - dedupe_frames: 16 + dedupe_frames: 16 # From 12 roi: points: - - - 20 - - 330 - - - 1880 - - 330 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 330] + - [1880, 330] + - [1880, 720] + - [20, 720] CC4: camera_num: 4 - count_anchor: - - 700 - - 120 + count_anchor: [700, 120] roi: points: - - - 50 - - 330 - - - 1450 - - 330 - - - 1450 - - 720 - - - 50 - - 720 + - [50, 330] + - [1450, 330] + - [1450, 720] + - [50, 720] diff --git a/configs/K5-L1.yaml b/configs/K5-L1.yaml index 22a170b..f1c5223 100644 --- a/configs/K5-L1.yaml +++ b/configs/K5-L1.yaml @@ -1,14 +1,15 @@ batch: - root_dir: ../VIDEOS/cycle7/K5-L1 - camera_glob: '*cam{num}_*.mp4' + root_dir: "../VIDEOS/cycle7/K5-L1" + camera_glob: "*cam{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: K5-L1 db_path: db/chicken_counts.db - cycle_start_date: '2026-05-22' - execution_mode: parallel_processes + cycle_start_date: "2026-05-22" #day 0 + execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid + stages: early_cycle: day_min: 0 @@ -17,25 +18,23 @@ stages: conf: 0.1 min_box_area_px: 100 roi: - min_overlap_ratio: 0.1 + 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 - classes: - - 0 - ignored_classes: - - 1 - - 2 - conf: 0.4 + 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' + device: "0" min_box_area_px: 3000 validate_while_inside: true - dedupe_radius_px: 0 + dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true @@ -48,9 +47,7 @@ defaults: track_buffer: 90 gate: mode: two_line - lines_y: - - 420 - - 730 + lines_y: [420, 730] direction: bottom_to_up motion: enabled: true @@ -60,9 +57,9 @@ defaults: reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 - min_features: 40 - max_corners: 50 - stride_frames: 3 + 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 @@ -71,116 +68,84 @@ defaults: show_boxes: true show_track_trails: false trail_length: 20 - show_center_marker: false + show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] inside_box_only: true - validated_only: true + validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - - - 255 - - 255 - - 0 - - - 0 - - 255 - - 255 + - [255, 255, 0] + - [0, 255, 255] display: show_window: false encoder: auto - output_bitrate_kbps: 2000 - codec_preference: - - avc1 - - mp4v - - H264 + 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 + enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 - save_images: false + 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.3 + min_overlap_ratio: 0.30 + cameras: CC1: camera_num: 1 - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - - - 250 - - 330 - - - 1650 - - 330 - - - 1650 - - 720 - - - 250 - - 720 + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] CC2: camera_num: 2 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: - conf: 0.5 + conf: 0.5 # From 0.45 dedupe_radius_px: 32 - dedupe_frames: 24 + dedupe_frames: 24 # From 18 roi: points: - - - 20 - - 380 - - - 1880 - - 380 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] CC3: camera_num: 3 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: dedupe_radius_px: 24 - dedupe_frames: 16 + dedupe_frames: 16 # From 12 roi: points: - - - 20 - - 330 - - - 1880 - - 330 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 330] + - [1880, 330] + - [1880, 720] + - [20, 720] CC4: camera_num: 4 - count_anchor: - - 700 - - 120 + count_anchor: [700, 120] roi: points: - - - 50 - - 330 - - - 1450 - - 330 - - - 1450 - - 720 - - - 50 - - 720 + - [50, 330] + - [1450, 330] + - [1450, 720] + - [50, 720] diff --git a/configs/K5-L2.yaml b/configs/K5-L2.yaml index 5f55301..37c7569 100644 --- a/configs/K5-L2.yaml +++ b/configs/K5-L2.yaml @@ -1,14 +1,15 @@ batch: - root_dir: ../VIDEOS/cycle7/K5-L2 - camera_glob: '*cam{num}_*.mp4' + root_dir: "../VIDEOS/cycle7/K5-L2" + camera_glob: "*cam{num}_*.mp4" output_subdir: output compress_max_mb: 200 delete_intermediate: false checkpoint_every_n_frames: 3000 location: K5-L2 db_path: db/chicken_counts.db - cycle_start_date: '2026-05-22' - execution_mode: parallel_processes + cycle_start_date: "2026-05-22" #day 0 + execution_mode: parallel_processes # parallel_processes (default) | tensor_batching | hybrid + stages: early_cycle: day_min: 0 @@ -17,25 +18,23 @@ stages: conf: 0.1 min_box_area_px: 100 roi: - min_overlap_ratio: 0.1 + 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 - classes: - - 0 - ignored_classes: - - 1 - - 2 - conf: 0.4 + 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' + device: "0" min_box_area_px: 3000 validate_while_inside: true - dedupe_radius_px: 0 + dedupe_radius_px: 0 # off for CC1/CC4; CC2/CC3 enable below dedupe_frames: 12 detection_zone: enabled: true @@ -48,9 +47,7 @@ defaults: track_buffer: 90 gate: mode: two_line - lines_y: - - 420 - - 730 + lines_y: [420, 730] direction: bottom_to_up motion: enabled: true @@ -60,9 +57,9 @@ defaults: reverse_enter_threshold: -1.5 reverse_exit_threshold: -0.5 debounce_frames: 12 - min_features: 40 - max_corners: 50 - stride_frames: 3 + 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 @@ -71,116 +68,84 @@ defaults: show_boxes: true show_track_trails: false trail_length: 20 - show_center_marker: false + show_center_marker: false # ✗ → save 1 circle per chicken show_track_ring: false - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] inside_box_only: true - validated_only: true + validated_only: true # NEW → only draw counted chickens pending_blink: true pending_colors: - - - 255 - - 255 - - 0 - - - 0 - - 255 - - 255 + - [255, 255, 0] + - [0, 255, 255] display: show_window: false encoder: auto - output_bitrate_kbps: 2000 - codec_preference: - - avc1 - - mp4v - - H264 + 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 + enabled: true # required for dashboard live feed shm_dir: /dev/shm interval_frames: 5 feedback: enabled: true every_n_frames: 3000 - save_images: false + 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.3 + min_overlap_ratio: 0.30 + cameras: CC1: camera_num: 1 - count_anchor: - - 780 - - 120 + count_anchor: [780, 120] detection: min_box_area_px: 2500 conf: 0.35 roi: points: - - - 250 - - 330 - - - 1650 - - 330 - - - 1650 - - 720 - - - 250 - - 720 + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] CC2: camera_num: 2 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: - conf: 0.5 + conf: 0.5 # From 0.45 dedupe_radius_px: 32 - dedupe_frames: 24 + dedupe_frames: 24 # From 18 roi: points: - - - 20 - - 380 - - - 1880 - - 380 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] CC3: camera_num: 3 - count_anchor: - - 900 - - 120 + count_anchor: [900, 120] detection: dedupe_radius_px: 24 - dedupe_frames: 16 + dedupe_frames: 16 # From 12 roi: points: - - - 20 - - 330 - - - 1880 - - 330 - - - 1880 - - 720 - - - 20 - - 720 + - [20, 330] + - [1880, 330] + - [1880, 720] + - [20, 720] CC4: camera_num: 4 - count_anchor: - - 700 - - 120 + count_anchor: [700, 120] roi: points: - - - 50 - - 330 - - - 1450 - - 330 - - - 1450 - - 720 - - - 50 - - 720 + - [50, 330] + - [1450, 330] + - [1450, 720] + - [50, 720]