OpenSource basierte & DSGVO konforme Videoüberwachung
Das Thema Videoüberwachung ist ein alter Hut. Tatsächlich ein sehr alter: bereits seit den 50er-Jahren werden in Deutschland Kameras zur Überwachung, z.B. des Verkehrs, eingesetzt. Über die Jahrzehnte ist die Technologie dank sinkender Preise immer zugänglicher geworden, hat irgendwann den Wandel der Digitalisierung mitgemacht und ist nun an einem Punkt angelangt, wo sie eines der optimalen Anwendungsgebiete für Maschine-Learning-Technologien darstellt. Höchste Zeit also, etwas tiefer in die Materie einzusteigen…
Da gerade bei der Videoüberwachung das Thema Datenschutz essenziell ist, soll die Voraussetzung eine Lösung sein, die:
-
- soweit möglich, vollständig aus Open-Source-Komponenten besteht
-
- keinerlei Daten aus meinem Netzwerk nach außen sendet und bei Bedarf auch “Air Gapped”, also komplett ohne Internetverbindung, laufen können sollte.
Nach Evaluierung verschiedener Lösungen bin ich letztendlich bei Frigate NVR gelandet, einem bei Github sehr beliebten Projekt, das eine auf das Wesentliche reduzierte, einfach zu konfigurierende Lösung inkl. Objekterkennung darstellt und die sich bei Bedarf außerdem sehr sauber in Home Assistant integrieren lässt.
Frigate verwendet OpenCV und Tensorflow, um Objekte live im Videostream zu erkennen. Über eine einfache yaml-Datei lässt sich dann konfigurieren, was passieren soll, wenn bestimmte Objekte im Videostream erkannt werden. Üblicherweise will man die Videoaufnahme starten, wenn Personen erkannt werden, aber eben nicht, wenn z.B. ein Licht angeschaltet wird oder Büsche im Sichtfeld durch den Wind bewegt werden.
Neben einer Aufzeichnung kann man allerdings auch Events via MQTT publizieren, die dann beliebig weiterverwendet werden können - z.B. eben in Home Assistant, um Beleuchtung zu aktivieren oder Ähnliches.
PERFORMT DAS DENN AUCH?
Jaein: Meist liest man, dass Frigate bzw. dessen Objekterkennungsfunktion unbedingt zusammen mit einem “Coral” betrieben werden soll. Gemeint ist damit Googles Tensor Processor Unit (TPU), die eben diesen Namen trägt. Frigate ist nämlich in der Lage, statt der CPU diese TPU zu verwenden, die darauf spezialisiert ist, genau solche Maschine-Learning-Aufgaben wie das Erkennen von Objekten in einem Bild besonders effektiv, sprich in hoher Geschwindigkeit, für wenig Watt pro Zeiteinheit, zu erledigen.
Ob man das wirklich braucht, hängt von zwei Faktoren ab:
-
- auf wie vielen Kameras gleichzeitig möchte man Objekte erkennen
-
- wie schnell ist die CPU, die das tun soll, wenn man eben keine Coral-TPU verwendet.
Konkrete Zahlen für die Leistungsfähigkeit von CPUs kann man dabei schlecht nennen, denn natürlich spielen v.a. die Bildrate der Erkennung (hier werden lediglich um die 5 fps empfohlen, weil das für eine Erkennung gut ausreicht), Auflösung des Ausgangsmaterials, Single Thread Performance der CPU, Anzahl der Kerne usw. noch eine Rolle.
Grob kann man aber festhalten, dass eine schnelle, aktuelle Desktop-CPU (sprich i5 oder Ryzen ab 6 Kernen) auch mit einer Handvoll Kameras bei 5fps wohl noch ganz gut klarkommen dürfte. Bei einem Rasperry Pi oder vergleichbaren Geräten sieht das aber anders aus.
So oder so sollte man sich im Klaren darüber sein, dass man im Vergleich zu einer TPU viel Watt pro Erkennungsvorgang investiert.
WO BEKOMME ICH SO EINEN CORAL HER?
Eigentlich bekommt man einen Coral überall. Eigentlich. Tatsächlich führt im Moment aber entweder die allgemeine Chip-Knappheit oder die Beliebtheit des Coral selbst (vermutlich aber beides) dazu, dass das am einfachsten zu verwendende Modell, nämlich der Coral als USB-Stick, gerade nicht verfügbar ist - außer zu horrenden Preisen über UVP. Die Situation erinnert verdächtig an den aktuellen Grafikkarten-Markt.
Gut verfügbar und nahe dem UVP ist hingegen die Bauform mit M.2-Anschluss mit A+E-Key zu haben. Zumindest jetzt, Mitte Oktober 2021.
Zu den Gründen, warum das so ist, kann ich nur spekulieren:
- Bei meiner Recherche schienen M.2-Steckplätze mit A+E Key-Kompatibilität sehr viel seltener zu sein als die mit B+M Key.
- Das könnte an den weniger attraktiven Eigenschaften liegen, die diese Keyings bieten (vgl. https://en.wikipedia.org/wiki/M.2#Form_factors_and_keying ).
- Darüber hinaus waren die M.2-Anschlüsse meines Boards bereits mit NVMe’s belegt, sodass ich eine andere Anschlussmöglichkeit brauchte, also lag PCIe am nächsten.
- Auch hier stellte sich die Suche nach einem Adapter von M.2 A+E auf PCIe schwieriger heraus als ursprünglich gedacht.
Im Endeffekt bin ich aber fündig geworden: Die “Delock PCI Express Karte > 1 x intern M.2 Key E - Low Profile Formfaktor (Artikel-Nummer 89889)” tut genau das, wonach ich gesucht hatte, und so fand mein Coral-M.2-Topf seinen PCIe-Adapter-Deckel und konnte zusammengesetzt in den Server geschoben werden. Lobend erwähnt sei noch, dass auch eine Low-Profile-Blende beim Adapter dabei war.
UND WIE VIEL LEISTUNG HABEN WIR JETZT?
Ganz konkret schaffe ich nun allein mit dieser einzelnen TPU eine Bildanalyserate (ohne jegliche Optimierung) von ca. 55 pro Sekunde bei Full-HD, also 1920 x 1080 Pixeln. Bei einem Kamerafeed für die Erkennung mit 5fps kann ich damit also bereits gut 10 Kameras gleichzeitig in Echtzeit überwachen.
Wer mehr braucht, kann einfach mehrere Corals kombinieren, oder gleich Karten kaufen, die mit mehreren dieser TPUs bestückt sind.
WIE? DAS IST DIR IMMER NOCH NICHT GENUG? OKAY...
Wem das Thema interessiert, dem sei auch folgendes Video von “Linus Tech Tips” ans Herz gelegt, wo im gleichen Kontext, nämlich Frigate und TPU, weitere spannende Themen vorgestellt werden, wie z.B.:
eine PCIe-Karte mit deutlich mehr als nur einer TPU die Möglichkeit, nicht nur Personen allgemein zu erkennen, sondern auch konkret welche Personen, unter Verwendung von https://github.com/jakowenko/double-take und https://github.com/exadel-inc/CompreFace Link zum Video: https://www.youtube.com/watch?v=B635wcdr6-w