Finger - /Hand-Gestenerkennung mit Kinect
Lassen Sie mich erklären, meine müssen, bevor ich das problem erklären.
Ich freue mich für eine hand-kontrollierte Anwendung.
Navigation mit palm und klickt mit greifen/Faust.
Derzeit arbeite ich mit Openni, das klingt vielversprechend und hat nur wenige Beispiele, die sich als nützlich in meinem Fall, denn es hatte bereits eingebaut-hand-tracker in den Proben. was dient meinem Zweck, für Zeit wird.
Was ich Fragen will ist,
1) was wäre der beste Ansatz, um eine Faust - /- Greifer-Detektor ?
Ich ausgebildet und eingesetzt Adaboost Faust Klassifikatoren, die auf RGB-Daten extrahiert, die war ziemlich gut, aber es hat zu viele falsche Erkennungen, um vorwärts zu bewegen.
So, hier habe ich zwei frame mehr Fragen
2) gibt es andere gute Bibliothek, die geeignet ist, die Erreichung meine Bedürfnisse mit der Tiefe Daten ?
3)Können wir trainieren, unsere eigenen gesten, vor allem mit den Fingern, wie einige Papier bezog, HMM, wenn ja, wie gehen wir vor mit einer Bibliothek wie OpenNI ?
Ja, ich habe versucht mit dem middle-ware-Bibliotheken OpenNI, wie das grab-Detektor, aber, pflegen Sie dienen meinem Zweck, als seine weder opensource, noch entspricht meinem Bedürfnis.
Abgesehen von dem, was ich fragte, wenn es etwas gibt, Sie denken, dass mir helfen könnte akzeptiert werden, als ein guter Vorschlag.
- Welches Betriebssystem waren, die Sie verwenden, um zusammen mit dem gleichen? Waren Sie zufällig mit einem Mac, oder war es ein Windows, das Sie verwenden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nicht zu trainieren, Ihre erste Algorithmus, da er die Dinge zu komplizieren.
Verwenden Sie nicht die Farbe, denn es ist unzuverlässig (Mischungen mit hintergrund-und verpasst unvorhersehbar, je nach Beleuchtung und Blickwinkel)
segment Sie es durch die Tiefe Schwelle. Sie können festlegen, Schwelle, manuell, Verwendung einer nächsten region depth-Histogramm, oder führen Sie angeschlossene Komponente eine Tiefe, die Karte zu brechen, es auf sinnvolle Teile zuerst (und dann wählen Sie Ihr Objekt nicht nur seine Tiefe, sondern auch durch seine Dimensionen, Bewegung, Benutzereingaben, etc.). Hier ist die Ausgabe des angeschlossenen Komponenten-Methode:
Gelten konvex Mängel aus der opencv-Bibliothek zu finden, Finger;
Track Finger, anstatt entdecken Sie Sie in 3D.Dies erhöht die Stabilität. Habe ich erfolgreich umgesetzt, wie Fingerabdruck-Erkennung vor etwa 3 Jahren.
Lesen meiner Papier 🙂 http://robau.files.wordpress.com/2010/06/final_report_00012.pdf
Ich habe getan, Forschung auf gesten-Erkennung für die Hände, und bewertet einige Ansätze, die robust gegenüber Skalierung, rotation etc. Sie haben die Tiefe Informationen, die sehr wertvoll ist, als das größte problem für mich war eigentlich segment der hand aus dem Bild.
Meine erfolgreichste Ansatz ist, um Weg von der Kontur der hand und für jeden Punkt auf der Kontur, nehmen Sie den Abstand, um den Schwerpunkt der hand. Dies gibt eine Reihe von Punkten, die verwendet werden können, die als input für viele Trainings-algorithmen.
Ich die Bild-Momente der segmentierten hand zu bestimmen, deren rotation, so ist es ein guter Ausgangspunkt auf die Hände Kontur. Es ist sehr einfach zu bestimmen, eine Faust, streckte die hand aus und die Anzahl der verlängerten Finger.
Beachten Sie, dass, während es funktioniert gut, Ihr arm dazu neigt, müde von zeigen in die Luft.
Es scheint, dass Sie keine Ahnung von den Point Cloud Library (PCL). Es ist ein open-source-Bibliothek gewidmet, die Verarbeitung von Punktwolken und RGB-D-Daten, die auf OpenNI für die low-level-Operationen und bietet eine Menge von high-level Algorithmus, zum Beispiel für die Registrierung, Segmentierung und auch Anerkennung.
Einen sehr interessanten Algorithmus zur Form - /Objekt-Erkennung im Allgemeinen genannt wird implizite Form Modell. Um zu erkennen ob ein Globale Objekt (wie ein Auto, oder eine offene hand), die Idee ist zunächst zu ermitteln, möglich, Teile davon (z.B. Räder, Kofferraum, etc, oder Finger, Handfläche, Handgelenk usw.) mit einem lokalen feature-Detektor, und dann zu folgern, die position des global-Objekt, indem man die Dichte und die relative position der Teile. Zum Beispiel, wenn ich erkennen kann, fünf Finger, eine Handfläche und Handgelenk in einer bestimmten Gegend, es gibt eine gute chance, dass in der Tat bin ich auf der Suche auf eine hand, wenn ich allerdings nur erkennen, ein finger und ein Handgelenk, irgendwo, es könnte ein paar von Fehlerkennungen. Die wissenschaftlichen Artikel auf dieser impliziten Form Modell Algorithmus gefunden werden kann hier.
In der PCL, es ist ein paar des tutorials widmet sich dem Thema der Form der Anerkennung, und zum Glück, ein von Ihnen deckt die implizite Form Modell, die umgesetzt wurde, in PCL. Getestet habe ich nie diese Umsetzung, aber von was ich Lesen konnte in dem tutorial, Sie können Ihre eigenen Punkt-Wolken für die Ausbildung der Klassifizierer.
, Dass gesagt wird, hast du nicht erwähnt es explizit in deiner Frage, aber da Ihr Ziel ist es, das Programm einer hand-kontrolliert-Anwendung, könnten Sie in der Tat daran interessiert sein, einen real-time Form-Erkennung-Algorithmus. Du müsstest die Geschwindigkeit des implicit shape model zur Verfügung gestellt, die in PCL, aber ich denke, dieser Ansatz ist besser geeignet, um offline-Formen zu erkennen.
Wenn Sie brauchen Echtzeit-Form der Anerkennung, ich denke, Sie sollten zunächst mit einer hand - /arm-tracking-Algorithmus (die sind in der Regel schneller als vollständige Suche), um zu wissen, wo sich in den Bildern, statt zu versuchen, führen Sie eine vollständige Form-Erkennung an jedem frame des RGB-D stream. Sie könnten zum Beispiel Spur der hand, die Lage durch die Segmentierung der depthmap (z.B. mit einer geeigneten Schwelle auf die Tiefe) und dann die Erkennung der extermities.
Dann, sobald Sie ungefähr wissen, wo die hand ist, sollte es einfacher sein, zu entscheiden, ob die hand macht eine Geste für Ihre Anwendung relevant sind. Ich bin nicht sicher, was du genau meinst, Faust/grab-gesten, aber ich schlage vor, dass Sie Sie definieren und verwenden einige app-controlling-gesten, die sind einfach und schnell voneinander zu unterscheiden.
Hoffe, das hilft.
Die schnelle Antwort ist: ja, können Sie trainieren, Ihre eigenen gesten-Detektor mit Tiefe Daten. Es ist wirklich einfach, aber es kommt auf die Art der Geste.
Angenommen, Sie wollen zu erkennen, eine hand Bewegung:
(x,y,x)
. Mit OpenNi ist geradewegs als ein Ankerpunkt für die handHier finden Sie ein schönes tutorial und den code (in Matlab). Der code (
test.m
ist ziemlich einfach zu Folgen). Hier ist ein snipet:Umgang mit Finger ist so ziemlich das gleiche, aber statt erkennen durch die hand, die Sie brauchen, um festzustellen de Finger. Wie Kinect nicht haben finger Punkte, die Sie verwenden müssen, um einen spezifischen code, um Sie zu erkennen (mithilfe der Segmentierung oder der konturverfolgung). Einige Beispiele für die Verwendung von OpenCV gefunden werden kann hier und hier, aber die erfolgversprechendste ist der ROS-Bibliothek, die ein-finger-Knoten (siehe Beispiel hier).
Wenn Sie brauchen nur den Nachweis der Faust/grab Zustand, sollten Sie microsoft eine chance.
Microsoft.Kinect.Toolkit.Interaction
enthält Methoden und Ereignisse, erkennt der grip /halt Freigabe-Zustand einer hand. Werfen Sie einen Blick auf dieHandEventType
von InteractionHandPointer . Das funktioniert ganz gut für die Faust - /grab-Erkennung, aber nicht erkennt, oder der Bericht die position der einzelnen Finger.Den nächsten kinect (kinect one) erkennt 3 joint pro hand (Handgelenk, Hand, Daumen) und hat 3 hand, basierend gestik: offen, geschlossen (Griff/Faust) und lasso (Zeiger). Wenn es das ist genug für Sie sind, sollten Sie die microsoft-Bibliotheken.
1) Wenn es eine Menge von falschen Erkennungen, könnten Sie versuchen, zu verlängern der negativen Stichprobe der Klassifikator, und trainieren Sie es erneut. Die erweiterte negative Bild, das set sollte enthalten, wie Bilder, wo die Faust war falsch erkannt. Vielleicht wird dies helfen, zu erstellen Sie eine bessere classifier.
Habe ich hatte ziemlich viel Erfolg mit der middleware-Bibliothek, wie es von der http://www.threegear.com/. Bieten Sie mehrere gesten (einschließlich greifen, kneifen und zeigen) und 6 DOF handtracking.
Vielleicht haben Sie Interesse in diesem Papier & open-source-code:
Robuste Gelenkarm-ICP für die Real-Time Hand-Tracking
Code: https://github.com/OpenGP/htrack
Screenshot: http://lgg.epfl.ch/img/codedata/htrack_icp.png
YouTube-Video: https://youtu.be/rm3YnClSmIQ
Paper PDF: http://infoscience.epfl.ch/record/206951/files/htrack.pdf