diff --git a/configs/cycle7_batch.yaml.2 b/configs/cycle7_batch.yaml.2 new file mode 100755 index 0000000..c11cb45 --- /dev/null +++ b/configs/cycle7_batch.yaml.2 @@ -0,0 +1,94 @@ +batch: + root_dir: /media/jetson/DATA/.Codes/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 + +defaults: + detection: + model_path: /media/jetson/DATA/.Codes/chicken-counting-sukawarna-det/chicken-detection-model-v26n-300e-best-2026-05-02-NEW.engine + classes: [0] + ignored_classes: [1, 2] + conf: 0.35 + iou: 0.55 + imgsz: 640 + device: "0" + min_box_area_px: 3000 + validate_while_inside: true + detection_zone: + enabled: true + buffer_above_px: 250 + buffer_below_px: 250 + show_in_overlay: true + tracker: + tracker_config_path: /media/jetson/DATA/.Codes/chicken-counting-sukawarna-det/configs/trackers/botsort_chicken.yaml + persist: true + track_buffer: 75 + 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: 60 + max_corners: 80 + stride_frames: 2 + 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: true + show_track_ring: false + count_anchor: [780, 120] + inside_box_only: true + pending_blink: true + pending_colors: + - [255, 255, 0] + - [0, 255, 255] + display: + show_window: false + encoder: auto + output_bitrate_kbps: 4000 + codec_preference: [avc1, mp4v, H264] + performance: + half: false + overlay_buffer_reuse: true + inference_stride: 2 + stream: + enabled: true + shm_dir: /dev/shm + interval_frames: 5 + feedback: + enabled: true + every_n_frames: 3000 + save_images: true + 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: + CC2: + camera_num: 2 + count_anchor: [900, 120] + roi: + points: + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] diff --git a/configs/cycle7_batch.yaml.3 b/configs/cycle7_batch.yaml.3 new file mode 100755 index 0000000..d50284f --- /dev/null +++ b/configs/cycle7_batch.yaml.3 @@ -0,0 +1,121 @@ +batch: + root_dir: /media/jetson/DATA/.Codes/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 + +defaults: + detection: + model_path: /media/jetson/DATA/.Codes/chicken-counting-sukawarna-det/chicken-detection-model-v26n-300e-best-2026-05-02-NEW.engine + classes: [0] + ignored_classes: [1, 2] + conf: 0.35 + iou: 0.55 + imgsz: 640 + device: "0" + min_box_area_px: 3000 + validate_while_inside: true + detection_zone: + enabled: true + buffer_above_px: 250 + buffer_below_px: 250 + show_in_overlay: true + tracker: + tracker_config_path: /media/jetson/DATA/.Codes/chicken-counting-sukawarna-det/configs/trackers/botsort_chicken.yaml + persist: true + track_buffer: 75 + 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: 60 + max_corners: 80 + stride_frames: 2 + 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: true + show_track_ring: false + count_anchor: [780, 120] + inside_box_only: true + pending_blink: true + pending_colors: + - [255, 255, 0] + - [0, 255, 255] + display: + show_window: false + encoder: auto + output_bitrate_kbps: 4000 + codec_preference: [avc1, mp4v, H264] + performance: + half: false + overlay_buffer_reuse: true + inference_stride: 2 + stream: + enabled: true + shm_dir: /dev/shm + interval_frames: 5 + feedback: + enabled: true + every_n_frames: 3000 + save_images: true + 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] + roi: + points: + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] + CC2: + camera_num: 2 + count_anchor: [900, 120] + roi: + points: + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] + CC3: + camera_num: 3 + count_anchor: [900, 120] + 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] diff --git a/configs/cycle7_batch.yaml.4 b/configs/cycle7_batch.yaml.4 new file mode 100755 index 0000000..d50284f --- /dev/null +++ b/configs/cycle7_batch.yaml.4 @@ -0,0 +1,121 @@ +batch: + root_dir: /media/jetson/DATA/.Codes/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 + +defaults: + detection: + model_path: /media/jetson/DATA/.Codes/chicken-counting-sukawarna-det/chicken-detection-model-v26n-300e-best-2026-05-02-NEW.engine + classes: [0] + ignored_classes: [1, 2] + conf: 0.35 + iou: 0.55 + imgsz: 640 + device: "0" + min_box_area_px: 3000 + validate_while_inside: true + detection_zone: + enabled: true + buffer_above_px: 250 + buffer_below_px: 250 + show_in_overlay: true + tracker: + tracker_config_path: /media/jetson/DATA/.Codes/chicken-counting-sukawarna-det/configs/trackers/botsort_chicken.yaml + persist: true + track_buffer: 75 + 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: 60 + max_corners: 80 + stride_frames: 2 + 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: true + show_track_ring: false + count_anchor: [780, 120] + inside_box_only: true + pending_blink: true + pending_colors: + - [255, 255, 0] + - [0, 255, 255] + display: + show_window: false + encoder: auto + output_bitrate_kbps: 4000 + codec_preference: [avc1, mp4v, H264] + performance: + half: false + overlay_buffer_reuse: true + inference_stride: 2 + stream: + enabled: true + shm_dir: /dev/shm + interval_frames: 5 + feedback: + enabled: true + every_n_frames: 3000 + save_images: true + 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] + roi: + points: + - [250, 330] + - [1650, 330] + - [1650, 720] + - [250, 720] + CC2: + camera_num: 2 + count_anchor: [900, 120] + roi: + points: + - [20, 380] + - [1880, 380] + - [1880, 720] + - [20, 720] + CC3: + camera_num: 3 + count_anchor: [900, 120] + 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] diff --git a/src/chicken_counter/batch_runner.py b/src/chicken_counter/batch_runner.py index dac07f4..0c97459 100755 --- a/src/chicken_counter/batch_runner.py +++ b/src/chicken_counter/batch_runner.py @@ -87,6 +87,7 @@ def run_daily_batch(settings: BatchSettings, date: str | None = None, *, verbose persist_batch_reports(run_date, camera_results, output_dir) if no_video: + persist_batch_reports(run_date, camera_results, output_dir) report = build_batch_report(run_date, camera_results, output_dir=output_dir) print( f"[batch] complete for {run_date}: total_entered_sum={report.total_entered_sum} " diff --git a/src/chicken_counter/tracking.py b/src/chicken_counter/tracking.py index db55a7f..ebc8750 100755 --- a/src/chicken_counter/tracking.py +++ b/src/chicken_counter/tracking.py @@ -47,6 +47,7 @@ class DetectionTracker: offset_x, offset_y = x1, y1 track_kwargs: dict = { + "task": "detect", "source": source, "persist": self.config.tracker.persist, "tracker": self.tracker_config_path,