Webcam als Helligkeitssensor.

Hallo,

könnte man nicht ein Webcam Bild benutzen, den Durchschnitt der Helligkeit der einzelnen Pixel bestimmen und den Wert in einer Variable speichern.
Währe das nicht eine Möglichkeit die Helligkeit zu bestimmen?
Ich habe leider nicht genügend Programmierkenntnisse, aber vielleicht will will es mal jemand Probieren.

Schöne Grüße
Thomas

Ich kann auch nur Vermutungen anstellen, aber regulieren die meisten (wenn nicht alle) Treiber (oder die cams hardwareseitig selbst) de Helligkeit?
Vielleicht kann man das irgendwo abgreifen!?

Kann man ziemlich sicher nicht abgreifen. Die Kameras versuchen in der Regel intern ein optimales Bild zu generieren. Einige schalten sogar selbstständig IR-LEDs zu.

Dennoch ist das Bild bei guter Ausleuchtung deutlich heller als bei Schummerlicht. Für ne einfache Helligkeitsmessung könnte es reichen. Kommt natürlich stark auf die Kamera an.

Toni

Das auslesen des Bildes kannst du dir hier angucken:

paresy

Hallo,

werde ich mir mal durch den Kopf gehen lassen.

Schöne Grüße
Thomas

Hallo,

ich probiere nun schon eine weile, aber ich bleibe immer schon der Funktion ImageCreateFromGIF stecken.

Wenn ich es mit den Zeilen von steiner Probiere:

<?php
$localImage = IPS_GetKernelDir()."\\media\\bild.gif";
$im = ImageCreateFromGIF ($localImage);
?>

bekomme ich folgende Fehlermeldung:
Fatal error: Call to undefined function ImageCreateFromGIF() in [versuche] on line 3

Was wahrscheinlich nicht der Fehler ist, mich aber trotzdem etwas verwirrt ist diese Zeile:

$localImage = IPS_GetKernelDir()."\\media\\bild.gif";

gebe ich mir $localImage per Echo aus erhalte ich:
C:\Programme\IP-Symcon\media\bild.gif

müßte es nicht so aus sehen?:

$localImage = IPS_GetKernelDir()."media\\bild.gif";

sein für:
C:\Programme\IP-Symcon\media\bild.gif

Schöne Grüße

Okey. Du hast einfach vergessen die GD2 Extension über die php.ini einzubinden.

paresy

Hallo,

Deine Fehlermeldung deutet darauf hin, dass Du die entsprechend Grafik Bibliothek nicht eingebunden hast. Du brauchst fuer PHP noch die GD Bibliothek - suche mal hier nach php_gd2.dll.

Hallo,

also, ich hab da schon mal ein fast fertiges Script im Netz gefunden, da muss ich nur noch ein paar Zahlen Zusammen rechnen und habe meinen Helligkeitswert.
PHP: imagecolorat - Manual
Da ich bei meiner Kamera die Belichtung auf manuell einstellen kann funktioniert es auch ganz gut, mal sehen wann ich mal eine Grafik habe, im Moment spiele ich noch zu viel mit den Einstellungen und Kamera Positionen herum.
Erst hatte ich sie an einen Fenster mit direkter Sonneneinstrahlung, aber direkte ist so hell das die indirekte Sonneneinstrahlung nicht vernünftig gemessen wurde. Jetzt probiere ich es gerade an einen anderen Fenster.

Schöne Grüße
Thomas

Hallo,

es gibt auch eine Möglichkeit ein DigiCam per Webcam Software auszulösen und die Bilder einzulesen, da könnte man dann aus den Bilder die Daten auslesen, damit könnte man den gesamten Dynamikbereich abdecken.

Schöne Grüße
Thomas

Hallo,

so, nun die ersten Ergebnisse, hat eine weile gedauert bis ich die passende Formel für die Berechnung gefunden hatte, aber jetzt bin ich doch ganz zufrieden mit dem Ergebniss.
Hier das Script:

<?php
   $timestamp = time(); // Uhrzeitholen nur für den Log
	$datum = date("d.m.Y",$timestamp); // Datum entschluesseln nur für den Log
	$uhrzeit = date("H:i",$timestamp); // Uhrzeit entschluesseln nur für den Log
    $img = IPS_GetKernelDir()."\\html\\bild.png"; // Verzeichniss mit dem Webcambild
    $imgHand = @ImageCreateFromPNG($img);
    $imgSize = GetImageSize($img); // Array mit den Bilddaten fuellen
    $imgWidth = $imgSize[0]; // Bildbreite aus dem Array lesen
    $imgHeight = $imgSize[1]; // Bildhoehe aus dem Arry lesen
    for ($l = 0; $l < $imgHeight; $l++) { // schleife Bildhoehe
        for ($c = 0; $c < $imgWidth; $c++) { // schleife Bildbreite
            $pxlCor = ImageColorAt($imgHand,$c,$l);
            $pxlCorArr = ImageColorsForIndex($imgHand, $pxlCor); //Array mit Pixel Farbe in RGB
            $farbe = $pxlCorArr["red"] + $pxlCorArr["green"] + $pxlCorArr["blue"]; // Summe der Pixelhelligkeit max 765
            $farbe_r = $pxlCorArr["red"]; // rot Wert 0 - 255
            $farbe_g = $pxlCorArr["green"]; // gruen Wert 0 - 255
            $farbe_b = $pxlCorArr["blue"]; // blau  Wert 0 - 255
            $farbe_sum = $farbe_sum  + $farbe; // Summe der Pixelfarben
            $farbe_sum_r = $farbe_sum_r + $farbe_r; // Summe rot
            $farbe_sum_g = $farbe_sum_g + $farbe_g; // Summe gruen
            $farbe_sum_b = $farbe_sum_b + $farbe_b; // Summe blau
        }
    }
	$farbe_d_r = $farbe_sum_r / 76800; // Durchschnitt rot Pixel ermitteln
	$farbe_d_g = $farbe_sum_g / 76800; // Durchschnitt gruen Pixel ermitteln
	$farbe_d_b = $farbe_sum_b / 76800; // Durchschnitt blau Pixel ermitteln
	$farbe_d = $farbe_sum / 76800; // Durchschnitt der Summe aus RGB 0 - 765
	$farbe_rgb = $farbe_d / 3; // Durchschnittliche helligkeit alles pixel und farben
	$helligkeit = floor($farbe_d); // Abrunden
	$helligkeit_pro = floor($helligkeit * 100 / 753); // Helligkeit auf ein 100% Skala umrechnen
	settype($helligkeit_pro,"Integer");
	SetValue(39310 /*[Sonne\Helligkeit\RGB\helligkeit_rot]*/  , (int)$farbe_d_r);
	SetValue(47558 /*[Sonne\Helligkeit\RGB\helligkeit_gruen]*/  , (int)$farbe_d_g);
	SetValue(16678 /*[Sonne\Helligkeit\RGB\helligkeit_blau]*/  , (int) $farbe_d_b);
	SetValue(43711 /*[Sonne\Helligkeit\RGB\gesamt\helligkeit_rgb]*/   , (int) $farbe_rgb);
   SetValue(43072 /*[Sonne\Helligkeit\helligkeit]*/ , $helligkeit);
   SetValue(45007 /*[Sonne\Helligkeit\helligkeit_prozent]*/  , $helligkeit_pro);
   $datei = fopen("R:\ip-symcon-log\licht.log","a"); // Logfile oeffnen
	fwrite($datei, "$datum $uhrzeit $helligkeit $helligkeit_pro $helligkeit2 $helligkeit_pro2
"); // Logfile schreiben
	fclose($datei); // Logfile schliessen
?>

und im Anhang ein paar Bilder.

Schöne Grüße
Thomas

iys8qptwg_day.png

rtyl1d7px_day.png

wp1los5zs_day.png

Echt geile sache
Mich würde mal interessieren ab die einbrüche in deinem grafen von wolken kommen oder ob das der moment ist wo die cam selbst nachregelt.
MFG Ken

Hallo,

sorry hab ganz vergessen mal zu erwähnen was ich für eine Kamera benutze, es ist eine Logitech Pro 9000, die kann man auf manuell einstellen, mit einer Kamera die selber regelt funktioniert es nicht. Ich hab es nur mal ein paar Stunden im Automatik probiert und gleich als ich gesehen hab es gibt nur eine Flatline wieder abgebrochen.

Zu den Spitzen, es handelt sich um Wolken, an Sonnentagen gibt es eine glatte Linie.
Heute ist ja wieder ein sonnen tag, das sieht es so aus wie im Anhang.

Schöne Grüße
Thomas

sonnentag.png

das ist doch mal ne geile auflösung

Hallo,

so, leider hab ich heute mein Webcam Helligkeitssensor Projekt beendet.
Jedesmal nach einen Bootvorgang musste die Webcam neu kalibriert werden, wodurch die Vergleichbarkeit der Tage nicht mehr gegeben war.
Ich konzentriere mich jetzt auf das Solarzelle als Helligkeitssensor Projekt.
http://www.ip-symcon.de/forum/f24/ds2438-helligkeitssensor-solarzelle-7182/

Schöne Grüße
Thomas

Schade
Ob die Webcam auch über php kalibriert werden kann ??

Hallo,

also der Logitech Support ist nicht sehr hilfreich, vom Schreibstyle her würde ich mal sagen die Anfragen gehen irgendwo nach Indien zu einen Ausgelagerten Support oder die haben eine gute KI die Automatisch antwortet:mad:.
Ich hab zwar schon die Einstellungen in der Registrierung gefunden, dort kann man erstens nur lesen, schreiben wird nicht übernommen und zweitens stehen alle Parameter so wie vor dem Bootvorgang und das Bild ist nur noch halb so hell.

Schöne Grüße
Thomas

Ich nehme mal stark an, du muss dazu an die WinAPI dran. So kommst du direkt ans DirectX Interface und bekommst von beliebigen Videoquellen ein Bild. Über den selben Weg kann man auch Settings hinterlegen. Ich hab damit experimentiert meine USB-Kameras mit IPS zu verwenden. Das ist deutlich billiger als überall ne Webcam zu installieren und oft muss/will man ja garnicht zig Meter Netzwerkkabel dazwischen hängen.

Toni

also mit ner mobotix cam, geht das prima …

einfach per netzwerkmeldung die helligkeit an ips schicken

Hallo stricky,

kannst Du mal bitte Stey by Step erklären,
wie man in IPS zum LUX-Wert kommt?

LG

Silvia

mobotix_senoren.png