Neue bee counter Software auf Basis von Computer Vision und Machine Learning

Einige kennen vielleicht ‘tracks’’ und die bee counter von hivetool, welche Kamerabilder verwenden:

Ganz frisch gibt es von Mat Kelcey für ebenfalls Kamerabild-basierte Zähler einen neuen Ansatz (hier auf RasPi):

http://matpalm.com/blog/counting_bees/

1 Like

Awww, yeah! Das sieht optisch schonmal recht vielversprechend aus!

Noch etwas Neues:

http://www.apic.ai

Ein-/Ausflüge, Pollen, ggf. ansitzende und sichtbare (!) Varroa, sicher wird man auch Räuberei erkennen, wären schon sehr spannende Daten!

A post was merged into an existing topic: Bienen zählen mit Lichtschranken

Hab soetwas schon Mal mit Kamera und KI gesehen ist bestimmt auch für dich interessant.
Hab da auch schon ein wenig recherchiert. Ein Raspberry 3 oder Jeason Nano müsste reichen evtl. Reicht auch ein ESP32 + Kanada mit Tensorflow Lite

Eine KI erkennt in einem Videotunnel die einzelnen Bienen verfolgt sie und schaut wo’s sie herkommen und wieder verschwinden.

E-Hive

Ein Projekt von Carlos Pena Caballero.

apic.ai

Siehe auch Projekt apic.ai -- visuelle Analyse am Flugloch.

Mat Kelcey

Hier auch noch ein Artikel über das von @weef genannte Projekt.

2 Likes

Hatte ich auch überlegt und hat auch so seinen Charm. Mit den Kamerabildern kann man ja noch mehr anfangen, als Bienen zählen, z.B. Pollenfarbe oder Varroa erkennen. Allerdings ist der Aufwand auch höher. Kamera, Optik, Beleuchtung, Auswertung - da kommt was zusammen.
Bei mir kommt noch dazu, das der Bereich schlecht zugänglich ist.
Ich werde wohl bei dem ‘klassischen’ Ansatz mit Lichtschranken bleiben.

Was auch noch zu bedenken ist, wie das in unser Messkonzept passt. Momentan ist das eine Einmalmessung zu einen Zeitpunkt. Nötig wäre hier aber einen Dauermessung mit Aggregierung über bestimmte Zeiträume.

Stimmt schon, aber der Aufwand für die Schleusen und das Lichtschrankensystem ist auch recht aufwändig und Teuer.

Eine KI unterstützt solche Aufgaben schon von Haus aus. So ganz bewusst wie viel Programieraufwand es wird, bin ich mir allerdings noch nicht.

Hatte eigentlich vor, mich in der dunklen Jahreszeit näher mit dem Thema zu beschäftigen.

Wäre so was auch “on the edge”, z.B. mit einem ESP-eye möglich? Was bräuchte man da für Software?

Hat @MKO schon angedeutet: TensorFlow Lite: https://www.tensorflow.org/lite/microcontrollers

Immerhin läuft das auch auf einem ESP32, ob der allerdings diese Aufgabe bewältigen kann, läßt sich nicht beantworten, bis es jemand probiert hat! ;)


BTW, es gibt ein umfangreiches image classification modell-Set für TensorFlow für Insekten (trainiert mit den iNaturalist -Bildern bzw. -Datensatz), dort kann man es auch ausprobieren:
https://tfhub.dev/google/lite-model/aiy/vision/classifier/insects_V1/3 (allerdings viel zu groß für einen ESP32).

(direkter link dieses Modells als tensorflow.js zum Spielen im browser: https://storage.googleapis.com/tfhub-visualizers/visualizers/vision/index.html?modelMetadataUrl=https%3A%2F%2Fstorage.googleapis.com%2Ftfhub-visualizers%2Fgoogle%2Faiy%2Fvision%2Fclassifier%2Finsects_V1%2F1%2Fmetadata.json&publisherName=Google&publisherThumbnailUrl=https%3A%2F%2Fwww.gstatic.com%2Faihub%2Fgoogle_logo_120.png)

Bei den Beispielbildern dort ist A.mellifera bereits dabei; auf diesem Bild wird die Honigbiene mit einem score von 0,931 erkannt, eigene Bienenbilder werden durchweg gut erkannt, keins davon kommt unter 0,8 (alle anderen dabei fehl-erkannten Insekten bekommen entweder 0 oder Werte im Tausendstel-Bereich). Ein Bild einer Haus-Feldwespe (Polistes dominula) wurde immerhin noch mit 0,6 richtig erkannt, die recht ähnliche Polistes chinensis wird auf gleichem Bild mit fast 0,2 ‘erkannt’.

Für die counter-Anwendung ist ja sicher nur “Biene / keine Biene” wichtig, davon allerdings gleich mehrere in einem Bild, auch deren Bewegungsrichtung (ausfliegend / ankommend) dürfte kniffelig werden für einen ESP32.

2 Likes

So als AI-Idee würde es reichen, wenn ein Algorithmus

  • auf einem sonst statischen Hintergrund sich bewegende Punkte erkennt
  • die Punkte dann nachverfolgt und registriert, ob …
  • … die Punkte am Bildrand auftauchen und in der Bildmitte / Flugloch verschwinden → dann wären es ankommende Bienen* oder
  • … die Punkte in der Bildmitte / Flugloch auftauchen und am Bildrand verschwinden → dann wären es abfliegende Bienen*
  • * ggf. auch Wespen, Hummeln, Hornissen, da könnte man sich später drum kümmern

ESP-WHO / ESP-DL

Für den ESP-EYE, ein ESP mit onboard Kamera und Mikrofon gibt es ESP-WHO, eine

image processing development platform based on Espressif chips.

Die könnte schon mal “cat_face_detection” (kein Witz!!), aber auch motion_detection. Aller verlinkter code für die ESP-IDF zusammen mit ESP-DL, einer Erweiterung für

Neural Network (NN) Inference, Image Processing, Math Operations and some Deep Learning Models.

Und hier der Werbeblock:

With ESP-DL, you can use Espressif’s SoCs for AI applications easily and fast.

Das Ding hört sich eher danach an als wäre es dafür gestrickt aus einem Bild eine event / eine bestimmte Person (China halt!) zu identifizieren. Fraglich,

  • ob die Auflösung der Cam die Identifizierung einer einzelnen Bienen zulässt und
  • das framework die Möglichkeit hat viele verschiedene Bewegungen parallel zu identifiieren, und als Punkte zu verfolgen
  • und ob der ESP das hardwaretechnisch kann oder es was größeres sein muss?

TensorFlow Lite

Bei TensorFlow Lite gäbe es auch person_detection, aber keine Bewegung und keine Katzen als example: tflite-micro/tensorflow/lite/micro/examples at main · tensorflow/tflite-micro · GitHub

2 Likes

Ich hab mal ein wenig gegoogelt und alle Projekte benutzen die ESP32 CAM nur zum Streaming des Videobilds. Die Auswertung läuft dann auf einem PC. Der ESP hat wohl zuwenig Bumms, um das alleine zu stemmen.
Das ganze mit eine Raspi geht wohl - das ist aber auch nix, das auf Batterie laufen kann. D.h. Strom & WLAN sind in Reichweite, wenn man sowas realisieren will.

1 Like

Den ganzen face und cat recognition-Kram der oben verlinkt ist läuft doch auch “nur” auf dem ESP32. Ist es dann tatsächlich die fehlende Rechenpower oder gibt es noch nicht die enstprechende Software für den ESP32 und daher wird eher der RasPi verwendet?

Ein Einzelbild aufnehmen und das dann 500 ms oder Länger zu “analysieren” ist natürlich was anderes als mehrere Bilder pro Sekunde aufzunehmen, x sich bewegende Punkte zu tracken und dann noch die Ergebnisse per Telemetrie zu verschicken …

Hast du allgemein nach Video-Projekten geschaut oder speziell Bienen / bee counter? Falls wir die noch nicht hier gelistet haben, gerne ergänzen.

Ich habe nach ‘object tracking’ gesucht. Der Anwendungsfall war da allerdings immer nur wenige Objekte. Die benutzten alle die ESP CAM als Videokamera und openCV.js zur Auswertung.
Spezielle ESP Software für diesen Zweck habe ich nicht gefunden. Vermutlich ist das Einsatzfeld dafür zu klein.

1 Like

Ja, es hieß vor seiner Umbenennung in der Tat auch esp-face, siehe Video acquisition and processing with Espressif ESP32.

Das hier geht vermutlich zwar noch nicht “embedded”, zeigt aber den Stand der Forschung von 2018 – mit entsprechender Beleuchtung können scheinbar sogar Varroa Milben erkannt werden.

Relevante Papers

Von ‪Kim Bjerge‬ - ‪Google Scholar‬ et al.

1 Like

Hi Clemens,

Einordnung

In der “Real-Time Object Detection” Ecke hat sich in den letzten Jahren YOLO (You Only Look Once) von Joseph Redmon, Ali Farhadi et al. hervorgetan.

Auch wenn es Announcing TensorFlow Lite Micro support on the ESP32 — The TensorFlow Blog gibt, kann man damit bestimmt kein “realtime” tracking machen, das Erfassen von Flugbahnen scheidet also auf einem ESP32 o.ä. vorerst aus.

Movidius NCS

Mat Kelcey spricht in seinem Blog-Artikel bei counting bees on a rasp pi with a conv net und minimal example running on NCS · Issue #8 · matpalm/bnn · GitHub von einem “NCS”. Gemeint ist damit der Intel® Movidius™ Neural Compute Stick | Intel® Movidius™ Neural Compute SDK Documentation.

Wie @poesel oben beschreibt, verwenden viele Projekte in diesem Umfeld ESP32-CAM – aber eben nur als Kameramodul – zur Weiterverarbeitung auf einem stärkeren Rechner.

Hier kommt dann auch der NCS ins Spiel, der schwächeren Maschinen (hier: Raspberry Pi) die notwendige Rechenleistung verschafft, dort realisiert mit “Tiny-YOLO”.

Weitere Einordnung

Für den geplanten Anwendungsfall braucht man bestimmt kein Modell, das auf generische Objekterkennung trainiert ist. Mat Kelcey strebt(e) mit seinem optimierten Modell 120 fps auf dem NCS an, hier ist damals noch ein proof-of-concept zustande gekommen: bnn/HACK_running_on_ncs.md at ncs_poc · matpalm/bnn · GitHub

Viele Grüße,
Andreas.

1 Like

Hi @weef,

Das ist schon echt ein starkes Projekt. Bisher hatte ich noch Scheu, das mal aufzusetzen, weil es ja doch meistens in weiterer Arbeit mündet ;].

Ich wollte hier nun aber mindestens mal festhalten, dass Jonathan Byrne den entsprechenden “to-bee-or-not-to-bee” Datensatz unter der CC BY-SA 4.0 veröffentlicht hat, das passierte schon 2018, kurz nach Deinem ursprünglichen Beitrag.

Dort ist auch eine 312 kB große labels.db enthalten, größer also die 270 KB große label.201802_sample.db, FWIW.

Am meisten Pflege haben mittlerweile diese beiden Forks bekommen:

Bei letzterem scheint per Update README.md · Testbild/bnn@83e7e3c · GitHub ein netter Anwendungsfall durch: »Wabenrahmen abfotografieren und schnell automatisch durchzählen«, nicht?

Hinsichtlich weiterer Anwendungsfälle findet sich bei Error when running run_sample_training_pipeline.sh · Issue #28 · matpalm/bnn · GitHub auch ein weiterführender Link zu Pollen on bee's legs baskets detection - Edge Impulse, sowie Detecting hornets.

Viele Grüße,
Andreas.

1 Like

Probieren geht über…

An das Projekt von Mat Kelcey hab ich mich zwar immer noch nicht herangetraut, dafür ließen sich mit einem anderen ein paar schnelle Schnappschüsse gewinnen, basierend auf:

Sinvoll anwenden kann man das so ohne weiteres nur auf einem stärkeren Rechner.

Setup

git clone https://github.com/roboflow-ai/zero-shot-object-tracking.git
cd zero-shot-object-tracking/

# Slightly adjust `requirements.txt`.
# ftfy>=6,<7
# Delete `regex`.

git clone https://github.com/openai/CLIP.git CLIP-repo
cp -r ./CLIP-repo/clip ./clip
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

Synopsis, auf den Demo Videos

python clip_object_tracker.py --weights models/yolov5s.pt --detection-engine yolov5 --info \
  --source data/video/fish.mp4

python clip_object_tracker.py --weights models/yolov5s.pt --detection-engine yolov5 --info \
  --source data/video/cars.mp4

Synopsis, auf einem beliebigen Video mit Bienenflugaktivität

youtube-dl https://www.youtube.com/watch?v=By146BSweog --format=136
time python clip_object_tracker.py --weights models/yolov5s.pt --detection-engine yolov5 --info \
  --source beevideo/Flight\ of\ the\ honeybee-By146BSweog.mp4

Ergebnis: https://ptrace.hiveeyes.org/2022-02-21_honeybee-flight-clip.mp4

Wenn Ihr weitere oder bessere Anflug- oder Fluglochvideos habt, verlinkt sie gerne hier im Beitrag.

Details

Die Maschinerie erkennt die Objekte und verfolgt sie über die Zeit, wie im annotierten Video zu sehen. Auf der Konsole sieht die Log-Ausgabe unterdessen folgendermaßen aus (pro Frame ein Eintrag):

[Detections]
1 birds, 1 dogs, 3 kites,
[Tracks] 8
Tracker ID: 2, Class: kite, BBox Coords (xmin, ymin, xmax, ymax): (621, 478, 874, 634)
Tracker ID: 12, Class: bird, BBox Coords (xmin, ymin, xmax, ymax): (213, 238, 261, 315)
Tracker ID: 17, Class: kite, BBox Coords (xmin, ymin, xmax, ymax): (437, 140, 471, 170)
Done. (0.182s)
video 1/1 (58/1319) /Users/amo/dev/foss/zero-shot-object-tracking/beevideo/Flight of the honeybee-By146BSweog.mp4: yolov5 inference

[Detections]
1 birds, 1 kites,
[Tracks] 6
Tracker ID: 2, Class: kite, BBox Coords (xmin, ymin, xmax, ymax): (638, 479, 882, 629)
Tracker ID: 12, Class: bird, BBox Coords (xmin, ymin, xmax, ymax): (213, 230, 262, 308)
Tracker ID: 17, Class: kite, BBox Coords (xmin, ymin, xmax, ymax): (430, 141, 463, 170)
Done. (0.187s)
video 1/1 (59/1319) /Users/amo/dev/foss/zero-shot-object-tracking/beevideo/Flight of the honeybee-By146BSweog.mp4: yolov5 inference

[Detections]
1 birds, 1 kites,
[Tracks] 6
Tracker ID: 12, Class: bird, BBox Coords (xmin, ymin, xmax, ymax): (208, 223, 259, 304)
Tracker ID: 17, Class: kite, BBox Coords (xmin, ymin, xmax, ymax): (422, 140, 457, 171)
Done. (0.218s)
video 1/1 (60/1319) /Users/amo/dev/foss/zero-shot-object-tracking/beevideo/Flight of the honeybee-By146BSweog.mp4: yolov5 inference

Diese Software ist zwar nirgends zu finden [1], allerdings gibt es bei GitHub - rcrum003/HiveControl: Alternative software for use with HiveTool suite of software. eine alternative Software:

Und dort bei HiveControl/scripts/beecount at master · rcrum003/HiveControl · GitHub gibt es per beecounter_svc.py ein Python Programm, basierend auf OpenCV und NumPy. Es nimmt bereits die im Bild durch die grünen vs. roten Tracks dargestellte Unterscheidung nach Einflug/Ausflug vor. Außerdem regelt es automatisch die Beschaffenheit des Hintergrunds nach, das ist bestimmt für die sich im Tagesverlauf ändernden Lichtverhältnisse sinnvoll.

Hier ist der Algorithmus beschrieben:


  1. Möglicherweise ist es im kompletten Image zu finden, das es bei Software: Install Hivetool Pi image - HiveTool zum Download gibt. ↩︎

1 Like

Beide Verfahren können auch kombiniert angewendet werden, hier eine einführende Übersicht:

https://thinkautonomous.medium.com/computer-vision-for-tracking-8220759eee85


  1. Hungarian algorithm - Wikipedia ↩︎