Ü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