Einzelnen Beitrag anzeigen

Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#1

Webcam Alarmanlage - Neuronales Netz

  Alt 15. Feb 2008, 17:06
Übersicht:
Das Programm ist in der Lage, aus jeder Kamera ein Bildüberwachungssystem zu machen. Es nutzt dazu ein neuronales Netz, vergleichbar mit den Neuronen im Gehirn welche über sog. Synapsen (Gewichte) miteinander verbunden sind, nur sehr viel weniger komplex. (In diesem Fall sind nur 76801 Neuronen im Einsatz)
Das besondere daran ist, dass es v.a. für qualitativ nicht sehr hochwertige (flimmernde) Kamera sehr gut geeignet ist, da die Überwachung eben auf solch einem Netz basiert. Das neuronale Netz fungiert als eine Art KI und flimmernde Pixel zählen daher bei der Bewertung weniger als (relativ) konstant bleibende Pixel.


Beta 0.6
  • Neuronales Netz zur Auswertung der Bilddaten
  • Hotspot-Definition (Ich hoffe luwo hat nichts gegen das "Hotspot" ) zur besseren Überwachung einzelner Bildausschnitte (Hidden-Layer)
  • Minütliche (automatische) Anpassung zur besseren Langzeitüberwachung möglich
  • Quickstart-Funktion für schnellere Bereitschaft
  • Hilfe-Dokument
  • Skalierte Markierung geänderter Pixel (je nach Wichtigkeit mehr oder weniger stark)
  • Es sollten alle Komprimierungen (I420,RGB24,...) möglich sein.
  • Mit Überraschungen!!!! (auch Bugs genannt;wenn du einen findest dann poste ihn und du bekommst ein "Dankeschön")
Neuerungen 0.5 -> 0.6:
  • Verbesserte Lernformel (Modifizierte Delta-Regel)
  • "Schöneres" GUI
  • Visuelle Anzeige der Stärke der Gewichte
  • Veröffentlichung einiger Code-Segmente


Achtung: Bei einem Alarm wird ein Bild im Programmordner gespeichert (output.bmp)

Wahrscheinlich besitzt das Programm noch einige Design -und GUIBugs (falsch deaktivierte Buttons usw...).
Sollte jemand Dinge wie ne AV oder andere schwerwiegende Fehler reproduzierbar erzeugen können, bitte ich um Rückmeldung (+OS).


Beim Start erscheinen zwei Kameradialoge. Bitte im ersten Dialog folgende Daten angeben:
Auflösung: 320 * 240
Komprimierung: I420 oder RGB24 (geht auf jeden Fall, bevorzugt ist allerdings I420)

Eine Anleitung (leider nich ganz aktuell) findet ihr im Programm bei Klick auf den Hilfe-Button



Code-Snippets (PSEUDO-CODE)
Delphi-Quellcode:
procedure Lernen;
begin
(*
Das ist natürlich nicht meine ganze Lernroutine, aber das Grundgerüst.
Die ganze will ich dann doch noch nicht hergeben :-)
*)

for i := 0 to length(InputNeuronen) - 1 do
  begin
    ai := OutputNeuron.Output;
    aj := InputNeuronen[i].NettoInput;

   deltaGewicht := (ai-aj);
   //Damit die Änderungen nicht ZU minimal werden
   if (deltaGewicht < 0.015) and (deltaGewicht > 0) then
     deltaGewicht := 0.015
   else if (dGewicht > -0.015) and (deltaGewicht < 0) then
     deltaGewicht := -0.015;
   
  //Lernkonstante Epsilon wird stetig kleiner um Überlernung vorzubeugen
   neuesGewicht := Lernkonstante * deltaGewicht;

   InputNeuronen[i].Gewicht := InputNeuronen[i].Gewicht + nGewicht;
   if InputNeuronen[i].Gewicht < 0 then
     InputNeuronen[i].Gewicht := 0;
  end;
end;
Delphi-Quellcode:
procedure BerechneOutput;
begin
  OutputNeuron.Output:= 0;
   for i := 0 to length(InputNeuronen) - 1 do
     begin
        a := InputNeuronen[i].NettoInput * InputNeuronen[i].Gewicht;
        //Evtl. Aktivierungsfunktion ??
        //a := f(a);
        OutputNeuron.Output:= OutputNeuron.Output + a;
     end;
   OutputNeuron.Output := OutputNeuron.Output / length(InputNeuronen);
end;
Thx, lg Flips
Miniaturansicht angehängter Grafiken
screen3_106.png  
Angehängte Dateien
Dateityp: zip beta_108.zip (697,7 KB, 210x aufgerufen)
Philipp F.
  Mit Zitat antworten Zitat