Kameraüberwachung mit Objekt- und Gesichtserkennung mittels Zoneminder, YOLO und OpenCV auf x86 - Plattformen, benötigt NVIDIA® - GPU mit CUDA® und cuDNN®
Bei WIEGEHTKI.DE geht es um nachvollziehbare Schritte und eine Einführung in die KI-Welt. Es geht nicht um das Bereitstellen hocheffizienter Entwicklungsumgebungen. Daher sollten auch die Plattformen ausschließlich Testsysteme sein, welche auch schnell mal neu aufgesetzt werden können. Auf gar keinen Fall sollten produktive Systeme genutzt werden! Desweiteren wird auch keine Rücksicht auf Benutzerrechte genommen, d.h. dass die Pakete der Einfachheit halber als root installiert werden. Das sollte natürlich nicht bei dauerhaft betriebenen Systemen beibehalten werden, da dies eine erhebliche Sicherheitslücke darstellt. Insofern fühlt Euch eingeladen die Scripte nach Euren Vorstellungen anzupassen und zu optimieren.
In der nachstehenden Tabelle findet Ihr von mir bereits getestete Versionen. Diese werden sukzessive aktualisiert.
- Getestete Versionen:
Ubuntu - Variante | Version | Install third-party software (CUDA wird vorinstalliert) | CUDA - Version | cuDNN - Version | Getestet |
---|---|---|---|---|---|
Desktop (Minimal) | 22.04 | Nein | 11.6 | 8.4.0 | OK |
Desktop (Minimal) | 20.04.4 LTS (focal) | Nein | 11.6 | 8.3.2 | OK |
Desktop (Maximal) | 20.04 | Nein | 11.6 | 8.3.2 | in progress |
Server (Minimal) | 20.04 | Nein | 11.6 | 8.3.2 | in progress |
Server (Maximal) | 20.04 | Nein | 11.6 | 8.3.2 | in progress |
Es wird ausdrücklich empfohlen CUDA über den Script zu installieren und nicht über Third-Party Software im Ubuntu-Setup-Menu! Das Problem sind geänderte Pfadangaben bei CUDA so dass selbst die aktuellen CUDA Examples von NVIDIA nicht installiert werden können.
- Mit Zoneminder Eure IP-Kameras einbinden und mobil verfügbar machen
- Den Livestream mit OpenCV und YOLO auf Objekte untersuchen
- Erkannte Objekte, z.B. Personen, zuverlässig melden lassen
- Gesichter trainieren (Achtung: Datenschutzgesetz beachten!)
- Dokument zu Yolo(v4): https://arxiv.org/abs/2004.10934
- Infos zum Darknet framework: http://pjreddie.com/darknet/
- Infos zu OpenCV findet Ihr hier: https://opencv.org/
Videos zu diesem Projekt (und weitere) findet Ihr auf https://wiegehtki.de
- Einführung in das Projekt: https://youtu.be/TsEwtInBl3c
- Installation des Betriebssystems: https://youtu.be/_P9d5rERbBA
- Installation der Software: https://youtu.be/9pQ3ouCPqm8
- Inbetriebnahme: https://youtu.be/3yM87yOXaBs
Benötigt wird eine Ubuntu 18.04 oder 20.04 LTS Umgebung. Ihr solltet eine Maschine explizit und nur dafür vorsehen (virtuell oder physisch) welche NICHT im produktiven Einsatz ist! Das System wird durch die nachfolgenden Schritte erheblich verändert und daher solltet Ihr dies ausschließlich auf dafür eiegns bereitgestellten Test-Systemen durchführen.
Ihr könnt das gewünschte System (Desktop oder Server) unter https://ubuntu.com/download runter laden. Anschließend das Image auf einen USB-Stick übertragen, zum Beispiel mit balenaEtcher (https://www.balena.io/etcher/) oder einem anderem Tool welches dafür geeignet ist.
Unter WIEGEHTKI.DE (https://www.youtube.com/channel/UC_OeEKyvDfCVdhYrEKYf1lA) findet Ihr den Video zur Installation
21.10 ist mit Stand 02-2022 noch realtive neu und die benötigten CUDA Treiber sind noch nicht im offiziellen Repository verfügbar. Insofern bereite ich die Scripte sukzessive auf 21.10 vor auch wenn es noch nicht voll unterstützt ist. Daher würde ich (noch) nicht empfehlen 21.10 bereits jetzt im Rahmen dieses Projekts einzusetzen. Falls 21.10 installiert wird (Beispiel: Desktop minimal), dann sind die folgenden Pakete nützlich:
sudo apt -y install git nano ssh
In diesem Projekt kommt eine NVIDIA® Grafikkarte zum Einsatz um den Prozessor von rechenintensiven Verarbeitungen zu befreien. Dazu setzen wir NVIDIA®'s CUDA® und cuDNN® ein. CUDA® ist eine Technologie, die es erlaubt Programmteile durch den Grafikprozessor abarbeiten zu lassen während die NVIDIA® CUDA® Deep Neural Network Bibliothek (cuDNN) eine GPU-beschleunigte Bibliothek mit Primitiven für tiefe neuronale Netzwerke darstellt. Solche Primitive, typischerweise neuronale Netzwerkschichten genannt, sind die grundlegenden Bausteine tiefer Netzwerke.
cuDNN® ist insofern nicht frei verfügbar als dass man sich bei NVIDIA® registrieren muss. Das ist aktuell kostenlos, nach der Registrierung startet eine sehr kurze Umfrage, wozu man das einsetzt und dann kommt man auf die Download-Site.
- Der Link zur Registrierung: https://developer.nvidia.com/CUDNN. Dort auf Download cuDNN klicken und anschließend registrieren.
- Nach erfolgreicher Reistrierung bitte in der Sektion Download cuDNN v8.3.2, for CUDA 11.5 (das kann sich natürlich ggfs. ändern und etwas anders heißen) unter Library for Linux, Ubuntu(x86_64 & PPC architecture) die Datei cuDNN Library for Linux (x86) runter laden; NICHT die Ubuntu-Dateien!
- Die Datei per
scp
oder einem entsprechenden Tool direkt in das/root/
- Verzeichnis kopieren. - Auf der Maschine anmelden und folgende Schritte ausführen, wobei
sudo su
nicht notwendig ist, wenn Ihr bereits root sein solltet.
sudo su
cd ~
sudo chmod +x cudnn*
Der Script geht aktuell von folgenden Versionen bzw. Dateinamen aus:
OpenCV (Zeile 4): 4.5.5
CUDA-Version (Zeilen 190-200): 11.6
cuDNN für CUDA 11.6 (Zeilen 208-220): cudnn-linux-x86_64-8.3.2.44_cuda11.5-archive.tar.xz
Sollten sich diese ändern, dann den Script anpassen.
Anschließend kommen wir zur eigentlichen Installation des Systems. Diese ist in zwei Stufen unterteilt: In Stufe 1 installieren wir einige Standard-Pakete und de-aktivieren den bisherigen Grafiktreiber, anschließend startet das System neu. Der Script geht davon aus, dass es sich um eine neu aufgesetzte Maschine handelt, falls nicht, müsst Ihr entsprechende Anpassungen machen oder die Befehle per Hand ausführen um sicher zu gehen, dass eine vorhandene Installation nicht beeinträchtigt wird. Empfohlen wird daher, ein verfügbares Testsystem zu nutzen welches neu aufgesetzt werden kann.
Einloggen und zunächst noch benötigte Pakete installieren (fehlen u.U. bei einigen OS-Varianten):
sudo su
cd ~
apt -y install git
Dann die erste Stufe der Installation starten, der Rechner rebootet danach automatisch:
cd ~
git clone https://github.com/wiegehtki/zoneminder.git
cp zoneminder/*sh .
sudo chmod +x *sh
./Initial.sh
Wichtig: Der Installationsprozess ist in 2 Schritte unterteilt, Initial.sh und Final.sh und erfordert ein paar Betsätigungen durch den Benutzer. Erneut Einloggen und dann die zweite und letzte Stufe der Installation starten:
sudo su
cd ~
./Final.sh
Ein weiteres Terminalfenster öffnen und mit cat Installation.log
bzw. cat FinalInstall.log
den Fortschritt der Installationen kontrollieren.
Nach der Installation einen reboot
ausführen.
- Ohne diese Anpassungen wird die Installation nicht funktionieren. Daher sind diese Schritte besonders sorgfältig durchzuführen.
- secrets.ini: Zunächst einloggen, in das /root - Verzeichnis wechseln und die erste Datei mit dem Editor öffnen.
sudo su
cd ~
nano /etc/zm/secrets.ini
Anschließend folgende Einträge anpassen:
ZMES_PICTURE_URL=https://<PORTAL-ADRESSE>/zm/index.php?view=image&eid=EVENTID&fid=objdetect&width=600
Hier den Eintrag anpassen. Es sollte idealerweise eine "echte" Adresse sein, zum Beispiel bei mir war das: zm.wiegehtki.de und muss natürlich bei Euch an das jeweilige Portal angepasst werden.
Wenn gar keine echte Adresse zur Verfügung steht, dann eine erfinden und im Client zum Test in der hosts
- Datei eintragen und den Eintrag von https
auf http` ändern.
Das gleiche gilt für ZM_PORTAL=https://<PORTAL-ADRESSE>/zm
und ZM_API_PORTAL=https://<PORTAL-ADRESSE>/zm/api
. Anschließend die Datei mit STRG + O
speichern und den Editor mit STRG + X
beenden. Die anderen Parameter können erstmal ignoriert werden und müssen nicht angepasst werden.
- objectconfig.ini: Diese Datei muss nur dann angepasst werden, wenn das vor-trainierte Model gewechselt werden soll. Ich habe hier yolov4 mit GPU-Unterstützung vor- eingestellt. Sollte man KEINE GPU zur Unterstützung zur Verfügung haben, kann der entsprechende Eintrag notfalls auch auf CPU geändert werden.
nano /etc/zm/Anpassungen/objectconfig.ini
Website aufrufen (z.B. http://IP_ADRESSE/zm) und Eventserver in der Oberfläche aktivieren (Menüpunkt Options):
Kamera anlegen und Modus MODECT anwählen:
Nur bei Bedarf Wenn Ihr ein anderes Framework/Model nutzen wollt,könnt Ihr den dazugehörigen Eintrag anpassen. Dazu einfach ein # vor die Zeile setzen, welche inaktviert werden soll bzw. entfernen, wenn Zeilen aktiviert werden sollen. Die Vorgabe von mir sieht wie folgt aus:
# FOR YoloV4.
object_framework=opencv
object_processor=gpu
# object_processor=cpu
object_config={{base_data_path}}/models/yolov4/yolov4.cfg
object_weights={{base_data_path}}/models/yolov4/yolov4.weights
object_labels={{base_data_path}}/models/yolov4/coco.names
Die .weights - Dateien sollten über den Installationsscript geladen werden. Falls nicht, hier die Download-Links:
- Download yolov3.weights: https://drive.google.com/file/d/10NEJcLeMYxhSx9WTQNHE0gfRaQaV8z8A/view?usp=sharing
- Download yolov3-tiny.weights: https://drive.google.com/file/d/12R3y8p-HVUZOvWHAsk2SgrM3hX3k77zt/view?usp=sharing
- Download yolov4.weights: https://drive.google.com/file/d/1Z-n8nPO8F-QfdRUFvzuSgUjgEDkym0iW/view?usp=sharing
-
Datenbank-Verbindungen werden immer mehr und die Verbindung zur Datenbank geht verloren Wenn dieser Fehler auftritt (gesehen bei Zoneminder 1.34.22), dann folgende Schritte durchführen:
- Rechner rebooten
- ZM-Site aufrufen
-
Options->Users
aufrufen und demadmin
- Benutzer ein Kennwort vergeben -
Options->System
anwählen undOPT_USE_AUTH
aktivieren - Ganz unten
Save
anklicken und Einstellungen speichern -
Options->System
anwählen undOPT_USE_AUTH
de-aktivieren -
AUTH_RELAY
auf none setzen -
AUTH_HASH_SECRET
auf irgendeinen Wert setzen - Wieder
Save
anklicken und Einstellungen speichern
Der Fehler sollte jetzt nicht mehr auftreten.
-
Beim Aufruf eines Installationsscripts kommt die Fehlermeldung
/usr/bin/env: ‘bash\r’: No such file or directory
Wenn dieser Fehler auftritt, dann folgende Schritte durchführen:- sed
$'s/\r$ //' -Script bei dem der Fehler auftriit, z.B. Initial.sh- > -Neues Script, z.B. InitialNeu.sh- - chmod +x *
- Aufruf des neuen Scripts, z.B.: ./InitialNeu.sh
- sed