docs: generalize Day 0 DOC arrival as headcount count only with cycle-specific weigh-in

This commit is contained in:
andrew committed 2026-08-24 11:15:39 +07:00
1 parent ff7a679207
commit 19af5d1e41
5 files changed
+7 -7

No files matched your search

+1 -1
View File
@@ -182,7 +182,7 @@ CREATE TABLE batch_runs (
);
```
> **Note**: Weight counting and growth curves start at **Cycle Day 1** (Day 0 = DOC arrival baseline 42.0g). Daily aggregations feed into the central Audrix `CHICKEN_COUNTING` (`cc_id`) and `CHICKEN_WEIGHT` (`cw_id`) tables.
> **Note**: Weight counting and growth curves start at **Cycle Day 1** (Day 0 = DOC arrival headcount count only, as each cycle has a distinct DOC arrival weight). Daily aggregations feed into the central Audrix `CHICKEN_COUNTING` (`cc_id`) and `CHICKEN_WEIGHT` (`cw_id`) tables.
Data is inserted automatically by the batch runner when `location` and `db_path` are configured in the batch YAML, or manually via:
+2 -2
View File
@@ -85,7 +85,7 @@ erDiagram
int total_days "NOT NULL"
date start_date "NOT NULL (Day 0)"
date end_date "NOT NULL"
int doc_in_weight "NOT NULL (e.g. 42g standard)"
int doc_in_weight "NOT NULL (Initial DOC weight for this cycle)"
int doc_in_count "NOT NULL (Stocking inventory)"
varchar status "30 NOT NULL"
timestamp created_at "NOT NULL"
@@ -170,7 +170,7 @@ erDiagram
int cycle_id FK "References CYCLES"
date date "NOT NULL"
int age "NOT NULL (Cycle Day: 1+)"
int doc_weight "NOT NULL (Starting DOC baseline, e.g. 42g)"
int doc_weight "NOT NULL (Cycle-specific initial DOC weight)"
float average_weight "NOT NULL (predicted_weight_g from edge)"
int chicken_count "NOT NULL (n_weight_samples)"
float uniformity "NOT NULL (Flock weight uniformity %)"
+1 -1
View File
@@ -256,7 +256,7 @@ The pipeline supports ONNX (`.onnx`), PyTorch (`.pt`), and hardware-accelerated
The pipeline dynamically adjusts detection, counting, and weight estimation based on flock age:
- **Day 0 (`cycle_start_date`)**: Day-Old Chicks (DOC) arrival date (default: `"2026-05-22"`).
- **Day 0 Rule**: **Counting ONLY** (initial stocking headcount inventory). Weight estimation is bypassed because Day 0 chicks have a fixed baseline ($42.0\text{ g}$).
- **Day 0 Rule**: **Counting ONLY** (initial stocking headcount inventory). Vision weight estimation is bypassed on Day 0 as each cycle has its own specific DOC arrival weigh-in.
- **Day 1+ Rule**: **Counting AND Weight Estimation** runs daily across all camera videos.
- **`early_cycle` (Days 0–15)**: Automatically applies high-sensitivity detection thresholds (`conf: 0.12`, `min_box_area_px: 200`, `min_overlap_ratio: 0.25`) for small fast-moving chicks.
- **`mid_cycle` (Days 16+)**: Preserves standard tuned per-camera defaults (`conf: 0.35–0.50`, `min_box_area_px: 2500–3000`).
+1 -1
View File
@@ -348,7 +348,7 @@ All SQLite database rows and JSON outputs will automatically be stamped with `"s
The edge chicken counting pipeline aggregates physical metric measurements and predicts chicken weights during daily counting runs. Full architecture and schema mapping are documented in [`ERD.md`](ERD.md).
### Day 0 vs. Day 1+ Lifecycle Rule
- **Day 0 (`cycle_start_date`)**: Day-Old Chicks (DOC) arrival date (standard baseline $42.0\text{ g}$). **Counting ONLY** to establish starting inventory headcount.
- **Day 0 (`cycle_start_date`)**: Day-Old Chicks (DOC) arrival date. **Counting ONLY** to establish starting inventory headcount. Vision weight estimation begins at Cycle Day 1 (as each cycle has its own specific DOC arrival weigh-in).
- **Day 1+**: **Counting AND Weight Estimation** runs daily across all floor camera feeds.
### Data Architecture & Storage Files
+2 -2
View File
@@ -411,7 +411,7 @@ def generate_excel_report(db_path, output_excel_path, target_date=None):
ws_growth["A1"] = "Flock Weight & Growth Trajectory Analytics (Cycle 7)"
ws_growth["A1"].font = Font(name=font_family, size=14, bold=True, color="1F4E78")
ws_growth["A2"] = "Growth curve tracking starts at Cycle Day 1 (Day 0: DOC Arrival Baseline 42.0g)"
ws_growth["A2"] = "Growth curve tracking starts at Cycle Day 1 (Day 0: DOC Arrival Headcount Only)"
ws_growth["A2"].font = Font(name=font_family, size=10, italic=True, color="595959")
growth_headers = [
@@ -575,7 +575,7 @@ def generate_excel_report(db_path, output_excel_path, target_date=None):
("Default Min Box Area (px)", "3000"),
("Tracker Architecture", "BoT-SORT (persist=True, track_buffer=90)"),
("Gate Counting Mode", "two_line (lines_y: [420, 730], direction: bottom_to_up)"),
("Weight Counting Start Rule", "Cycle Day 1+ (Day 0 = DOC arrival baseline 42.0g)"),
("Weight Counting Start Rule", "Cycle Day 1+ (Day 0 = DOC arrival counting only)"),
("Camera Metric Calibration", "px_per_cm: CC1=19.5, CC2=20.2, CC3=19.8, CC4=19.2 (Default: 20.0)"),
("Outlier Rejection Model", "FatChicken MAD Z-score (Day <=10: z<=3.0, Day 11-24: z<=2.5, Day >24: z<=2.0)"),
("Weight Growth Baseline", "Gompertz Ross 308 / Cobb 500 (W_max=4650g, k=0.076, t_i=25.8)"),