Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein...

57
Kinect-Programmierung Yvonne Mußmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 1 / 41

Transcript of Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein...

Page 1: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Kinect-Programmierung

Yvonne Mußmacher Mario Haustein

UNIX-Stammtisch der TU Chemnitz

29. Januar 2013

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 1 / 41

Page 2: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

GliederungKinect – Programmierung

1. Einleitung

2. Funktionsweise

3. libfreenect

4. Tiefenbildlokalisierung

5. OpenNI

6. Gestenerkennung

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 2 / 41

Page 3: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Einleitung

AllgemeinWas ist die Kinect?

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 3 / 41

Page 4: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Einleitung

AllgemeinKinect?

I Steuereinheit XBox 360 (Microsoft)

I Multifunktionaler Sensor

I Geratelose Interaktion mit Spielekonsole moglich

I Außerhalb der XBox-Umgebung durch verschiedene Frameworks nutzbarI Kinect for Windows (Microsoft)I libfreenect (OpenKinect)I OpenNi Framework (OpenNi Organisation)

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 4 / 41

Page 5: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Einleitung

Technische Daten

Mikrofon-Array

IR-Laser

RGB-Kamera

IR-Kamera Motorisierte Montierung

Tiefenkamera 58,8 × 45,6, 640× 480, 30 HzArbeitsbereich [1,2 m, 3,5 m]1

[50 cm, 8 m]2

Auflosung 1 mmFarbkamera 62,0 × 48,6, 640× 480, 30 Hz

1laut Hersteller2eigene Versuche

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 5 / 41

Page 6: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Einleitung

Technische Daten

Mikrofon-Array

IR-Laser

RGB-Kamera

IR-Kamera Motorisierte Montierung

Tiefenkamera 58,8 × 45,6, 640× 480, 30 HzArbeitsbereich [1,2 m, 3,5 m]1

[50 cm, 8 m]2

Auflosung 1 mmFarbkamera 62,0 × 48,6, 640× 480, 30 Hz

1laut Hersteller2eigene Versuche

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 5 / 41

Page 7: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Einleitung

ProjekteBeispiele

I Minority Report (Freenect) http://www.freenect.com/

I Sandkasten (UC Davis) http://www.geek.com/articles/geek-pick/

kinect-powered-augmented-reality-sandbox-2012059/

I Projektideen (OpenKinect)http://openkinect.org/wiki/Project_ideas

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 6 / 41

Page 8: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

FunktionsweiseWie funktioniert’s?

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 7 / 41

Page 9: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Funktionsweise

Abbildung : RGB-Bild

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 8 / 41

Page 10: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Funktionsweise

Abbildung : Infrarot-Bild

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 8 / 41

Page 11: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Funktionsweise

Abbildung : Tiefenbild

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 8 / 41

Page 12: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Punktmuster

I Das Punktmuster ist wiederholungsfrei.

I Ein kleiner Ausschnitt . . .

I . . . lasst sich im Gesamtmuster eindeutig wiederfinden.

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 9 / 41

Page 13: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Punktmuster

I Das Punktmuster ist wiederholungsfrei.

I Ein kleiner Ausschnitt . . .

I . . . lasst sich im Gesamtmuster eindeutig wiederfinden.

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 9 / 41

Page 14: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Tiefenberechnung

I Die Lage des Musters hangt von der Tiefe der Projektionsflache ab.

Kamera Laser

p

d dref

sx

xref

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 10 / 41

Page 15: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Tiefenberechnung

I Die Lage des Musters hangt von der Tiefe der Projektionsflache ab.

Kamera Laser

p

d dref

sx

xref

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 10 / 41

Page 16: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Tiefenberechnung

I Die Lage des Musters hangt von der Tiefe der Projektionsflache ab.

Kamera Laser

p

d dref

sx

xref

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 10 / 41

Page 17: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Tiefenberechnung

I Die Lage des Musters hangt von der Tiefe der Projektionsflache ab.

Kamera Laser

p

d dref

sx

xref

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 10 / 41

Page 18: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Tiefenberechnung

I Die Lage des Musters hangt von der Tiefe der Projektionsflache ab.

Kamera Laser

p

d dref

sx

xref

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 10 / 41

Page 19: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Berechnung von d aus s

p

d dref

s

geg.: dref , p (bekannt)s (messbar)

ges.: d

Strahlensatz:

p

d=

s

d− dref⇐⇒ d =

p · drefs− p

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 11 / 41

Page 20: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Messung von s

I x und xref lassen sich in Pixelkoordinaten umrechnen.

=⇒ s = xref − x durch Pixel-Differenz berechenbar.

I Iref(X,Y ) . . . Bitmap des Punktmusters in Referenzentfernung.

I I(X,Y ) . . . Bitmap des Punktmusters der aktuellen Szene.

C(X,Y, S) =

Y+n∑η=Y−n

X+n∑ξ=X−n

I(ξ − S, η) · Iref(ξ, η)

I Suchen S, fur dass C(X,Y, S) maximal ist.

=⇒ S ist Pixelversatz an Koordinate (X,Y ).=⇒ n ist Große des Korrelationsfensters. I.d.R. einstellig ≥ 3.

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 12 / 41

Page 21: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Funktionsweise

Genauigkeit

500 1,000 1,500 2,000 2,500 3,000 3,500 4,000 4,500 5,000

−50

0

50

d [mm]

[mm

]

Q90% −Q50%

Q10% −Q50%

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 13 / 41

Page 22: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

libfreenect

ProgrammierenFreenect – Low Level API

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 14 / 41

Page 23: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

libfreenect

Uber libfreenect

I Im Rahmen der OpenKinect-Community entstanden.I http://openkinect.org/wiki/Main_Page

I Ermoglicht Zugriff auf Low-Level Funktionen der Kamera.

I Grundlage bildet eine C-Bibliothek.

I Wrapper fur Python, C++, Actionscript, C#, Java JNI, Java JNA,Javascript, Common Lisp, . . .

I Dokumentation =⇒ libfreenect.h

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 15 / 41

Page 24: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

libfreenect

Prinzip

1. Initialisierung der KameraI Aufbauen der USB-VerbindungI Registrieren von Callback-HandlernI Auswahl der Video-ModiI Starten der Streams (RGB-Bild und/oder Tiefenbild)

2. Aufruf der Eventhandler-Funktion

3. Event-Handler ruft Callback fur jeden empfangenen Frame auf.

4. Deinitialisierung

I Ansteuerung der LED’s bzw. Motoren erfolgt synchron.

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 16 / 41

Page 25: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

libfreenect

Die libfreenec-APIInitialisierung

#inc l u d e <libfreenect/libfreenect.h>

freenect_context *ctx;freenect_device *dev;freenect_frame_mode mode;

vo id cbfunc(freenect_device *dev , vo id *depth , uint32_t t)

i n t init()

freenect_init (&ctx , NULL);i f (freenect_num_devices(ctx) < 1)

r e t u r n -1;

freenect_select_subdevices(ctx , FREENECT_DEVICE_CAMERA);freenect_open_device(ctx , &dev , 0);freenect_set_depth_callback(dev , cbfunc);mode = freenect_find_depth_mode(FREENECT_RESOLUTION_MEDIUM ,

FREENECT_DEPTH_REGISTERED);freenect_set_depth_mode(dev , mode);freenect_start_depth(dev);

r e t u r n 0;

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 17 / 41

Page 26: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

libfreenect

Die libfreenec-APIWeitere Initialisierungsfunktionen

I Fahigkeiten der Hardware auslesen.I int freenect_supported_subdevices(void)

I Gerat anhand Seriennummer offnen.I int freenect_open_device_by_camera_serial(freenect_context *ctx,

freenect_device **dev, const char* camera_serial)

I Eigenen Frame-Puffer festlegen.I int freenect_set_depth_buffer(freenect_device *dev, void *buf)

I Funktionen des RGB-DatenstromsI void freenect_set_video_callback(freenect_device *dev,

freenect_video_cb cb)I int freenect_set_video_buffer(freenect_device *dev, void *buf)I int freenect_start_video(freenect_device *dev)I int freenect_stop_video(freenect_device *dev)

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 18 / 41

Page 27: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

libfreenect

Die libfreenec-APIModi der Tiefenkamera

I FREENECT_DEPTH_11BIT, FREENECT_DEPTH_10BITI Rohdaten. 16 Bit pro PixelI Wertebereich: 0, . . . , 2048I 2047 =⇒ Datenlucke

I FREENECT_DEPTH_11BIT_PACKED, FREENECT_DEPTH_10BIT_PACKEDI Rohdaten. Nur Signifikante Bits im Puffer.

I FREENECT_DEPTH_MMI Tiefenangabe in Millimeter.I Wertebereich: 50, . . . , 10000I 0 =⇒ Datenlucke

I FREENECT_DEPTH_REGISTEREDI Wie FREENECT_DEPTH_MM.I Tiefenbild wird auf RGB-Bild umprojiziert.

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 19 / 41

Page 28: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

libfreenect

Die libfreenec-APIHauptschleife

#inc l u d e <libfreenect/libfreenect.h>

freenect_context *ctx;i n t die = 0;

vo id mainloop ()

wh i l e (!die)freenect_process_events(ctx);

I Der Handler wird durch freenect process events() abearbeitet.

I freenect process events() kann auch zuruckkehren ohne irgendeinenHandler aufzurufen.

I Timeout-VarianteI int freenect_process_events_timeout(freenect_context *ctx,

struct timeval* timeout)

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 20 / 41

Page 29: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

libfreenect

Die libfreenec-APIVerarbeitung der Frames

#inc l u d e <libfreenect/libfreenect.h>

freenect_frame_mode mode;

/* Modus: FREENECT_DEPTH_REGISTERED */s t a t i c vo id cbfunc(freenect_device *dev , vo id *depth , uint32_t t)

uns igned i n t x, y, offset;uint16_t dist;

printf("Zeitstempel: %12u:\n", t);

x = /* ... */;y = /* ... */;

offset = (y * mode.width + x) *(mode.data_bits_per_pixel + mode.padding_bits_per_pixel) / 8;

dist = *( uint16_t *)(depth + offset);

i f (dist)printf("Pixel (%u, %u) liegt %u mm vor der Kameraebene .\n", x, y, dist);

e l s eprintf("Distanz von Pixel (%u, %u) ist nicht bestimmbar .\n", x, y);

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 21 / 41

Page 30: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

libfreenect

Die libfreenec-APIDeinitialisierung, weitere Features

#inc l u d e <libfreenect/libfreenect.h>

freenect_context *ctx;freenect_device *dev;freenect_frame_mode mode;

vo id deinit ()

freenect_stop_depth(dev);freenect_close_device(dev);freenect_shutdown(ctx);

I Weitere FeaturesI Zugriff auf Schwerkraftssensor (zur Bestimmung des Neigungswinkels)I Ansteuerung Motoren in der MontierungI Ansteuerung der LED an der Frontblende

I Siehe libfreenect.h

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 22 / 41

Page 31: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Objekt-LokalisierungPositionsbestimmung durch Tiefenbildanalyse

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 23 / 41

Page 32: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tiefenbildauswertung – 1. Objekterkennung

I Trennung der Objekte (Vordergrund) vom Hintergrund.

I Zunachst mangels besseren Wissens alles als Hintergrund betrachten.

I Hintergrundttiefe kann nur nach hinten korrigiert werden.

D

Dmin := min(D(−4), . . . , D(0)) B := max(B,Dmin)

Md := D + t(B) < B Mf := mfilter(Md)

D Tiefenbild

B Hintergrundtiefe

Md,Mf Objektmasken

t(·) Schwellwertfunktion

mfilter(·) Maskenfilter

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 24 / 41

Page 33: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,
Page 34: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

ObjekterkennungSchwellwertfunktion

I Aus Genauigkeitsbetrachtung der Tiefendaten heraus:

t(x) = a · x2 + b · x+ c

I Empirisch ermittelt:

a = 150000 mm−1

b = 0

c = 5 mm

x [mm] 500 1000 2000 3000 4000 5000 6500 8000t(x) [mm] 7 12 31 65 112 172 287 432

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 26 / 41

Page 35: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

ObjekterkennungMaskenfilter

I Pixel an Unstetigkeitsstellen weisen eine hohe Varianz auf.

=⇒ Werden auch im stationaren Zustand als Vordergrund erkannt.

I Filteroperationen

abtragen Pixel mit schwarzen Nachbarn werden schwarz.erweitern Pixel mit weißem Nachbarn werden weiß.

I Mf := mfilter(Md)

1. 1× abtragen Kanten loschen.2. 2× erweitern Lucken fullen.3. 2× abtragen Rand entfernen.

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 27 / 41

Page 36: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

MaskenfilterBeispiel

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 28 / 41

Page 37: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

MaskenfilterBeispiel

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 28 / 41

Page 38: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Filter zur Objekttrennung

D

Mf

D′ := fill(D)

Om := Mf maskiert D′ C := contour(Om) C′ := ¬dilate(C)

Os := C′ maskiert Om

D′ Tiefenbild (Datenlucken erganzt)

Om Tiefenbild (Objekte evt. zusammenhangend)

C Objektkanten

C ′ Kantenmaske

Os Tiefenbild (Objekte getrennt)

fill(·) Datenlucken interpolieren

contour(·) Kantenerkennung

dilate(·) Maske erweitern

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 29 / 41

Page 39: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tiefenbildauswertung – 2. ObjekttrennungBeispiel

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 30 / 41

Page 40: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tiefenbildauswertung – 2. ObjekttrennungBeispiel

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 30 / 41

Page 41: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tiefenbildauswertung – 2. ObjekttrennungBeispiel

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 30 / 41

Page 42: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tiefenbildauswertung – 2. ObjekttrennungBeispiel

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 30 / 41

Page 43: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tiefenbildauswertung – 2. ObjekttrennungBeispiel

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 30 / 41

Page 44: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tiefenbildauswertung – 2. ObjekttrennungBeispiel

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 30 / 41

Page 45: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tiefenbildauswertung – 3. Vektorisierung

1. Konturenerkennung fur die getrennte Objektmaske.

2. Vereinfachung der Konturenzuge.

3. Alle nicht geschlossenen Konturen loschen.

4. Alle Polygone unterhalb einer Mindestflache loschen.

=⇒ Letzte Rauschartefakte filtern.

5. Alle Polygone loschen, die innerhalb eines anderen Polygons liegen.

=⇒ Locher entfernen.

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 31 / 41

Page 46: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tiefenbildauswertung – 4. Tracking

I Bisher nur Menge von Randpolygonen pro Frame.

=⇒ Korrelation notwendig.

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 32 / 41

Page 47: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tiefenbildauswertung – 4. Tracking

I Bisher nur Menge von Randpolygonen pro Frame.

=⇒ Korrelation notwendig.

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 32 / 41

Page 48: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Tiefenbildlokalisierung

Tracking – Ahnlichkeitsnorm

I Eigenschaften:I Nicht translationsinvariantI Nicht rotationsinvariantI Nicht skaleninvariant

I Je kleiner 〈C1, C2〉 um so ahnlicher sind C1 und C2.

I Naiver Ansatz (berucksichtigt nicht die Form eines Objekts):

〈C1, C2〉 =√

(x(C1)− x(C2))2 + (y(C1)− y(C2))2 +√|Ω(C1)− Ω(C2)|

C1, C2 Objektkonturen

x(C), y(C) Schwerpunkt von C

Ω(C) Raumwinkel von C

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 33 / 41

Page 49: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

OpenNI

ProgrammierungOpenNi – High Level Programmierung?

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 34 / 41

Page 50: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

OpenNI

Uber OpenNi

I Framework erlaubt Integration verschiedener Natural User Interfaces (NUI)

I Middelware fur Kinect Sensor (PrimeSense NITE)

I Neben C++, Java und C# mit PyOpenNi Wrapper fur Python

I Dokumentation und Information =⇒ http://www.openni.org

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 35 / 41

Page 51: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

OpenNI

OpenNiPrinzip

I OpenNi Framework installierenI Aktuelle Version herunterladen =⇒ http://www.openni.org/openni-sdk/I Datei entpackenI Installer ausfuhren

I PyOpenNi InstallierenI Installationanleitung unter =⇒ https://github.com/jmendeth/PyOpenNII Installation mit ˜/PyOpenNI-build$ make abschließenI Kopiere ˜/PyOpenNI-build/lib/openni.so nach

˜/usr/local/lib/¡python version¿/dist-packages

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 36 / 41

Page 52: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Gestenerkennung

GestensteuerungWas ist moglich?

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 37 / 41

Page 53: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Gestenerkennung

DemonstrationGestenerkennung mit OpenNi – Die Idee

Kamerasteuerung am Videokonferenzsystem mit Hilfe der Kinect zur geratelosenInteraktion.

1. Personentracking

2. Interaktionsbereiche

3. Verwendung von Realweltkoordinaten

4. Einfache Gesten =⇒ einfache Funktionen

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 38 / 41

Page 54: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Gestenerkennung

Demonstration

Demo!

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 39 / 41

Page 55: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Gestenerkennung

Demonstration

I Skeletton eines Nutzers

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 40 / 41

Page 56: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Ende

Fragen?

Vielen Dank fur IhreAufmerksamkeit!

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 41 / 41

Page 57: Kinect-Programmierung - tu-chemnitz.de · Kinect-Programmierung Yvonne Muˇmacher Mario Haustein UNIX-Stammtisch der TU Chemnitz 29. Januar 2013 Muˇmacher, Haustein (UNIX-Stammtisch,

Ende

Fragen?

Vielen Dank fur IhreAufmerksamkeit!

Mußmacher, Haustein (UNIX-Stammtisch, TUC) Kinect-Programmierung 29. Januar 2013 41 / 41