adjust debug
This commit is contained in:
1 parent
f7ef038def
commit
a7ce970f78
5 files changed
+86
-47
No files matched your search
@@ -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
@@ -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
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user