ZoneMinder – Das Schweizer Messer der Video-Überwachung

Vorab: ZoneMinder ist ein Opensource-Produkt ausschließlich für Linux. Das soll allerdings auch Windows-Verwender nicht abschrecken, die Entwickler schreiben, dass es möglich ist, ZoneMinder (ZM) unter dem Windows Subsystem für Linux laufen zu lassen. Alternativ kann man eine Virtuelle Maschine einrichten oder einen relativ alten Rechner verwenden.

Unter der Internet-Adresse https://zoneminder.com findet man erste Informationen zu ZoneMinder in englischer Sprache. Die komplette Dokumentation und das WIKI gibt es hier: https://wiki.zoneminder.com.
In Facebook: https://www.facebook.com/zoneminder
Der ursprüngliche Initiator des Projektes war Phil Coombes.
Seit ca. 10 Jahren ist Isaac Connor der Haupt-Entwickler und die treibende Kraft hinter ZM,
es arbeiten jedoch einige weitere am Projekt mit.

Aufruf vorab:

Wenn sich Software-Entwickler nicht finanzieren können, verschwindet irgendwann ihr Produkt!
Ich persönlich finde es legitim, im privaten Umfeld im Rahmen der zugrunde liegenden Open Source Lizenzen die Software zu verwenden und gegebenenfalls auch einen kleinen Betrag an die Entwickler zu spenden oder sie – wie ich, wenn man von ihrem Produkt überzeugt ist, mit einem derartigen Beitrag zu unterstützen.
Ein weiterer Weg den die Entwickler zur Finanzierung des Projektes gefunden haben,
ist zum Beispiel der Youtube-Kanal:

https://www.youtube.com/channel/UCDKfmvDdcPBrB6rO2aj5Wlg

Hier sind noch einige Abonnenten nötig, damit wenigstens etwas Geld in die Kasse gespült wird. Wer sich also für ZoneMinder interessiert und das Produkt verwenden möchte, sollte zumindest den Kanal abonnieren, das tut nicht weh.

Wer ein Open Source Produkt im kommerziellen Umfeld einsetzt und eventuell auch selbst noch damit verdient, sollte (IMHO: muss) auch einen fairen Obolus entrichten.

Wie ich zu ZoneMinder kam

Als ich vor einigen Jahren unser Grundstück mit Videoüberwachung ausgestattet habe, fiel meine Entscheidung auf die Vivotek Bullet-Kameras IB8369 (Werden nicht mehr vertrieben). Das robuste Alu-Gehäuse und die gute Kabeleinführung waren u.A. ein Kriterium. Man muss allerdings anmerken: Die Bewegungserkennung war / ist als eher mittelmäßig zu bezeichnen. Es musste also ein Stück Software her, womit man ein wenig mehr machen kann. Die rein kommerziellen Systeme waren 1. viel zu teuer und 2. meist nur für Windows verfügbar. Zweiteres hätte ich zwar über eine VM lösen können, aber kostenfreie Versionen der guten Programme hatten meist nur eine oder zwei Kameras für den privaten Einsatz freigeschaltet. Dann stieß ich auf die quelloffene Software ZM und lernte sie zu schätzen. Seither dienen die Kameras lediglich als reine Bild-Lieferanten 🙂

Hardware-Anforderungen: Rechner

Die Anforderungen richten sich nach der Anzahl, Art und Auflösung der zu verarbeitenden Kameras. Die Meinungen scheinen allerdings stark zu differieren, welche Hardware einzusetzen ist. Im WIKI ist unter https://wiki.zoneminder.com/Hardware_recommendations zu lesen, dass für ein Setup von bis zu 4 Kameras ein core2duo Prozessor ausreichend ist. Für 10 Kameras soll man schon “low end server CPUs” verwenden und eigentlich core i3, sowie i5 vermeiden.
Grundsätzlich sollte man sich bei wirklich großen Setups bezahlten Support von den Entwicklern einkaufen.

Erfahrungswert:
Mein Home-Server hat einen i5-2400 @ 3.10GHz, 16GB RAM und ein RAID5-Setup mit 4TB auf (noch) mechanischen Festplatten. Auf dieser Maschine läuft alles:
Mail-Server, calDAV / cardDAV Server, ioBroker, File-Server, einiges mehr und eben der ZoneMinder mit (je nach Bedarf zu und abgeschaltet) 6 – 10 Kameras. Alle Kameras liefern Full HD Streams & Bilder mit mind. 1MP und max. 5MP bei einer Rate von 5 FpS.
Aktuell bei 8 aktiven Kameras bewegt sich die Auslastung des Prozessors zusammen mit allen anderen Prozessen zwischen 30 und 50%, vom Arbeitsspeicher werden 8GB verwendet, wovon 4GB Cache sind.
Also blubbert das Gerät so vor sich hin und es ist sogar noch Luft nach oben.
Fazit:
Versuch macht Klug, probiert es aus!
Für die meisten Heim-Anwendungen reicht ein relativ kleines Setup aus.
Für z.B. 2 Kameras würde ich sogar mal einen Raspi 4 mit externer Festplatte ausprobieren….

Hardware-Anforderungen: Kameras
ZM kann (fast) alles verarbeiten, was ein Videobild (über das Netzwerk) liefert

Im ZoneMinder sind für die gängigsten IP-Kameras schon sog. Templates integriert. Natürlich bietet ZM ONVIF Unterstützung bei der Einrichtung einer Kamera.
In ZM werden Bildquellen als “Monitor” bezeichnet.

Zu erwähnen ist weiterhin die Unterstützung für ein paar sogenannte Video-Encoder, welche im Grunde lediglich dazu dienen, ältere Kameras mit analogem Video-Signal netzwerkfähig zu machen. Da es sich hierbei in der Regel um Produkte für den professionellen Einsatz handelt, ist eine Verwendung im häuslichen Umfeld allerdings schon aufgrund der Preise eher unwahrscheinlich.

Auch werden zur Anbindung von analogen Bildquellen noch einige Capture Cards für den direkten Anschluss an einen Rechner unterstützt. Ebenso USB-Kameras, welche direkt an den Rechner angeschlossen sind. Letzteres macht aber aus meiner Sicht wenig Sinn, da ich keinen konkreten Anwendungsfall sehe.

Unter https://wiki.zoneminder.com/Hardware_Compatibility_List finden sich viele der unterstützten Produkte mit Links zu Details zur Einrichtung.

Grundsätzlich hat man fast immer die Option ein Bild zu bekommen, solange eine Kamera entweder einen Stream im Format MJPEG, MPEG4 oder H.264 liefert.
H.265 scheint mit Umweg möglich, hier habe ich jedoch keine Erfahrungen gesammelt.

Das Übertragungsprotokoll spielt (zumindest im Endergebnis) eine untergeordnete Rolle,
hier war ich bisher sowohl mit HTTP(S), als auch mit RTP/RTSP erfolgreich.

Notfalls muss man auf die Snapshot-URL zurückgreifen, falls die Kamera einen Snapshot liefert. Manche Kameras liefern automatisch eine Aktualisierung des Snapshot (Achtung – siehe weiter unten), bei anderen kümmert sich ZM anhand der dort konfigurierten Bildwiederholrate um die Aktualisierung.

Bei den Vivotek Kameras ist die URL z.B. (je nach Konfiguration der Kamera https oder http):

http://[IP-Adresse der Kamera]/cgi-bin/viewer/video.jpg

ggf. auch mit Angabe des Streams:

http://[IP-Adresse der Kamera]/cgi-bin/viewer/video.jpg?Stream=[Nummer des Stream].

Bei BOSCH-Kameras ist die Snapshot-URL z.B:

http[s]://[IP-Adresse der Kamera]/snap.jpg

Allgemein: Bildwiederholraten, Bildauflösung und Megapixel

Zur Video-Überwachung erachte ich eine Bildwiederholrate von 25 oder gar 30 Bildern pro Sekunde als sinnlos, hier schaut man keinen Film auf einem Streaming-Portal. Wir brauchen möglicht schnelle Verabeitungszeit.
Bei Wiederholraten von 5 bis ca. 10 FPS (Frames per second) bekommt man alles nötige mit!
Faustregel:
Je mehr Bilder/s bedeutet auch mehr Daten, was mehreren Kameras auch schnell zum Nachteil werden kann:

  • Die Speicherkapazität der Datenträger muss entsprechend ausgelegt werden
  • Bilder können ggf. nicht gespeichert werden, weil die Performance der Festplatte(n) nicht ausreicht. Dann verliert man eventuell genau die Bilder, welche man z.B. zur Identifikation eines Täters benötigt.
  • Die Prozessor-Last und demnach auch die Verarbeitungszeit steigen, die gesamte Hardware stößt an ihre Grenzen
  • Insbesondere wenn man eine Bildanalyse mit sog. Deep-Learning Algorithmen laufen lässt (z.B. zur Detektion von Personen) sind zu viele Daten eher hinderlich. Z.B. ist eine Alarmierung 5 Minuten nach einem Einbruchsversuch nicht im Sinne des Erfinders 😉

Gleiches gilt für die Größe, Pixeltiefe und Farbtiefe der Bilder.
Es gilt Abzuwägen und einen guten Kompromiss zu finden.
Wenn man ggf. Details auf einem Bild im Nachhinein heranzoomen muss, kann eine Aufzeichnung mit 4k-Auflösung hilfreich sein. In einem solchen Fall sollte man überlegen,
die Bewegungserkennung und Video-Analyse auf einem Stream mit weniger belastenden Voreinstellungen durchzuführen und einen 2. sog. gekoppelten Monitor für die hochauflösende Aufzeichnung einzurichten. Manchmal kann auch ein 2. Rechner für diesen Zweck das Mittel der Wahl sein.

Tipp für die Reduzierung der Last durch eine falsch eingestellte Bildwiederholrate

Bei Kameras, die einen Stream liefern ist die Bildwiederholrate immer in der Kamera festzulegen. Falls ZM für ein solches Setup die Festlegung der Frame Rate in seiner Konfiguration anbietet, sollte dieses auf jeden Fall leer gelassen werden, da es sonst zu
1. einer sehr hohen Systembelastung durch ZM (Erfahrungswert aus meinen Anfängen)
2. Verlorenen Frames
kommen kann.
Beim Zugriff auf Snapshots ist ebenfalls darauf zu achten, dass man die Frame Rate im ZoneMinder nur dann einstellen muss, wenn die Kamera keinen autom. Refresh liefert.
Für die meisten Konfigurations-Punkte bietet ZM eine Popup-Hilfe an, her sollte man ruhig mal auf das eingeklammerte Fragezeichen hinter der Feldbezeichnung der Konfiguration klicken.

Mehr tun als nur Bewegungserkennung mit dem Event Server

Durch die Struktur und API von ZM besteht die Möglichkeit diesen durch zusätzliche Stücke Software zu erweitern. Ein sehr mächtiges Werkzeug ist der Event Server (auch oft als “zm-es” oder einfach “ES” im zusammenhängenden Sprachgebrauch bezeichnet). Der Quellcode dazu und Links zur Dokumentation sind auf github unter https://github.com/ZoneMinder/zmeventnotification zu finden.
Die Projektbeschreibung sagt:
“Machine Learning powered Secure Websocket & MQTT based ZoneMinder event notification server”

Es empfiehlt sich, die aktuelle, als stable markierte Release von pliablepixels zu verwenden. In der Dokumentation unter https://zmeventnotification.readthedocs.io/en/stable findet sich eine ordentliche step-by-step Installations-Anweisung. Das Ganze ist allerdings nicht für reine Anwender geeignet, die eine Software lediglich installieren und – wie eine Textverarbeitung – out of the box verwenden möchten!

Der ES bringt die sehr schnelle Objekt-, Personen- und auch Gesichts-Erkennung
YOLO (You only look once) mit, bietet aber die Möglichkeit eigene Skripte und Programme einzubinden. Nach erfolgreicher Installation schreibt diese in die Beschreibung eines Event zurück, was sie gefunden hat.

Sobald ich wieder etwas mehr Zeit zum “Spielen” aufbringen kann, werde ich mit YOLO etwas intensiver befassen, bis dahin verwende ich meine selbst geschriebene Personenerkennung mit Email-Versand (Schlagworte: Python, openCV, Tensorflow), die ich begonnen habe zu schreiben, deutlich bevor ich auf den zm-es gestoßen bin.
Aus Faulheit: Die kenne ich und kann sie handeln 😉

Mini-Tipp:
Ich habe den Event Server zunächst nicht ans laufen bekommen.
Nachdem ich mir das Ganze etwas später in Ruhe betrachtet habe,
bin ich auf dann doch recht schnell auf die Lösung gekommen:
Der IP-Port, den der zm-es standardmäßig verwendet, war / ist auf meiner Maschine schon anderweitig belegt. –> Anderen Port konfigurierten und schon klappt’s auch 😉

Abschließend noch ein gutes Dokument, wenn man erst mal ein Bild von den Kameras hat und an die Einrichtung der Zonen geht:

https://wiki.zoneminder.com/Understanding_ZoneMinder%27s_Zoning_system_for_Dummies

Das Einrichten einer Video-Überwachung mit professionellen Features ist nie einfach mal schnell erledigt, also: Nicht gleich aufgeben, wenn mal etwas nicht so läuft, wie man es sich vorstellt.

Noch ein Hinweis:
In Deutschland darf eine Video-Überwachungsanlage maximal einen Meter über das Privat- / Firmengelände hinaus in den öffentlichen Bereich “schauen”.
Alles was hinter diesem Meter ist, muss entweder durch sogenannte “Privacy Zones” von der Kamera selbst oder von der Software überdeckt werden.
Oder, man dreht die Kamera etwas weg …..