L'installazione e' sostanzialmente manuale dai sorgenti con la procedura
mkdir PyOpenNI-build
cd PyOpenNI-build
cmake ../PyOpenNI
(per soddisfare le dipendenze sudo apt-get install cmake build-essential git-core \ python-dev libboost-python-dev)
Al termine della compilazione non c'e' la possibilita' di fare make install in quanto e' lasciato all'utente la fase finale. Per i miei scopi la cosa piu' semplice e' stata quella di spostare il file openni.so dalla PyOpenNI-build/lib nella cartella degli esempi
Un esempio veramente interessate e' dato da hand-tracker.py che, brevemente modificato, puo' essere utilizzato per creare un mouse virtuale per X (nel brevissimo esempio se la mano si trova tra 750 e 1000 mm dal Kinect viene agganciato il Kinect, se si trova a meno di 750 mm si fa clic sul punto del mouse....lo script e' ampiamente migliorabile)
------------------------------------------------
#! /usr/bin/python
from openni import *
import os
context = Context()
context.init()
depth_generator = DepthGenerator()
depth_generator.create(context)
depth_generator.set_resolution_preset(RES_VGA)
depth_generator.fps = 30
gesture_generator = GestureGenerator()
gesture_generator.create(context)
gesture_generator.add_gesture('Wave')
hands_generator = HandsGenerator()
hands_generator.create(context)
# Declare the callbacks
# gesture
def gesture_detected(src, gesture, id, end_point):
print "Detected gesture:", gesture
hands_generator.start_tracking(end_point)
# gesture_detected
def gesture_progress(src, gesture, point, progress): pass
# gesture_progress
def create(src, id, pos, time):
print 'Create ', id, pos
# create
def update(src, id, pos, time):
print 'Update ', id, pos
x = pos[0]+300
y = pos[1]+300
if (x < 0):
x = 0
if (y < 0):
y = 0
if ((pos[2] >750) and (pos[2] < 1000)):
os.system("xdotool mousemove "+ str(x)+" "+str(y))
if (pos[2] <750):
os.system("xdotool mousemove "+ str(x)+" "+str(y) + " click 1")
# update
def destroy(src, id, time):
print 'Destroy ', id
# destroy
# Register the callbacks
gesture_generator.register_gesture_cb(gesture_detected, gesture_progress)
hands_generator.register_hand_cb(create, update, destroy)
# Start generating
context.start_generating_all()
print 'Make a Wave to start tracking...'
while True:
context.wait_any_update_all()
# while
(per soddisfare le dipendenze sudo apt-get install cmake build-essential git-core \ python-dev libboost-python-dev)
Al termine della compilazione non c'e' la possibilita' di fare make install in quanto e' lasciato all'utente la fase finale. Per i miei scopi la cosa piu' semplice e' stata quella di spostare il file openni.so dalla PyOpenNI-build/lib nella cartella degli esempi
Un esempio veramente interessate e' dato da hand-tracker.py che, brevemente modificato, puo' essere utilizzato per creare un mouse virtuale per X (nel brevissimo esempio se la mano si trova tra 750 e 1000 mm dal Kinect viene agganciato il Kinect, se si trova a meno di 750 mm si fa clic sul punto del mouse....lo script e' ampiamente migliorabile)
------------------------------------------------
#! /usr/bin/python
from openni import *
import os
context = Context()
context.init()
depth_generator = DepthGenerator()
depth_generator.create(context)
depth_generator.set_resolution_preset(RES_VGA)
depth_generator.fps = 30
gesture_generator = GestureGenerator()
gesture_generator.create(context)
gesture_generator.add_gesture('Wave')
hands_generator = HandsGenerator()
hands_generator.create(context)
# Declare the callbacks
# gesture
def gesture_detected(src, gesture, id, end_point):
print "Detected gesture:", gesture
hands_generator.start_tracking(end_point)
# gesture_detected
def gesture_progress(src, gesture, point, progress): pass
# gesture_progress
def create(src, id, pos, time):
print 'Create ', id, pos
# create
def update(src, id, pos, time):
print 'Update ', id, pos
x = pos[0]+300
y = pos[1]+300
if (x < 0):
x = 0
if (y < 0):
y = 0
if ((pos[2] >750) and (pos[2] < 1000)):
os.system("xdotool mousemove "+ str(x)+" "+str(y))
if (pos[2] <750):
os.system("xdotool mousemove "+ str(x)+" "+str(y) + " click 1")
# update
def destroy(src, id, time):
print 'Destroy ', id
# destroy
# Register the callbacks
gesture_generator.register_gesture_cb(gesture_detected, gesture_progress)
hands_generator.register_hand_cb(create, update, destroy)
# Start generating
context.start_generating_all()
print 'Make a Wave to start tracking...'
while True:
context.wait_any_update_all()
# while