Skip to content

Releases: wloonis/animal-counter

v1.2.0 — Standalone counting core, GPLv3, first public release

Choose a tag to compare

@wloonis wloonis released this 12 Aug 13:56
d082282

First public release of the standalone counting core, after the Android/companion layer was extracted into wloonis/animal-counter-companion at the monorepo's v1.1.0 split point.

Highlights

  • Counting core only: OC-SORT tracking + custom anti-ID-switch guards, counting line-crossing, TensorRT inference, single-node K3s countingapp pod, Jetson system/K3s/RTC setup, validate_on_jetson.sh reference-video validation.
  • License: GNU GPLv3 (canonical LICENSE + SPDX/copyright headers across the Python sources, Ansible, k3s templates, Dockerfile, shell scripts).
  • Repo made public; GitHub Sponsors enabled via .github/FUNDING.yml (button activates once the wloonis Sponsors profile is approved).
  • Branch protection on main (PR-only, linear history) + interaction limits + PR creation cap to prevent spam.

No counting-logic change since v1.1.0

The split is structural (companion/Android moved out); the counting decision code is unchanged. Validation: standard reference-video run still green.

v1.0.0 — Première version stable

Choose a tag to compare

@wloonis wloonis released this 10 Jul 12:58

v1.0.0 — Première version stable

Compteur de porcs bidirectionnel en temps réel sur NVIDIA Jetson Orin Nano (8 Go "Super"), déployé sur un K3s single-node via Ansible.

Ce que fait le projet

  • Détection YOLO → TensorRT (640×480, 30 fps) sur caméra fixe.
  • Suivi OC-SORT + garde anti-ID-switch sur-mesure (REID-SUPPRESS, recovery bidirectionnel, garde miroir, résurrection).
  • Ligne de comptage verticale (offset 10%) ; porcs comptés droite→gauche (crossed LEFT = +1, crossed RIGHT = −1), compteur net bidirectionnel affiché en overlay.
  • Enregistrement automatique des clips : tmp-counting-* → tocompress-counting-* → counting-* (compression ffmpeg + trim de la queue sans détection), avec rétention roulante (cronvideo).
  • Interface opérateur (écran local) + filebrowser pour récupérer les clips.

Stack

  • K3s (single-node, runtime Docker) + Ansible (playbooks system/ pour k3s/réseau/hotspot, app/ pour le déploiement) + templates k3s/templates/*.j2.
  • Déploiement direct par kubectl apply des templates rendus.
  • Image countingapp:local (Dockerfile build-time pip install ; serve = python3 src/main.py).

Validation

  • 4/4 PASS, tolérance 0 sur le set vidéo prioritaire (validation/expected_counts.json).
  • Counts de référence : 12 / 30 / 42 / 35.

Ce que contient v1.0.0

  • Pipeline de comptage OC-SORT + gardes business (REID-SUPPRESS, recovery, miroir, résurrection).
  • Fix BL-54 (#40) : plus aucun orphan tmp-counting-*.mp4 — finalize idempotent _finalize_recording() + safety-net post-boucle sur tous les chemins de sortie (fin de source FILE, timeout 2 min CAMERA delay_last_class, SIGTERM/redémarrage pod/arrêt web UI via stop()). PR #42.
  • cronvideo : compression + trim delay_last_class (single source of truth), rétention roulante des clips.
  • Docs complètes (quickstart, deployment, configuration, counting pipeline, troubleshooting, reset, development workflow) alignées sur la stack réelle.
  • README 24/7 + screenshot de comptage.

Limitations connues (suivies en issues)

  • #43 (P1) — Saturation disque 24/7 : la rétention vidéo peut dépasser l'espace libre ; pas de garde total-size. Build cache Docker non pruné.
  • #44 (P2) — Mémoire & disponibilité : pas de livenessProbe (l'app n'a pas de serveur HTTP), monitoring RSS à ajouter.
  • Compteur non persisté au redémarrage du pod (revient à 0).

Artefacts

Pas de binaire distribué — projet déployé depuis le source sur Jetson. Voir docs/01_quickstart.md et docs/03_deployment.md pour la mise en route.


Tag : v1.0.0 sur main @ e1ac47d