Gestenerkennung mit nur einfachen Techniken


8

Ich absolviere einen Computer-Vision-Kurs und habe diese Übung: Schreiben Sie ein Programm, das anhand eines Handbilds erkennt, ob die Hand offen, geschlossen, in einem Schlag oder in einer "OK" -Haltung ist, indem Sie nur die verwenden Bisher bereitgestellte Techniken (Pixel 4/8 verbunden, verbundener Bereich, Konturfindung, Lochsuche, Blob-Eigenschaft wie Schwerpunkt, Fläche, Umfang, Exzentrizität, Bildmomente, Bildtransformation wie Invertieren / Leistung / Log / Gammakorrektur / Kontrastdehnung, Histogramm Berechnung und Entzerrung).

Ich habe es mit einigen grundlegenden Blob-Eigenschaften gemacht (geschlossene Hand hat eine geringe Exzentrizität, "ok" hat ein Loch, offene Hand hat einen großen Unterschied zwischen dem Bereich der eingeschriebenen Ellipse im Blob und dem Blob-Bereich selbst mit einer geringen Exzentrizität) Es scheint zu funktionieren, aber das erste Bild ist ein bisschen problematisch.

Ich denke, es könnte etwas mehr geben, um einen robusteren Algorithmus zu entwickeln. Vielleicht eine Art Moment Eigentum? Könnten einige Blob-Achsen / Orientierungen / Extrempunkte helfen?

PS-Testbilder:

ok2

OK

öffnen

schlagen


Dürfen Sie Skelettierung verwenden ? Weitere Ideen finden Sie im entsprechenden Wikipedia-Artikel .
Emre

nein ist nicht erlaubt, weil es der Inhalt eines zukünftigen Unterrichts ist!
nkint

Sie können versuchen , Symbolic Aggregate ApproxXimation auf die Außenkontur jedes Objekts anzuwenden . Reduzieren Sie im Grunde eine komplexe Form auf eine Zeitreihe und gruppieren Sie diese dann auf irgendeine Weise.
Ivo Flipse

Ich denke, ich muss keine Art von maschinellem Lernen verwenden, nur eine
clevere

vielleicht ein morphologisches Merkmal?
nkint

Antworten:


2

Sie können versuchen, Hu invariante Momente zu betrachten. Sie können aus Grundmomenten konstruiert werden und sind Rotation, Skalierung, Reflexion und Translationsinvariante.

Berechnen Sie sie zuerst für eine Reihe von Trainingskonturen und wenden Sie sie dann auf die Testkontur an.

Soweit ich mich erinnere, gibt es Implementierungen in Matlab und OpenCV.


2

Laut dem Buch Programmieren von Computer Vision mit Python besteht ein interessanter Ansatz darin, dichte SIFT-Funktionen (auch bekannt als HoG) für Ihre Bilder zu verwenden und diese Funktionen einem Klassifizierer zuzuführen.

Ich habe es nicht selbst versucht, aber es scheint ziemlich vernünftig zu sein. Darüber hinaus schlägt der Erfinder der HoG-Funktion die Flutter-App vor , die in meinen Tests recht gut funktioniert hat, und es wäre sehr seltsam, wenn der Erfinder keine eigenen Funktionen oder eine enge Ableitung verwenden würde.


2

Einer meiner Freunde hat dies für seine Diplomarbeit getan. Was er im Grunde tat, war, die Eigenschaften jeder Geste zu kodieren. Nehmen Sie zum Beispiel in der ersten Abbildung eine rechteckige Maske über die Teile der Hand. Die Teile, an denen die Haut auf die rechteckige Maskenkante trifft, sollten notiert und markiert werden. Dann können die relativen Positionen der größeren Kante und der kleineren Kante verglichen werden.

Wenn Sie also nach oben zeigen, haben Sie eine kleinere Kante nach oben und eine größere Kante am Handgelenk.

Wenn Sie seitwärts zeigen, haben Sie eine kleinere Kante an einer Seite und eine größere Kante an der Unterseite.

Zumindest die Richtungen können auf diese Weise abgedeckt werden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.