Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Gesture - ein lernfähiges Mausgesten-Erkennungssystem (https://www.delphipraxis.net/26748-gesture-ein-lernfaehiges-mausgesten-erkennungssystem.html)

OrallY 28. Jul 2004 16:51


Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
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... .



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 (http://gesturerec.sourceforge.net).

aktuelle Version:
Gesture 0.0.2 (Pre-Alpha-Version)
Änderungen: Nur Bugfixes
Kompilat: http://prdownloads.sourceforge.net/g...a.zip?download [26KB]
Source: http://prdownloads.sourceforge.net/g...a.zip?download [23KB]

[Edit: 15. Mai 2005]
Hinweis:
Ich wurde vor Kurzem gebeten, eine neue Version von Gesture hier vorzustellen. Da allerdings aus Zeitmangel die Entwicklung nur in periodischen Intervalen vorangeht, wird es wohl noch eine Weile dauern, bis ich die nächste Pre-Alpha veröffentliche.
Bis dahin kann der Interessierte den Fortschritt im CVS Repository verfolgen:
http://cvs.sourceforge.net/viewcvs.py/gesturerec/

sCrAPt 28. Jul 2004 16:54

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Zitat:

---------------------------
Gesture Error
---------------------------
The DLL could not be loaded.
---------------------------
OK
---------------------------
Zitat:

---------------------------
Gesture Error
---------------------------
Cannot find the required DLL functions.
---------------------------
OK
---------------------------
Zitat:

---------------------------
Gesture: Gesture[1].exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x00000000" verweist auf Speicher in "0x00000000". Der Vorgang

"read" konnte nicht auf dem Speicher durchgeführt werden.


Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------
Zitat:

---------------------------
Anwendungsfehler
---------------------------
Exception EAccessViolation in Modul Gesture[1].exe bei 00000000.

Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000.


---------------------------
OK
---------------------------
^^ Alles gleich beim Start :(

Habe XP, SP1, IE6 (mit Crazy Browser)

Luckie 28. Jul 2004 16:56

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Zitat:

---------------------------
Gesture Error
---------------------------
The DLL could not be loaded.
---------------------------
OK
---------------------------
Zitat:

---------------------------
Gesture Error
---------------------------
Cannot find the required DLL functions.
---------------------------
OK
---------------------------
Zitat:

---------------------------
Gesture: Gesture.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x00000000" verweist auf Speicher in "0x00000000". Der Vorgang

"read" konnte nicht auf dem Speicher durchgeführt werden.


Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------
Zitat:

---------------------------
Anwendungsfehler
---------------------------
Exception EAccessViolation in Modul Gesture.exe bei 00000000.

Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000.


---------------------------
OK
---------------------------
Ich hoffe, es hilft. OS ist Windows 2000, SP4, IE6.

sCrAPt 28. Jul 2004 16:58

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Ein Papagei :drunken:

Luckie 28. Jul 2004 16:59

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Aber ein beserer. Ich habe zu mindest das OS, SP und IE Version angegeben. ;)

franktron 28. Jul 2004 17:05

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Er findet die mousehook.dll nicht (nur so als kleiner tipp :zwinker: )

sCrAPt 28. Jul 2004 17:07

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
wie hast du das rausgefunden?

franktron 28. Jul 2004 17:08

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Steht im Quellcode :stupid:

sCrAPt 28. Jul 2004 17:11

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
ganz vergessen dass es den auch noch gibt :oops:

OrallY 28. Jul 2004 17:13

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Hüstel :oops: Man ist das peinlich ;). Habs am ersten Beitrag verändert.

Achso, natürlich danke für das Feedback :mrgreen:

HW764 28. Jul 2004 17:15

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Gleicher Fehler kommt

Luckie 28. Jul 2004 17:17

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Dito.

OrallY 28. Jul 2004 17:22

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
So, jetzt aber. Tut mir schrecklich leid :oops:.

sCrAPt 28. Jul 2004 17:23

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
wie funktioniert das jetzt?

achso... hab die falsche zip gestartet... sorry...

S2B 28. Jul 2004 17:25

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
So, tut mir schrecklich Leid für dich! :cry:
Code:
---------------------------
Gesture: Gesture.exe - Fehler in Anwendung
---------------------------
Die Ausnahme "unknown software exception" (0xc000008e) ist in der Anwendung an der Stelle 0x004098eb aufgetreten.


Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK  Abbrechen  
---------------------------
Nach dem Loslassen der Maustaste!

System: WinXP mit SP1

sCrAPt 28. Jul 2004 17:26

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
bei mir funktioniert es?! ich hab auch XP+SP1

OrallY 28. Jul 2004 17:41

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Ok, 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
Code:
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

Code:
                        #
                        |           
                        |--- 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: http://www.mokasin.de/projects/Gesture/GestureDT.zip

OrallY 28. Jul 2004 17:43

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Zitat:

Zitat von S2B
So, tut mir schrecklich Leid für dich! :cry:
Code:
---------------------------
Gesture: Gesture.exe - Fehler in Anwendung
---------------------------
Die Ausnahme "unknown software exception" (0xc000008e) ist in der Anwendung an der Stelle 0x004098eb aufgetreten.


Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK  Abbrechen  
---------------------------
Nach dem Loslassen der Maustaste!

System: WinXP mit SP1

Passiert das bei dir bei jedem Mal?
Wenn nein, dann ist das ein Bug, denn ich noch lösen muss. Anscheindend wird irgendwo im Code eine fehlerhafte Berrechnung durchgeführt.

sCrAPt 28. Jul 2004 18:09

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
so ein programm hab ich schonmal gehabt, nur das es nur 2 Z-Formen erkennen konnte welche entweder alle fenster minimiert oder maximiert hat

OrallY 28. Jul 2004 18:13

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Wie funktioniert bei euch die Gestenerkennung?

Anubis 28. Jul 2004 18:29

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Zitat:

Zitat von OrallY
Wie funktioniert bei euch die Gestenerkennung?

gut, hatte bis jetzt keinen Fehler.

WinXP Sp2 (Pre)

zu Früh gefreut, hatte gerade nen üblen http://mitglied.lycos.de/adomszent/fehler_gesten.jpg

hab einfach die rechte Maustaste mal nicht losgelassen und eine RIESIGE Geste gezeichnet. (kam nur einmal, sonst bricht er bei zu langen Gesten ohne Fehler ab)

S2B 28. Jul 2004 18:31

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Zitat:

Zitat von OrallY
Passiert das bei dir bei jedem Mal?
Wenn nein, dann ist das ein Bug, denn ich noch lösen muss. Anscheindend wird irgendwo im Code eine fehlerhafte Berrechnung durchgeführt.

Soweit ich weiß, kam das nur einmal vor.
Danach kamen immer nur so Fehler wie "Keine Geste vorhanden" oder so! :gruebel:

Anubis 28. Jul 2004 18:45

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Wenn man jedesmal eine Geste solange zeichnet bis das Programm nicht mehr mitzeichnet, bleibt das Programm nach dem 3ten Mal (also bei der 4. grossen Geste) hängen.

SirThornberry 28. Jul 2004 18:50

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Hab bissl rumprobiert und dann hats auch mal geklappt. Was ich nicht weiß: Muss ich erst auf "Geste speichern" klicken und dann die Geste zeichnen oder umgekehrt? Hab einfach die gehste vor und nach einem klick auf "Geste speichern" gemalt so das es irgendwie klappt. Dann fände ich eine übersicht nicht schlecht wo man die ganzen gehsten sieht mit dem raum der darum liegt. wenn ich also zum beispiel ein "Z" male wöllte ich ein Fett gezeichnettes "Z" sehen damit ich weiß wie genau ich die figur nachzeichnen muss. Und dann fänd ichs noch supi wenn man die genauigkeit einstellen könnte. Also das beim erneuten zeichnen die pixel pro Punkt maximal 20 Pixel von denen der ursprünglichen Zeichnung abweichen dürfen wobei die 20 einstellbar sein soll... Wenn man das ganze noch mit funktionen dann hinterlegen lassen kann würde ich das prog auf jeden fall täglich nutzen.

Achja, noch paar dinge die ich mir wünschen würde: Es wäre nicht schlecht wenn man einstellen könnte ob der Linie auf den Desktop gezeichnet wird oder nicht. Dann wenn man noch die Tastenkombination einstellen könnte. Also das ich zum Beispiel Strg + Linke Maustaste zum erstellen einer neuen Funktion drücken muss und zum abrufen das ganze auch optional. Eventuell sogar so das man einstellen kann das die maustaste gar nicht dazu gedrückt werden muss. Also das die maus einfach nur bewegt werden muss wobei da die problematik ist herauszufinden wann meine zeichnung anfängt, aber das ist ja dann das Problem des Programmierers :wink:

Hab grad gemerkt dasses programm nen neuen ordner anlegt zur speicherung oder so, wäre ni schlecht wenn man den ort selbst bestimmen könnte.

ripper8472 28. Jul 2004 19:02

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Das Programm ist einfach genial!
Ich würd es schon benutzen, wenn ich damit einfach nur Programme ausführen könnte.
Die gespeicherten Gesten würde ich auch gerne sehen können (und eventuell sogar bearbeiten?) und Hotkeys und maximale Abweichung bei der Gestenerkennung einstellen können.

[edit] bei mir kam einmal "ZeroDivide" (Hab Win2k) als ich einen einfachen senkrechten Strich nach unten gezeichnet habe.

Gruß, Christoph

OrallY 28. Jul 2004 20:56

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
So, ersteinmal danke für das viele Feedback. :thuimb:



Zitat:

Zitat von Anubis
hab einfach die rechte Maustaste mal nicht losgelassen und eine RIESIGE Geste gezeichnet. (kam nur einmal, sonst bricht er bei zu langen Gesten ohne Fehler ab)

Ja, da muss ich im Speichermanagment ansetzten.
Zitat:

Zitat von S2B
Danach kamen immer nur so Fehler wie "Keine Geste vorhanden" oder so!

Wie im ersten Beitrag geschrieben, ist diese Fehlermeldung normal. Er erscheint, wenn die Geste nicht erkannt wurde.
Zitat:

Zitat von Anubis
Wenn man jedesmal eine Geste solange zeichnet bis das Programm nicht mehr mitzeichnet, bleibt das Programm nach dem 3ten Mal (also bei der 4. grossen Geste) hängen.

Wie gesagt, da muss ich bei Speichermanagment vermutlich was ändern.
Zitat:

Zitat von SirThornberry
Hab bissl rumprobiert und dann hats auch mal geklappt. Was ich nicht weiß: Muss ich erst auf "Geste speichern" klicken und dann die Geste zeichnen oder umgekehrt? Hab einfach die gehste vor und nach einem klick auf "Geste speichern" gemalt so das es irgendwie klappt.

Eine Geste kann erst erkannt werden, wenn sie gespeichert wurde. Also malst du z.B. ein S und gehst dann auf "Geste speichern". Von nun an sollte dann diese Geste vom Programm erkannt werden, wenn du sie nocheinmal zeichnest. Muss natürlich kein S sein, kann auch ein Zick Zack sein, oder was weiß ich. Nur solltest du die Geste wiederholen können, sonst bringt es ja nichts ;)
Zitat:

Zitat von SirThornberry
wenn ich also zum beispiel ein "Z" male wöllte ich ein Fett gezeichnettes "Z" sehen damit ich weiß wie genau ich die figur nachzeichnen muss. Und dann fänd ichs noch supi wenn man die genauigkeit einstellen könnte. Also das beim erneuten zeichnen die pixel pro Punkt maximal 20 Pixel von denen der ursprünglichen Zeichnung abweichen dürfen wobei die 20 einstellbar sein soll...

Sorry, aber ich habe keine Ahnung was du mir sagen willst ;).
Ich versuch das mal zu beantworten, auch wenn ich damit vielleicht in keiner Weise dein Anliegen beantorte, ich versuchs einfach mal: Es gibt keinerlei Vorgaben, welche Gesten du zeichnen kannst. Du kannst dir irgendetwas ausdenken. Eine Dreieck, ein zur einer Seite geöffnetes Viereck, ... was du willst. Nur musst du dir die Geste eben merken und wiederholen können. Ich weiß nicht, was du mit den 20 Pixeln Abweichung meinst :?
Zitat:

Zitat von SirThornberry
Achja, noch paar dinge die ich mir wünschen würde: Es wäre nicht schlecht wenn man einstellen könnte ob der Linie auf den Desktop gezeichnet wird oder nicht. Dann wenn man noch die Tastenkombination einstellen könnte. Also das ich zum Beispiel Strg + Linke Maustaste zum erstellen einer neuen Funktion drücken muss und zum abrufen das ganze auch optional. Eventuell sogar so das man einstellen kann das die maustaste gar nicht dazu gedrückt werden muss. Also das die maus einfach nur bewegt werden muss wobei da die problematik ist herauszufinden wann meine zeichnung anfängt, aber das ist ja dann das Problem des Programmierers :wink:

Das kommt alles noch. Wichtig war mir zur Zeit, dass ersteinmal die zugrundeliegende Engine getestet wurde. Das Programm ist noch weit entfernt, fertig zu sein (siehe Pre-Alpha-Version).
Wie schon oben geschrieben, werde ich ein komfortables Verwaltungsprogramm schreiben, wo alle gespeicherten Gesten angeguckt werden, Gesten Aktionen zugewiesen werden und Einstellungen vorgenommen werden können (z.B. die Tastenkombination).
Um das Drücken einer Taste, wenn du eine Geste zeichnest wirst du nicht drumrum kommen. Wie du sagst, anders habe ich keine Möglichkeit festzustellen, wann eine Geste begonnen wird. Außerdem könnte es dann mal leicht passieren, dass man aus Versehen eine Geste zeichnet und z.B. plötzlich das aktuelle Programm geschlossen wird.
Zitat:

Zitat von ripper8472
Die gespeicherten Gesten würde ich auch gerne sehen können (und eventuell sogar bearbeiten?) und Hotkeys und...

Wie schon gesagt, das Verwaltungsprogramm kommt noch :).
Zitat:

Zitat von ripper8472
...maximale Abweichung bei der Gestenerkennung einstellen können.

Meinst du die Erkennungstoleranz? Ich habe Stunden gebraucht um den Parametern den Wert zu geben, dass einerseits das Programm tolerant genug ist, kleinere Abweichungen zu schlucken und andererseits nicht zu tolerant ist und aus einem N ein M liest. Ein Regler einzubauen dürfte gar nicht so einfach sein. Mal sehen...


Der ZeroDivide-Fehler sowie der Fehler, der manchmal nach der Gestenzeichung auftritt, sind Probleme die mir zwar bekannt sind, aber deren Lösung ich noch nicht ersonnen habe. Die kritische Stelle ist in der GestureRec2.pas in Zeile 564 und Zeile 573 zu finden.


Die Bedienung wird auf jedenfall noch um einiges komfortabler! Doch braucht es noch einige Zei, bis Gesture so weit ist.

Bis dahin zum Testen:


Wie benutzt ich Gesture (die aktuelle Pre-Alpha-Version):
Mit gedrückter rechter Maustaste eine Geste auf den Bildschirm malen. Gefällt euch die Geste und ihr wollt, dass Gesture sie "lernt" dann geht ihr (ohne eine neue Geste zu zeichnen!) auf "Geste speichern" im Kontextmenü des TrayIcons. Von nun an sollte Gesture die Geste wieder erkennen, wenn sie irgendwann wieder auf den Bildschirm gezeichnet wird. Sollte dies der Fall sein, erscheint die Meldung "Gesture found: [Gesten-Index]". Der Index beginnt bei 0, das heißt, die erste gespeicherte Geste erhält den Index 0, die zweite 1, usw.

OrallY 28. Jul 2004 21:02

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Noch ein Hinweis, wie man am besten Gesten zeichnet, damit sie auch erkannt werden:
  • Gesten sollten nicht zu klein geraten. Sie sollten wenigsten 1/3 der Höhe des Bildschirms haben
  • Die Gesten möglichst in der Lage zeichnen, wie sie auch gespeichert wurden. Also um ein Extrem zu nennen: Ein liegendes S ist nicht gleich einem stehendem S!

So eine Gestenerkennungsroutine ist immer ein Spagat zwischen genügend Toleranz um kleinere Zeichenfehler zu ignorieren und als solche zu erkennen und nicht zuviel Toleranz, so dass plötzlich ein M für ein N gehalten wird.
"I do my very best, Mrs. Sophie."

Wiedereinmal wird deutlich, wie schwer für einen Computer etwas sein kann, wozu ein Säugling schon in der Lage wäre (und wie schwer es für den Programmierer ist, es dem Computer trotzdem beizubringen :wink:).

OrallY 28. Jul 2004 21:25

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
So, ich habe die Erkennung ein wenig Toleranter gemacht. Die Erkennung sollte nun besser funktionieren.

Kompilat: http://mokasin.de/projects/Gesture/Gesture.zip [34KB]
Sauce: http://mokasin.de/projects/Gesture/Gesture-source.zip [15KB]

NeoLuxembourg 28. Jul 2004 21:51

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Ja ja .. nich schlecht .. sehr gut sogar

Das mit der Erkennung klappt jo schon sehr gut !

Nur, nach 5 - 6 versuche .. total crach ... Windows Shell ganz verstümelt ... oO .. Versuchts nochmal ... und mache nen screen wenns geht!

[EDIT]
Nope, <Print Screen> will nicht .. :? .. ABER .. es kommt immer beim 10. Versuch!

OrallY 28. Jul 2004 22:00

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Ich glaub da stimmt irgendwas mim Speichermanagment nicht. Wenn man mal die Speicherauslastung im Taskmanager anschaut, während man Gesten zeichnet. Es kommt nur ständig was dazu ohne, dass wieder was freigegeben wird.

Ich benutze ja schon einen statischen Array mit einer Länge von 2000. Wie kann ich den Speicher wieder freigeben, der benutzt wird?

SirThornberry 28. Jul 2004 22:02

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
benutze doch einfach eine Liste (zum Beispiel TList) dann bist du nicht auf 2000 Einträge beschränkt und mitm aufräumen ist eigentlich auch kein Problem

OrallY 29. Jul 2004 09:21

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Die Idee ist gar nicht so schlecht! Ich denke ich werd mir mal selbst was zusammenhacken. Thx.

OrallY 30. Jul 2004 14:04

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Ich habe ein paar kleine Veränderungen an Gesture vorgenommen. Das wichtigste ist die Einführung einer verketteten Liste, um den Mausweg zu speichern.

Allerings besteht das Problem, dass der Speicher nach dem Zeichnen einer Geste nicht wieder freigegeben wird. Ich weiß nicht, woran das liegt:
Auszug aus GestureList.pas:
Delphi-Quellcode:
{...}
PItem = ^TItem;
  TItem = packed record
    Data: TFloatingPoint;
    Next: PItem;
  end;

procedure TGestureList.Add(APoint: TFloatingPoint; pos: integer = -1);
var
  cur_item, new_item: PItem;
begin
  GetMem(new_item, SizeOf(TItem));

  new_item^.Data := APoint;

  if pos = -1 then
    pos := ItemCount;

  if pos = 0 then begin
    cur_item := StartItem;
    new_item^.next := cur_item;
    StartItem := new_item;
    Inc(ItemCount);
  end
  else
    if pos <= ItemCount then begin
      cur_item := GetItem(pos-1);
      new_item^.next := cur_item^.next;
      cur_item^.next := new_item;
      Inc(ItemCount);
    end else Dispose(new_item);
end;

procedure TGestureList.Delete(Pos: integer);
var
  del_item, cur_item: PItem;
begin    
  if StartItem <> nil then    
    if pos = 0 then begin    
      del_item := StartItem;    
      StartItem := StartItem^.Next;
      Dispose(del_item);
      Dec(ItemCount);
    end else
      if pos < ItemCount then begin    
        cur_item := GetItem(pos-1);
        del_item := cur_item^.Next;
        cur_item^.Next := del_item^.Next;
        Dispose(del_item);
        Dec(ItemCount);    
      end;
end;

procedure TGestureList.DelAllFromItem(var Item: PItem);
begin
  if Item <> nil then begin
    if Item^.Next <> nil then DelAllFromItem(Item^.Next); //Rekursion!
    FreeMem(Item, SizeOf(TItem));
    Item := nil;
  end;
end;
{...}

OrallY 2. Aug 2004 12:13

Re: Gesture - ein lernfähiges Mausgesten-Erkennungssystem
 
Der Speicherbug ist getilgt. Es lag nicht an der genannten Unit sondern an einem vergessenen ReleaseDC in der DesktopDraw.pas. Thx to Memproof und Keldorn@delphi-forum

Gesture 0.0.2 (Pre-Alpha-Version)
Änderungen: Nur Bugfixes
Kompilat: http://prdownloads.sourceforge.net/g...a.zip?download [26KB]
Source: http://prdownloads.sourceforge.net/g...a.zip?download [23KB]


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 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