Autor Beitrag
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Mi 28.07.04 18:50 
Gesture (Pre-Alpha Version)

So, nachdem durch einen Systemabsturtz ne Menge Daten verloren gingen, habe ich mich hingesetzt und Gesture noch einmal geschrieben. Und nun ist es wieder auf dem Entwicklungsstand wie das alte.

Was ist Gesture?
Gesture ist ein lernfähiges Mausgesten-Erkennungssystem, was nichts anderes heißt, als dass man dem Programm Gesten beibringen kann, die mit der Maus einfach auf den Bildschirm gezeichnet werden.

Wie benutze ich Gesture?
Wenn das Programm gestartet wird, nistet es sich im SysTray ein. Nun kann mit gedrückter rechter Maustaste irgendwo auf dem Bildschirm eine Geste gemalt werden. Nach loslassen der Taste verschwindet die Geste sofort wieder. Im Kontextmenü des TrayIcons lässt sich mit "Geste speichern" die aktuell gezeichnete Geste speichern. Von nun an sollte Gesture, wenn diese Geste nocheinmal gezeichnet werden, diese auch erkennen (In diesem Falle erscheint die Meldung: "Gesture Found: {Gesten-Index}". Kann keine Geste erkannt, werden erscheint die Meldung: "No Gesture Found." (das ist auch der Fall, wenn noch keine Geste gespeichert wurde).

Was ich mit Gesture noch vorhabe:
Durch die Mausgesten sollen Aktionen ausgeführt werden (wie z.B: öffne Mail-Client etc.). Dabei können Gesten global gelten oder nur auf bestimmte Anwendungen beschränkt werden. Die mögliche Auswahl der Aktion soll durch ein Plugin-System erweiterbar sein. Die Aktionszuweisung soll über ein seperates Programm erfolgen, was ich wahrscheinlich mit Hilfe der VCL schreiben werde.
Auch gefallen würde mir die Aktionen über eine Scriptsprache zu realisieren, allerdings wüsste ich noch nicht, welche dafür in Frage käme... .



Ein Problem was ich zur Zeit noch zu lösen versuche ist, dass wenn man die Geste über einem Objekt (z.B. Button) zeichnet, die einen Highlight erhalten kann und sich deshalb neu zeichnet, wird über dieser Stelle die Geste nicht Ordnungsmäßig gelöscht. Eine Lösung, die allerdings unbefriedigend und langsam ist, findet sich in der DDraw-Unit.

Ich habe versucht in den Kommentare so viel zu erklären, wie möglich. Wenn etwas nicht nachvollziehbar ist, einfach nachfragen.

Also, wer Lust hat, kann sich in den Code einarbeiten (wobei ich natürlich helfe, so gut ich kann) und mitprogrammieren, ist ja schließlich OpenSource :). Wenn das Programm ersteinmal soweit ist, dass es auch benutzbar ist, werde ich es unter Sourceforge veröffentlichen (gesturerec.sourceforge.net).

aktuelle Version:
Gesture 0.0.2 (Pre-Alpha-Version)
Änderungen: Nur Bugfixes
Kompilat: prdownloads.sourcefo...rerec/Gesture_0.0.2_ ... p?download [26KB]
Source: prdownloads.sourcefo...rerec/Gesture_source ... p?download [23KB]

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...


Zuletzt bearbeitet von O'rallY am Mo 02.08.04 13:17, insgesamt 5-mal bearbeitet
O'rallY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Mi 28.07.04 18:50 
Eine kurze Erläuterung der Funktionsweise:

Wenn eine Geste auf den Bildschirm gezeichnet wird, werden erstmal die ganzen Koordinaten gespeichert. Da diese Punkte unregelmäßige Abstände zueinander haben, werden die Abstände ersteinmal mit InterpolateMouseway vereinheitlicht. Das bedeutet Punkte die zu dicht zusammenliegen werden aufgelockert und bei zu hohem Abstand neue hinzuberechnet. So, jetzt ist ersteinmal die Grundlage geschaffen.
Jetzt geht es weiter, indem die Geste auf Richtungswechsel überprüft wird (das geschieht mit GetImportantPoints). Der Punkt, wo der Richtungswechsel auftritt wird gespeichert. Sind alle Richtungswechsel erfasst werden der Geste mit FillGesture noch weitere Punkte hinzugefügt. Die Geste wird also auf auf die in GESTUREIPC angegebene Anzahl reduziert.
Wenn nun zwei Gesten miteinander verglichen werden, geschieht das in zwei verschiedenen Verfahren(CompareGestures:

Verfahren 1
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
P = Punkt (ImportantPoint)                             
                                                          
                   o P3                                   
                  /                                       
                 / . ------------- dieser Winkel          
  P1 o----------o- - - - - #                              
                P2


Hier wird die Abweichung festgestellt, die Strecke P2-P3 von P1-P2 macht. Je nachdem in welche Richtung die Abweichung geschieht ist die Gradzahl negativ oder positiv.

Verfahren 2

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
                        #
                        |           
                        |--- gedachte Linie
                      . |                                  
   dieser Winkel  ---:  o P1                               
                      ./                                   
                      /                                                
                     /                                     
                 P2 o


Hier wird der Winkel zu einer gedachten Linie, die paralell zur Y-Achse verläuft ermittelt.


Der Algorithmus geht Punkt für Punkt beide Gesten durch und vergleicht sie miteinander. Sind am Schluss nur wenig Abweichungen zwischen den Gesten ermittelt worden, gilt die Geste als erkannt. Sind es zuviele, dann nicht.


Ist das verständlich?

Ich habe zur Entwicklung ein Programm geschrieben, dass das ganze ein wenig grafisch aufbereitet (nicht zu viel erwarten: www.mokasin.de/proje...esture/GestureDT.zip

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
O'rallY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Mi 28.07.04 18:53 
Es kann sein, dass beim Zeichnen einer Geste ein Fehler auftreten kann. Das ist ein Bug den ich noch beheben muss, allerdings weiß ich noch nicht wie :) (GestureRec2.pas - Zeile 564 und Zeile 573).

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
O'rallY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Fr 30.07.04 15:07 
Ich habe ein paar kleine Veränderungen an Gesture vorgenommen. Das wichtigste ist die Einführung einer verketteten Liste, um den Mausweg zu speichern.
Außerdem sollte der oben genannte Bug behoben sein.

Allerings besteht das Problem, dass der Speicher nach dem Zeichnen einer Geste nicht wieder freigegeben wird. Ich weiß nicht, woran das liegt.
Gesture 0.0.1 (Pre-Alpha-Version)
Kompilat: mokasin.de/projects/Gesture/Gesture.zip
Source: mokasin.de/projects/...e/Gesture-source.zip

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...


Zuletzt bearbeitet von O'rallY am Sa 31.07.04 12:48, insgesamt 1-mal bearbeitet
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Fr 30.07.04 18:13 
Hättest du auch die Möglichkleit, die Dateien zu zippen?

Danke Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Sa 31.07.04 09:52 
bei mir funktionierts schon recht gut !
du müsstest noch ein bisschen am wieder erkennungs algo feilen aber sonst ist das prog schon recht gut

_________________
In the beginning was the word.
And the word was content-type: text/plain.
O'rallY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Sa 31.07.04 12:54 
Schade, dass RAR immer noch kein Standard ist.

Gesture 0.0.1 (Pre-Alpha-Version)
Kompilat: mokasin.de/projects/Gesture/Gesture.zip
Source: mokasin.de/projects/...e/Gesture-source.zip

matze hat folgendes geschrieben:

du müsstest noch ein bisschen am wieder erkennungs algo feilen aber sonst ist das prog schon recht

Tjo, das ist halt die Sache :). Die Erkennungsroutinen sind logischerweise der Knackpunkt an dem Programm, weil sehr schwer zu realisieren. Aber du hast schon recht. Also wer noch Ideen hat, wie ich sie konkret verbessern kann, her damit.

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: Sa 31.07.04 17:25 
O'rallY hat folgendes geschrieben:

Allerings besteht das Problem, dass der Speicher nach dem Zeichnen einer Geste nicht wieder freigegeben wird. Ich weiß nicht, woran das liegt.

such nach dem programm Suche in: Delphi-Forum, Delphi-Library MEMPROOF. Du hast in unit DesktopDraw für das getwindowdc kein releasedc stehen. Als letzte Zeile ein releaseDC(0,desktopDC); und ich habe keine Problem mehr mit der Speicheranzeige im Taskmanager.

Deine andere Frage mit der liste wäre dann auch erledigt?

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
O'rallY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Sa 31.07.04 18:53 
Jo, super. Danke!!! Das mit dem Speicher hat mich echt zum Grübeln gebracht, dank dir kann ich heut nacht wieder gut schlafen ;).

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
O'rallY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Mo 02.08.04 13:34 
Speicherproblem gefixed und ein paar andere fixes.
Gesture 0.0.2 (Pre-Alpha-Version)
Änderungen: Nur Bugfixes
Kompilat: prdownloads.sourcefo...2_alpha.zip?download [26KB]
Source: prdownloads.sourcefo...2_alpha.zip?download [23KB]

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...


Zuletzt bearbeitet von O'rallY am Di 12.10.04 16:37, insgesamt 1-mal bearbeitet
Leathl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 276



BeitragVerfasst: So 10.10.04 19:21 
---


Zuletzt bearbeitet von Leathl am Sa 15.08.09 16:12, insgesamt 1-mal bearbeitet
O'rallY Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Di 12.10.04 16:39 
Hi,

evtl. kann das Programm deine Geste nicht erkennen. Da ich aber zur Zeit in der Schule recht viel Stress habe, habe ich das Programmieren vorerst eingestellt. Vielleicht finde ich in den Ferien wieder ein bisschen Zeit. Trotzdem danke für den Hinweis!

greez

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...