AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Webcam Alarmanlage - Neuronales Netz
Thema durchsuchen
Ansicht
Themen-Optionen

Webcam Alarmanlage - Neuronales Netz

Ein Thema von Flips · begonnen am 15. Feb 2008 · letzter Beitrag vom 29. Nov 2008
Antwort Antwort
Seite 3 von 7     123 45     Letzte »    
Flips
Registriert seit: 17. Feb 2005
Ü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)
 
Flips

 
Delphi 7 Professional
 
#21
  Alt 15. Feb 2008, 20:54
OK dann weiß ich an was es liegt, fixed version ist in ner minute ersten Post zu finden!

Und noch ein großes Danke euch BEIDEN!!!!!!
Philipp F.
  Mit Zitat antworten Zitat
Benutzerbild von luwo
luwo

 
Delphi XE2 Enterprise
 
#22
  Alt 16. Feb 2008, 09:38
Zitat von Flips:
OK dann weiß ich an was es liegt, fixed version ist in ner minute ersten Post zu finden!
Und noch ein großes Danke euch BEIDEN!!!!!!
Ok, dieser Fehler scheint gefunden (bei mir):
Habe das Videoformat von RGB24 auf I420 umgestellt, und siehe da, Normalbild kommt.

Vielleicht noch ein paar kleine Anmerkungen zur Programmbedienung:

Beim Klick auf [Alarm aktivieren] passiert (sichtbar für den Benutzer) erstmal irritierenderweise gar nix.
Da sollte irgendein Feedback sichtbar/hörbar sein (z.b. Countdown in der Caption: "Starte Alarm in 5,4,3,2,... Sekunden")

Wenn der Alarm aktiviert wird (rotes Formular) passiert wiederum für ein paar Sekunden gar nix (oder nur für den Benutzer nicht sichtbar?)
Auch die Anzeige unten bleibt scheinbar stehen, nach ein paar Sekunden gehts dann weiter.

btw: Für die Anzeige des Alarms würde ich ein kleines TShape (Kringel irgendwo auf dem Hauptfenster) verwenden
(ist aber nur meine kleine ästhetische Meinung )



Ein kleiner Bug:
Wenn ohne vorher auf [Normalbild] zuerst auf [x-mal lernen] geklickt wird,
kommt folgende Fehlermeldung: "Bereichsüberschreitung bei Zeilenindex."
Sicherlich nur ne Kleinigkeit

Ansonsten finde ich das Programm und die hinterliegende Idee super!

Güße Luwo
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

 
FreePascal / Lazarus
 
#23
  Alt 16. Feb 2008, 10:37
Bei mir funktioniert es jetzt auch.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

 
Delphi 2009 Professional
 
#24
  Alt 16. Feb 2008, 10:49
Eine Frage zu den Programm (ich selber habe keine Webcam, kann es also net testen):
Wie häufig nimmt das Programm ein Bild auf, sobald eine Störung reinläuft?
Nur einmal? Dann müsste man sich ja nur mit dem Rücken voran reinkommen xD

MfG
xZise
Fabian
  Mit Zitat antworten Zitat
Flips

 
Delphi 7 Professional
 
#25
  Alt 16. Feb 2008, 13:37
Zitat von luwo:
Beim Klick auf [Alarm aktivieren] passiert (sichtbar für den Benutzer) erstmal irritierenderweise gar nix.
Da sollte irgendein Feedback sichtbar/hörbar sein (z.b. Countdown in der Caption: "Starte Alarm in 5,4,3,2,... Sekunden")
Ist ja erst ein Prototyp -> Aber trotzdem ne gute Idee
Zitat von luwo:
Wenn der Alarm aktiviert wird (rotes Formular) passiert wiederum für ein paar Sekunden gar nix (oder nur für den Benutzer nicht sichtbar?)
Auch die Anzeige unten bleibt scheinbar stehen, nach ein paar Sekunden gehts dann weiter.
Da war ursprünglich mal ein Alarmsound, den hab ich allerdings gelöscht, das Delay ist aber noch drin.
Ich denke nächste Woche kann ich ne Beta releasen, dann wird das schon
Zitat von luwo:
btw: Für die Anzeige des Alarms würde ich ein kleines TShape (Kringel irgendwo auf dem Hauptfenster) verwenden
(ist aber nur meine kleine ästhetische Meinung )
Prototyp Geht ja erstmal nur um die Nachricht "Achtung, da ist was passiert". In der Beta sollte das dann auch schöner aussehen

Zitat von luwo:
Ein kleiner Bug:
Wenn ohne vorher auf [Normalbild] zuerst auf [x-mal lernen] geklickt wird,
kommt folgende Fehlermeldung: "Bereichsüberschreitung bei Zeilenindex."
Sicherlich nur ne Kleinigkeit
Jap weiß ich, da man das einfach mit Enabled regeln kann -> Wird in Beta so sein

Zitat von luwo:
Ansonsten finde ich das Programm und die hinterliegende Idee super!
Dankee!!

Zitat von xZise:
Eine Frage zu den Programm (ich selber habe keine Webcam, kann es also net testen):
Wie häufig nimmt das Programm ein Bild auf, sobald eine Störung reinläuft?
Nur einmal? Dann müsste man sich ja nur mit dem Rücken voran reinkommen xD
Selbst wenn ich ein Video davon aufzeichnen würde, ein Dritter könnte immer noch unerkannt mit dem Rücken zur kamera gehn. Das ist kein Programmfehler an sich.
Allerdings hast du insofern recht, dass mir schon der (Logik-)Fehler aufgefallen ist. Man erkennt ihn in der Reihenfolge, in welcher eine Überschreitung des Grenzwerts abgearbeitet wird.

Bild capturen
Überprüfen
Alarm ausgeben
Bild capturen
Bild speichern

Da die Überprüfung ja einige ms dauern kann sollte ich das 2. "Bild capturen" wohl rauslassen, da dann unter Umständen niemand mehr zu sehen ist
Philipp F.
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

 
Delphi 2005 Personal
 
#26
  Alt 16. Feb 2008, 13:46
Ich habe gerade keinen Zugriff auf Windowsrechner, finde den Ansatz mit einem NN aber interessant. Könntest du vielleicht etwas über den Aufbau sagen (inputNeuronen, wieviele verdeckte Schichten, Anzahl OutputNeuronen, Lernfunktion,usw)?

Warum hast du dich überhaupt für ein NN entschieden? Einfach so, weil die Teile lustig sind, und du es ausprobieren wolltest?
Spontan wäre mir bei einer Alarmanlage eingefallen, die Differenz zweier Bilder zu berechnen und dann den Fehler aufzusummieren.
  Mit Zitat antworten Zitat
Benutzerbild von LDericher
LDericher

 
Delphi 7 Enterprise
 
#27
  Alt 16. Feb 2008, 13:58
Zitat von Flips:
OK dann weiß ich an was es liegt, fixed version ist in ner minute ersten Post zu finden!

Und noch ein großes Danke euch BEIDEN!!!!!!
Welches ist denn nun die mehr oder weniger endgültige Version???

Bei mir kommt "Indexüberschreitung" oder so was in der art...
  Mit Zitat antworten Zitat
Flips

 
Delphi 7 Professional
 
#28
  Alt 16. Feb 2008, 14:05
Zitat von Nikolas:
Ich habe gerade keinen Zugriff auf Windowsrechner, finde den Ansatz mit einem NN aber interessant. Könntest du vielleicht etwas über den Aufbau sagen (inputNeuronen, wieviele verdeckte Schichten, Anzahl OutputNeuronen, Lernfunktion,usw)?

Warum hast du dich überhaupt für ein NN entschieden? Einfach so, weil die Teile lustig sind, und du es ausprobieren wolltest?
Spontan wäre mir bei einer Alarmanlage eingefallen, die Differenz zweier Bilder zu berechnen und dann den Fehler aufzusummieren.
Genau das habe ich ja vorher gemacht
Habe auch einen eigenen Interpolierungsalgorithmus für SW-Bilder geschrieben, damit das Flimmern ein wenig gefiltert wird. Das geht auch gut, aber dann ist mir der Gedanke mit einem NN gekommen, zumal ich ja schonmal ein Programm mit einem NN hier vorgestellt habe.
Ein NN arbeitet ja eigentlich ganz grob gesagt danach: Lerne, wichtiges von unwichtigem zu unterscheiden bzw. was welcher Zustand aussagt.
Und das NN ist jetzt so programmiert, dass es lernt, Pixel die sich stark verändern (Beispielsweise ein Blinklicht) oder einfach nur stark flimmernde Pixel weniger zu zählen als Pixel die nahezu konstant bleiben.

Zur Veranschaulichung:
Ich ordne jedem Pixel ein Inputneuron zu. (Eine gute Idee für einen Hidden-Layer wäre, 4 Pixel die ein Quadrat bilden zu einem Neuron zusammenzufassen).
In der Lernfunktion wird nun die Abweichung jedes aktuellen Pixels zum Normbild geprüft. Vorgabe ist : Unterschied soll 0 sein. Wenn der Unterschied jetzt einen gewissen Toleranzwert (5% hier) überschreitet, dann hat das Neuron die Anforderung nicht erfüllt -> es bekommt den Output 1, anders bekommt es den Output 0.

Dann in der eigentlichen Lernfunktion wird jenachdem ob ein Neuron sich verändert (=1) oder gleich geblieben ist (=0) die Synapse (das Gewicht) zum Endergebnis berechnet.
Als Beispiel:

2 Neuronen, das eine flimmert, das andere bleibt relativ konstant.
Beide haben zu Anfang ein Gewicht von 0.
Das flimmernde Neuron ist beim Vergleich mit dem Normbild durchgefallen, das andere hat bestanden.
D.h. das konstane Neuron bekommt Gewicht gutgeschrieben, das andere Gewicht abgezogen.
Wenn dieser Lernvorgang oft genug gemacht wurde, weiß das NN wie es die Pixel einzustufen hat.


Inputneuronen gibts 320*240 stück,
Outputneuronen gibt es 1.
Hidden-Layers gibt es noch (!) keine, werd ich mich aber jetzt ans Werk machen.

Zitat von Superwinger:
Die Stable-Version ist im ersten Post, wo die Anleitung auch steht
Philipp F.
  Mit Zitat antworten Zitat
Benutzerbild von luwo
luwo

 
Delphi XE2 Enterprise
 
#29
  Alt 16. Feb 2008, 17:46
Zitat von Flips:
Hidden-Layers gibt es noch (!) keine, werd ich mich aber jetzt ans Werk machen.
Bin schon gespannt

Hatte auch schon mal ein kleines Projekt zur MotionDetection implementiert.
Prinzipielles Vorgehen war, wie Nikolas schon anmerkte:
Differenzbilder berechnen (möglichst über MEHR als nur 2 Bilder!)
und dann dem Benutzer die Möglichkeit geben innerhalb des Videofensters
Bereiche definieren zu lassen (z.B. Eingangstür) die besonderer Beachtung bedürfen. (Hotspots)
Habe dazu auch erstmal die Bilder in Graustufen umgerechnet, weil die Farbinformation
(in meinem Fall) völlig irrelevant waren.
Wenn ich mich recht erinnere hab ich auch noch ein Histogramm der Bilder errechnet
um möglichen Lichtschwankungen (die ja nicht wirklich am Bildinhalt was ändern) herauszufiltern.
Quasi ein Entschärfen von Bildänderungen.

Tipp: Zum Thema n Pixel zusammenfassen, Graustufenfilter usw.
gibt es viele (schnelle) Routinen in der Graphics32-Library

Grüße Luwo
  Mit Zitat antworten Zitat
GeMo

 
Delphi 7 Professional
 
#30
  Alt 16. Feb 2008, 17:51
also bei mir funktioniert die anzeige der webcam leider garnicht.
aber anscheinend liegt das wohl irgendwie an meiner kamera (Logitech QuickCam). In anderen Anwendungen wie z.b. Skype oder ICQ geht sie einwandfrei.
Die Funktion aus der CodeLib funktioniert bei mir auch nicht und zeigt immer nur ein blaues Bild an, genau wie bei dieser Anwendung hier..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 7     123 45     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz