Mustererkennung: Library und Ansatz



  • Hi,

    ich habe eine konkretes Pattern Recognition Problem welches ich lösen möchte. Meine erste Idee war, ein Online Board zu suchen in dem es konkret um solche Themen geht, aber Google konnte mir nicht weiterhelfen (falls ihr eins kennt, also Computer Vision / Pattern Recognition Foren, dann postet doch bitte einen Link).

    Ich möchte ein System erstellen dass statische Handposen (aus einem vom Benutzer definierbaren Alphabet (Satz) an Posen) erkennen kann. Es ist dem Benutzer überlassen, das System zu trainieren. Der "Active Learning" Ansatz wird verwendet, d.h. der Benutzer definiert eine neue Geste (mit Namen), macht dann mit seiner Hand NUR diese Geste und nimmt ein Video davon auf (d.h. wir haben am Ende für jede Geste tausende von Frames/Samples in Form von RGB Bildern). Beispiel: Vicory Geste, Spock Geste, und "garbage" (Benutzer "trainiert" das system mit anderen Gesten die das System als "unbekannt" bzw. "egal" erkennen soll).

    Ich kann durch verschiedene Hilfsmittel erreichen, dass die Samples wirklich nur die Hand beinhalten, also die Hand bereits ausgeschnitten ist. Allerdings ist es NICHT möglich, die Hand immer in die korrekte Ausrichtung (Rotation) zu bringen, da die Analyse wiederum zu aufwändig wäre. Der Ansatz soll "dumm" sein, also im Prinzip weiß die verwendete Technik nix davon dass es Hände sind die da erkannt werden. Skalieren, sodass alle Samples gleich groß sind, ist aber möglich.

    Allgemeines Problem: eine bestimme Pose, z.B: Victory Pose:
    - erscheint immer ein bisschen anders in der Bild-Projektion, einfach wg. Perspective foreshortening und Blickwinkel der Kamera
    - Cluttered Background ist durchaus vorhanden, das System soll dagegen robust sein

    Ich wollte eigentlich bekannte Ansätze aus der Face-Detection verwenden, aber das geht ja nicht, da die Learning-Algorithmen davon ausgehen, dass die Objekte des Trainingsets immer zentriert und ungefähr die richtige Orientierung (Rotation) haben. Letzteres ist bei meinen Trainingsamples NICHT der Fall, deshalb wäre eine Dimensionsreduktion z.B. mit PCA schwachsinnig.

    Jetzt stehe ich halt vor dem Problem wie ich es am einfachsten trotzdem implementieren kann, am besten mit geringem Aufwand (sprich: wo es bereits C++ libraries gibt die mich unterstützen). Bisher hab ich schon etwas im http://szeliski.org/Book/ Buch geblättert (speziell Kapitel "Recognition"). Am ehesten würde mich also interessieren ob es möglich ist, Ansätze die ähnlich zur Face-Detection sind, zu verwenden, die Rotation-Invariant sind, SOWOHL beim Training ALS AUCH bei der Detection.

    Grüße! 🙂



  • Schade, keiner scheint davon was zu verstehen 😃

    Naja, wenigstens bin ich weitergekommen was Computer Vision Foren angeht. z.B. die Open CV mailing Liste: http://tech.groups.yahoo.com/group/OpenCV/

    Oder: Diverse Gruppen auf LinkedIn, z.B. http://www.linkedin.com/groups/Computer-Vision-Pattern-Recognition-2642596

    Werde mich da mal schlau machen.



  • Hallo,

    nicht einfach. 🙂

    Die Erkennung einer Hand ist mit OpenCV ein relativ leicht lösbares Problem, dabei erhälst du letztlich Vektoren, welche dir die jeweilige Position der Finger liefern.

    Zunächst ist die Frage, ob du Gesten deuten, sprich verstehen willst:
    Mein naiver Ansatz wäre, eine Norm || || zu modellieren, um damit das Verhältnis zwischen den Fingern quantitativ zu bewerten.
    Beispiel: Angenommen, die Fingerlänge ist ermittelbar (sollte mit OpenCV lösbar sein). Seien V := { v_0,...,v_n } aus IR^2 die Positionen der Fingerspitzen, v' := max(||v_i||), v'' := min(||v_i||) für 1 <= i <= n und ||v'-v''|| entspricht in etwa der Zeigefingerlänge und für v_0:=(x_0,y_0),...,v_n:=(x_n,y_n) gilt je x_i < x_j für i < j, würde ich auf eine ausgestreckte Hand deuten.

    Da der jedoch Benutzer das System aktiv trainiert, kannst du mit den Daten ein neuronales Netz füttern, welches die Musterraumklassifizierung für dich vornimmt. Genau dazu ist ein NN ja da: der konkrete Algorithmus ist unbekannt, also wird die Hyperebene, welche den Musterraum partitioniert, eben durch ein NN approximiert. Überlege dir dazu eine sinnvolle Datenstruktur zur Beschreibung der Hand. Das ist natürlich nicht gerade trivial, aber es sollte im Internet schon entsprechende Papers dazu zu finden sein, etwa
    http://personal.ee.surrey.ac.uk/Personal/T.Windeatt/msc_projects/symeonidis/Final Project.pdf

    So, mehr fällt mir atm nicht ein.



  • NameZero912 schrieb:

    Ich wollte eigentlich bekannte Ansätze aus der Face-Detection verwenden, aber das geht ja nicht, da die Learning-Algorithmen davon ausgehen, dass die Objekte des Trainingsets immer zentriert und ungefähr die richtige Orientierung (Rotation) haben. Letzteres ist bei meinen Trainingsamples NICHT der Fall, deshalb wäre eine Dimensionsreduktion z.B. mit PCA schwachsinnig.

    Kann es sein, dass du die PCA falsch verstanden hast? Die PCA hat ja überhaupt nichts mit Objektausrichtung oder sonstwas zu tun, damit reduzierst du einfach nur die Dimensionalität deiner Eingabedaten. Für den Eigenfaces-Ansatz ist das natürlich wichtig, aber in erster Linie solltest du dir mal überlegen, was du überhaupt als Feature verwenden möchtest.

    (Du wirst vmtl. mal relativ wahllos einen Berg Features einer Sample-Datenbank extrahieren wollen, dann checken, welche überhaupt brauchbar sind. Da kannst du dann auch mit rotations- und translationsinvarianten Features die PCA verwenden.)

    Ich weiß nicht, woran es bei dir genau scheitert, aber hier sind ein paar vielversprechende Ansätze dabei:
    http://www.google.com/search?rls=en&q=hand+gesture+feature+extraction

    (sprich: wo es bereits C++ libraries gibt die mich unterstützen).

    OpenCV wurde ja schon erwähnt.

    Am ehesten würde mich also interessieren ob es möglich ist, Ansätze die ähnlich zur Face-Detection sind, zu verwenden, die Rotation-Invariant sind, SOWOHL beim Training ALS AUCH bei der Detection.

    Natürlich. En masse. Gibt es denn welche, die beim Training rotationsinvariant sind und bei der Detection nicht? Oder andersrum? Verstehe gerade nicht, wie das funktionieren soll.


Anmelden zum Antworten