In [ ]:
import openni as opi
import numpy as np
import pygame
from pygame.locals import KEYDOWN, K_ESCAPE
from pygame.color import THECOLORS
import Image
from random import randrange
In [ ]:
ctx = opi.Context()
ctx.init()
In [ ]:
depth_generator = opi.DepthGenerator()
depth_generator.create(ctx)
depth_generator.set_resolution_preset(opi.RES_VGA)
depth_generator.fps = 30
image_generator = opi.ImageGenerator()
image_generator.create(ctx)
hands_generator = opi.HandsGenerator()
hands_generator.create(ctx)
gesture_generator = opi.GestureGenerator()
gesture_generator.create(ctx)
gesture_generator.add_gesture('Wave')
In [ ]:
def gesture_detected(src, gesture, id, end_point):
hands_generator.start_tracking(end_point)
def gesture_progress(src, gesture, point, progress):
print "Dave is waving !!", src
def create(src, id, pos, time):
try:
hands[id] = Hand(file_names[randrange(len(file_names))])
sprites.add(hands[id])
except KeyError:
print "you have this hand already"
def update(src, id, pos, time):
if pos:
tmp_pos = depth_generator.to_projective([pos])[0]
hands[id].rect.centerx, hands[id].rect.centery = tmp_pos[0], tmp_pos[1]
def destroy(src, id, time):
sprites.remove(hands[id])
del hands[id]
In [ ]:
gesture_generator.register_gesture_cb(gesture_detected, gesture_progress)
hands_generator.register_hand_cb(create, update, destroy)
In [ ]:
hands = {}
file_names = ['Images/mano_1.png', 'Images/mano_2.png']
In [ ]:
class Hand(pygame.sprite.Sprite):
"""Hand Class for set image, speed and angle """
def __init__(self, image):
pygame.sprite.Sprite.__init__(self)
self.img_load(image)
def img_load(self, filename):
self.image = pygame.image.load(filename)
self.image = pygame.transform.scale(self.image, (60,60))
self.rect = self.image.get_rect()
In [ ]:
def capture_rgb():
rgb_frame = np.fromstring(image_generator.get_raw_image_map_bgr(),
dtype=np.uint8).reshape(480, 640, 3)
im = Image.fromarray(rgb_frame)
b, g, r = im.split()
im = Image.merge("RGB", (r, g, b))
return pygame.image.frombuffer(im.tostring(), im.size, 'RGB')
In [ ]:
pygame.init()
running = True
screen = pygame.display.set_mode((640, 480), pygame.HWSURFACE | pygame.DOUBLEBUF)
pygame.display.set_caption('My First Hand Tracking')
sprites = pygame.sprite.RenderUpdates()
ctx.start_generating_all()
while running:
for event in pygame.event.get():
if event.type == KEYDOWN and event.key == K_ESCAPE: running = False
ctx.wait_any_update_all()
screen.blit(capture_rgb(), (0, 0))
map(lambda i: i.update(), hands.values())
dirty = sprites.draw(screen)
pygame.display.update(dirty)
pygame.display.flip()
pygame.display.quit()
pygame.quit()
In [ ]:
ctx.stop_generating_all()
ctx.shutdown()