adjust debug

This commit is contained in:
Alberto-Audrix committed 2026-07-24 11:42:18 +07:00
1 parent f7ef038def
commit a7ce970f78
5 files changed
+86 -47

No files matched your search

+9 -1
View File
@@ -179,7 +179,15 @@ ZONE_LEFT_X2=420
ZONE_LEFT_Y2=900
```
Enable `DEBUG_TRACKING=true` temporarily to log zone entries in the journal.
Enable `DEBUG_TRACKING=true` temporarily for verbose inherit / dup / cooldown logs.
Each successful count always prints a Frigate-style line to the journal:
```text
Total karung di kandang_bawah_feeder_kanan: 5
```
Set `FEEDER_LEFT_NAME` / `FEEDER_RIGHT_NAME` (and `OBJECT_LABEL`) in `.env` to match your site.
---
+8 -2
View File
@@ -92,11 +92,17 @@ SITE_NAME=ZenAi
# Camera / location identifier shown in HUD and stored in DB
CAMERA_NAME=ZenAi
# Label used for batch grouping in the database
OBJECT_LABEL=object
OBJECT_LABEL=karung
# Class name for the counted object (must match model class order)
CLASS_OBJECT=object
CLASS_OBJECT=karung
# Model class ID for the object being counted (default 0)
OBJECT_CLASS_ID=0
# Feeder names printed on each count, e.g.
# "Total karung di kandang_bawah_feeder_kanan: 5"
FEEDER_LEFT_NAME=kandang_bawah_feeder_kiri
FEEDER_RIGHT_NAME=kandang_bawah_feeder_kanan
# Verbose tracking debug (inherit / dup / cooldown / per-frame dets)
DEBUG_TRACKING=false
# --- Feeder zones (left / right) ---
# Rectangular zones mark the left and right sack feeders.
+60 -44
View File
@@ -36,6 +36,11 @@ MODEL_PATH = os.getenv("MODEL_PATH", "/opt/jetson-counter/yolo11n.rknn")
CAMERA_NAME = os.getenv("CAMERA_NAME", "CC1")
OBJECT_LABEL = os.getenv("OBJECT_LABEL", "object")
CLASS_OBJECT = os.getenv("CLASS_OBJECT", "object")
# Human-readable feeder names used in count logs, e.g.
# "Total karung di kandang_bawah_feeder_kanan: 5"
FEEDER_LEFT_NAME = os.getenv("FEEDER_LEFT_NAME", f"{CAMERA_NAME}_feeder_kiri")
FEEDER_RIGHT_NAME = os.getenv("FEEDER_RIGHT_NAME", f"{CAMERA_NAME}_feeder_kanan")
DEBUG_TRACKING = os.getenv("DEBUG_TRACKING", "").lower() == "true"
# Left feeder zone (fractions of frame width/height). Absolute pixel overrides
# win when set (ZONE_LEFT_X1 … ZONE_LEFT_Y2).
@@ -733,6 +738,12 @@ def feeder_cooldown_sec(feeder):
return ZONE_COOLDOWN_RIGHT_SEC
def feeder_display_name(feeder):
if feeder == "left":
return FEEDER_LEFT_NAME
return FEEDER_RIGHT_NAME
def feeder_in_cooldown(feeder, mono, last_count_mono):
"""True if this feeder is still inside its post-count cooldown window."""
cooldown = feeder_cooldown_sec(feeder)
@@ -1397,40 +1408,40 @@ def run():
object_boxes_xyxy, object_scores
)
if os.getenv("DEBUG_TRACKING", "").lower() == "true":
if len(object_boxes_xyxy) > 0:
scores_str = (
f" scores: {object_scores.round(3).tolist()}"
if len(object_scores) > 0
else ""
if DEBUG_TRACKING and len(object_boxes_xyxy) > 0:
scores_str = (
f" scores: {object_scores.round(3).tolist()}"
if len(object_scores) > 0
else ""
)
tracks_str = (
f" det->track: {dict(object_det_to_track)}"
if object_det_to_track
else ""
)
zone_str = ""
if object_zone_state:
left_ids = sorted(
tid
for tid, st in object_zone_state.items()
if st.get("side") == "left"
)
tracks_str = (
f" det->track: {dict(object_det_to_track)}"
if object_det_to_track
else ""
)
zone_str = ""
if object_zone_state:
left_ids = sorted(
tid
for tid, st in object_zone_state.items()
if st.get("side") == "left"
)
right_ids = sorted(
tid
for tid, st in object_zone_state.items()
if st.get("side") == "right"
)
if left_ids:
zone_str += f" left_counted: {left_ids}"
if right_ids:
zone_str += f" right_counted: {right_ids}"
print(
f"[DEBUG F{frame_idx}] dets={len(object_boxes_xyxy)} "
f"tracks={len(object_track_map)} "
f"zone_L={zone_left} zone_R={zone_right}{scores_str}"
f"{tracks_str}{zone_str}"
right_ids = sorted(
tid
for tid, st in object_zone_state.items()
if st.get("side") == "right"
)
if left_ids:
zone_str += f" left_counted: {left_ids}"
if right_ids:
zone_str += f" right_counted: {right_ids}"
print(
f"[DEBUG F{frame_idx}] dets={len(object_boxes_xyxy)} "
f"tracks={len(object_track_map)} "
f"zone_L={zone_left} zone_R={zone_right}{scores_str}"
f"{tracks_str}{zone_str}",
flush=True,
)
# --- zone entry detection only on DETECTED objects this frame ---
# (tracker still updates every frame to preserve IDs, but we do NOT
@@ -1457,13 +1468,14 @@ def run():
object_zone_state[tid] = _copy_zone_state(
object_zone_state[src_tid]
)
if os.getenv("DEBUG_TRACKING", "").lower() == "true":
if DEBUG_TRACKING:
src_st = object_zone_state.get(tid, {})
print(
f"[DEBUG F{frame_idx}] INHERIT prev for new tid={tid} "
f"from tid={src_tid} ({inherited[0]:.1f},{inherited[1]:.1f})"
f" counted={src_st.get('counted', False)}"
f" side={src_st.get('side')}"
f" side={src_st.get('side')}",
flush=True,
)
if tid not in object_zone_state:
@@ -1506,10 +1518,11 @@ def run():
if is_duplicate_cross(recent, cx, cy, frame_idx):
st["counted"] = True
st["side"] = feeder
if os.getenv("DEBUG_TRACKING", "").lower() == "true":
if DEBUG_TRACKING:
print(
f"[DEBUG F{frame_idx}] DUP ZONE IGNORED: tid={tid} "
f"cx={cx:.1f} cy={cy:.1f} feeder={feeder}"
f"cx={cx:.1f} cy={cy:.1f} feeder={feeder}",
flush=True,
)
object_tracked[tid] = (cx, cy, mono)
continue
@@ -1517,22 +1530,17 @@ def run():
if feeder_in_cooldown(feeder, mono, last_count_mono):
st["counted"] = True
st["side"] = feeder
if os.getenv("DEBUG_TRACKING", "").lower() == "true":
if DEBUG_TRACKING:
cool = feeder_cooldown_sec(feeder)
elapsed = mono - (last_count_mono.get(feeder) or mono)
print(
f"[DEBUG F{frame_idx}] COOLDOWN IGNORED: tid={tid} "
f"feeder={feeder} elapsed={elapsed:.2f}s / {cool}s"
f"feeder={feeder} elapsed={elapsed:.2f}s / {cool}s",
flush=True,
)
object_tracked[tid] = (cx, cy, mono)
continue
if os.getenv("DEBUG_TRACKING", "").lower() == "true":
print(
f"[DEBUG F{frame_idx}] ZONE ENTER: tid={tid} "
f"cx={cx:.1f} cy={cy:.1f} feeder={feeder}"
)
recent.append((frame_idx, cx, cy))
st["counted"] = True
st["side"] = feeder
@@ -1540,9 +1548,17 @@ def run():
if feeder == "left":
counter_left += 1
count_left_pulse = COUNT_PULSE_FRAMES
feeder_total = counter_left
else:
counter_right += 1
count_right_pulse = COUNT_PULSE_FRAMES
feeder_total = counter_right
# Frigate-style count log, e.g.
# "Total karung di kandang_bawah_feeder_kanan: 5"
print(
f"Total {OBJECT_LABEL} di {feeder_display_name(feeder)}: {feeder_total}",
flush=True,
)
store.record_zone_entry(tid, feeder)
if cross_logger:
cross_logger.write_row(
+8
View File
@@ -44,6 +44,14 @@ OBJECT_LABEL=karung
CLASS_OBJECT=karung
OBJECT_CLASS_ID=0
# Feeder names used in journal count logs:
# Total karung di kandang_bawah_feeder_kanan: 5
FEEDER_LEFT_NAME=kandang_bawah_feeder_kiri
FEEDER_RIGHT_NAME=kandang_bawah_feeder_kanan
# Verbose tracking debug (inherit / dup / cooldown / per-frame dets)
DEBUG_TRACKING=false
# --- Feeder zones (left / right) ---
# Rectangular zones as fractions of frame width/height.
# Absolute pixel overrides: ZONE_LEFT_X1, ZONE_LEFT_Y1, ZONE_LEFT_X2, ZONE_LEFT_Y2
+1
View File
@@ -12,6 +12,7 @@ Group=root
WorkingDirectory=/opt/zenai-ktc-python
EnvironmentFile=/opt/zenai-ktc-python/.env
Environment=PYTHONNOUSERSITE=1
Environment=PYTHONUNBUFFERED=1
Environment=PATH=/opt/zenai-ktc-python/venv/bin:/usr/local/bin:/usr/bin:/bin
ExecStart=/opt/zenai-ktc-python/venv/bin/python counter_live_rknn.py