PostHeaderIcon Der WebServer auf Raspberry PI

Die Portierung der WebServer Software von der i586 Architektur zu ARM. Ein kleines Feierabend Projekt ....

Nun das Ergebnis: Der Webserver läuft jetzt auch mit einem Raspbian Wheezy1 auf einem Raspberry PI. Der Quellcode für die WebCam-Software  Camsource (nun Version 0.7.1) musste allerdings von dem alten v4l Treiber auf den aktuellen v4l2 gepatcht  und auf dem RasPI neu kompiliert werden. Im Netz gibt es für den Videotreiber von openSUSE eine sehr gute Hilfe aus dem Jahr 2013. Der bisher eingesetzte Treiber sqcam905 wird hier nicht mehr benötigt, die WebCam wird nun von dem v4l2 Treiber erkannt. Die nachfolgend aufgeführten Programme können alle aus dem RasPI Repository installiert werden. Als Webserver kommt auf dem kleinen Minirechner der Lighttpd zum Einsatz, da der Apache2 für den RasPI zu resourcenhungrig ist.

Bild 1: So meldet sich der RasPI-Webserver.

Das Content-Management-System (CMS) Joomla läuft nur gemeinsam mit dem MySQL Server, daher wurde  dieser auch anstelle einer schlankeren Lösung installiert. Als FTP Server wird der bekannte ProFTPD Server verwendet. Der Inhalt des Webserververzeichnisses ließ sich einfach vom bestehenden Rechner auf den RasPI übertragen. Einige config- Dateien mussten allerdings noch händisch auf die neue Serverumgebung angepasst werden. Einige Dateirechte wollten auch noch korrigiert werden.

Raspi mit Camera

Ansonsten läuft alles überraschend stabil und für meine Belange mit ausreichender Geschwindigkeit. Große Leistung darf man allerdings nicht erwarten, der RasPI ist in seiner Performance vergleichbar mit einem PII mit 300 MHz. Dennoch habe ich eine praktikable Ersatzlösung zur Hand, falls einmal mein miniITX- Rechner ausfallen sollte.

 

Bild 2:

Der RasPI-Webserver mit WLAN-Modul und alter Pencam aus dem Jahr 2002

 

Da nun der WebCam-Treiber im Kernel eingebunden ist, kann man die Gamma-Werte nicht mehr händisch wie bei der bisherigen Lösung unter Kernel 2.6. einstellen. Daher musste ich die Gamma-Funktionalität in die Anwendersoftware übertragen. Die WebCam-Software für RasPI und für einfache 8-Bit Kameras mit neuer Gamma-Korrektur ist hier unter "Download WebCamSoftware" als Quellcode sowie als rpm für openSUSE 13.2 herunterladbar. In den Bildergalerien unter Webcam-Bilder sind einige Beispiele für die Gamma-Umschaltung zu sehen. Die ersten Bilder zeigen die Einstellung bei Gamma 3, gegen Ende ein Bild mit Gamma 5. Bei zunehmender Dunkelheit dann die Einstellung bei Gamma 6 und das Schlussbild schließlich wieder bei Gamma 3 zwecks Rauschunterdrückung.

 

Zusammenfassung:

Die WebCam-Software Camsource 0.7.1 ist mit meinen hinzugefügten Modulen Sharpen, Saturate (Farbwert und Farbsättigung) und gerade auch mit Gamma in der Lage, das optimalste Bild aus einer billigen VGA-USB-Cam aus der Bastelkiste herauszuarbeiten. Sie eignet sich somit perfekt für eigene kleine private Projekte, auch mit dem RasPI, im Heim und Garten.  Sicher, es gibt die RasPI-Cam, die kostet aber auch über 30 Euro und kann ohne Lötarbeit nur direkt am RasPI und nicht wie bei USB über mehrere Meter Kabel abgesetzt angeschlossen werden. Gewiss, es gibt wesentlich bessere Webcam-Bilder im Netz. Da kostet aber die Proficamera schnell schon einmal 1000 Euro. Somit nicht wirklich etwas für den Privatmann.

Einstellmöglichkeiten der neuen Module von Camsource 0.7.1:

- Modul Gamma:

Rot-Verstärkung, Grün-Verstärkung, Blau-Verstärkung, Rot-Offset, Grün-Offset, Blau-Offset, Autom.Gamma Ein/Aus, Gamma-Schaltgrenzen für Winter und Sommer, Hysterese, Log-Datei Ein/Aus (zur Ermittlung der standort-abhängigen Schaltpunkte), Bildgröße.

- Modul Saturate:

Farbwert, Farbsättigung, Helligkeit, Bildgröße.

- Modul Sharpen:

Bildschärfe von 0 bis 100% einstellbar.

Anmerkung: Einige Module erlauben, die Helligkeit zu ändern. Bitte bei Bedarf nur bei EINEM Modul den Wert anpassen. Bei der Funktion Helligkeit werden durch Aufaddieren eines konstanten Wertes die resultierenden Bildwerte größer 255 abgeschnitten (gilt auch für Werte kleiner Null). Somit gehen in der Folge Bildinformationen verloren.

 

Die Funktionsweise der automatischen Gamma-Umschaltung/Nachführung

An dieser Stelle wird kurz auf die Funktionsweise der Gamma-Anpassung eingegangen. Die verwendete Webcam benutzt eine interne Helligkeitsreglung, die von außen nicht zu steuern ist. Ein komplett schwarzes Bild hat gemittelt über alle Bildpunkte einen Helligkeitswert von Null, bei einem kompletten weißen Bild einen Wert von 255. Die Kamera liefert einen durchschnittlichen Wert von ca. 35, unabhängig ob das Bild einen trüben Tag oder ein helles sonniges Bild zeigt. Eine Gammakorrektur, am besten eine automatische ist daher notwendig, da sonst bei einem trüben Wintertag und einem Gamma von 3 das Bild zu dunkel und die Wolken zu "bedrohlich"  wirken, ein Wert von Gamma 5 liefert jedoch bei einem sonnigen Tag ein zu helles Bild. Eine Lösung hierfür ist das automatische Nachführen des Gammawertes. Dies habe ich in dem neuen Modul gamma.c wie folgt umgesetzt:

Wenn das aktuelle Bild heller ist als das vorhergegangene, wird ein Zähler um einen Schritt erhöht, im umgekehrten Fall um einen Schritt dekrementiert. Die Kamera regelt darüber hinaus bei zunehmender Helligkeit (Morgenlicht bis Mittagszeit) immer wieder gestuft auf auf einen Wert von ca. 35 ab. Jedes mal, wenn ein solcher Sprung stattfindet (z.B. von 45 auf 35) wird dieser Zähler auch um einen Schritt erhöht. Nachmittags, wenn die Sonne wieder sinkt, hält die Kamera mit einer gestuften Helligkeitserhöhung dagegen. Bei jedem dieser Stufensprünge wird nun dieser Zähler dekrementiert. Bei dann vollkommener Dunkelheit wird dieser Zähler auf Null gesetzt und ein eventuell aufgelaufener Offset kompensiert. Am nächsten Tag kann dann wieder ein neuer Zyklus beginnen.

Über den Tageslauf erhält man so einen glockenförmigen Integralverlauf, dessen Maximalwert von der maximalen Tageshelligkeit abhängt. Dieser ist umso höher,  je heller der Tag war (Die Kamera muss ja zusätzliche Helligkeitssprünge durchführen). Durch geeignete Umschaltpunkte an dieser Kurve entlang kann man daran mit einer Hysterese die Gamma-Umschaltung festmachen. Je heller der Tag wird, desto mehr Gamma-Stufen kann man zurücknehmen (hier umgesetzt Gamma 6->5->4->3). Im umgekehrten Fall führt man Gamma wieder gestuft auf Gamma 6 zurück. Das nachfolgende Bild einer Tagesgangkurve veranschaulicht diesen Vorgang.

Bild 3:  Exemplarische Tagesgangkurve

Die blaue Linie ist die gemittelte Helligkeitskurve, die die Kamera liefert. Die rote Kurve zeigt den Integralanteil des Kamerasignals. Der Verlauf der grünen Treppenkurve in Abhängigkeit der roten Tagesgangkurve steht als Eingangssignal  für die nachfolgende Gamma-Umschaltung zur Verfügung. Die Umschaltpunkte liegen hier im Beispiel bei 80 für Gamma 4 und bei 120 für Gamma 3 mit jeweils einer Hysterese von +/- 5. Diese Werte sind an die realen Gegebenheiten anpassbar und in der camsource-config Datei einstellbar. Am Ende des Zyklus schalte ich auf Gamma 3 um, um das Bildrauschen im dann schwarzen Bild zu reduzieren. Die Gamma-Werte 2, 1 und Null finden hier keine Anwendung.

Das Sonnenstandsdiagramm ist bei der Behandlung der Gamma-Umschaltpunkte ebenfalls zu beachten. Die Sonnenbahn im Winter ist in unseren Breiten ja wesentlich niedriger als im Sommer. Daher sind im Sommer ja auch die Tage länger. Diese Verschiebung muss in der Behandlung der Umschaltpunkte berücksichtigt werden. Sonst erfolgt die Umschaltung auf die nächste Stufe im Sommer zu früh und man erhält bei einem trüben Sommertag ein zu dunkles Bild. Die Software korrigiert diese Werte abhängig von dem jeweiligen aktuellen Monat selbstständig. In Richtung Sommer werden die Werte der Umschaltung vergrößert, in Richtung Winter wieder reduziert. So erfolgt eine mögliche Gamma-Umschaltung über das Jahr betrachtet immer in etwa um die gleiche Zeit bei ähnlichen Belichtungsverhältnissen. Bild 4 zeigt in ein solches Diagramm eingetragene Umschaltpunkte in Abhängigkeit der Jahreszeit.

Bild 4: Sonnenstandsdiagramm    (Quelle: Wikipedia)

Das hier abgebildete Diagramm ist nur als Beispiel zu sehen, die Kurven sind ja Standort und auch Kameraabhängig. Die grünen Bänder kennzeichnen grob die Schaltpunkte. Die Werte können für den Winter (1.Januar) sowie für den Sommer (1.Juli) in der camsource.conf Datei je nach Bedarf eingestellt werden. Die Zwischenwerte berechnet das Programm selbst. Zur Ermittlung der örtlichen Maximalwerte kann in der camsource.conf ein Schalter <log> auf „on“ gesetzt werden, der u.a. die Integralwerte in die camsource.log Datei hinein schreibt. Dort kann man sie mit einem Texteditor wieder auslesen und die Umschaltwerte entsprechend des eigenen Standortes anpassen. Die Standarteinstellung für <log> ist „off“, da sonst die Log-Datei zu groß wird, also nur für Testzwecke einzusetzen ist.


Idee, Konzept und Umsetzung:   Jürgen Körner 2015

 

Aktualisiert (Sonntag, den 27. September 2015 um 16:20 Uhr)