Présentation
C'est un petit programme que j'ai "bricolé", j'avoue que mes connaissance de python sont limitées (comme la programmation en général) je souhaiterais que si quelque cranseux qui ont un peu de temps à perdre m'aide un peu pour essayer de faire un ou des petit jeux sans prétention .. n'hésitez pas à faire des commentaires. merci d'avance ..
Eye Toy
La EyeToy est une Webcam qui se branche directement sur la PS2
Materiel
Une Webcam
Les Libraries Nécessaires
Il faut Python 2.4
Pygame http://www.pygame.org/
PIL http://www.pythonware.com/products/pil/index.htm
VideoCapture http://videocapture.sf.net/
en pratique j'ai mixé les codes sources http://www.pygame.org/docs/tut/intro/intro.html et le code source http://gumuz.looze.net/wordpress/index.php/archives/2005/06/06/python-webcam-fun-motion-detection/
Le programme
import sys, pygame from VideoCapture import Device import ImageDraw import Image def diff_image(img1, img2, pix_threshold=50, img_threshold=10): """ Compare 2 images to detect possible motion """ if not img1 or not img2: return False img1 = img1.getdata() img2 = img2.getdata() pixel_count = len(img1) pixdiff = 0 for i in range(pixel_count): if abs(sum(img1[i]) - sum(img2[i])) > pix_threshold: pixdiff += 1 diffperc = pixdiff / (pixel_count/100) if diffperc > img_threshold: # motion detected return True # init pygame pygame.init() # setup screen size size = width, height = 320, 240 speed = [5, 5] black = 0, 0, 0 # get cam device screen = pygame.display.set_mode(size) #On appelle la WebCam cam = Device() #On charge les sprites ball = pygame.image.load("ball.gif") #On récupère les dimensions du sprite (pour pouvoir comparer plus tard) ballrect = ball.get_rect() left_button = None #On fait une priemière acquisitions.. oldcamshot = cam.getImage() while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() ballrect = ballrect.move(speed) camshot = cam.getImage() # process left button new_left_button = camshot.crop((ballrect.left ,ballrect.top ,ballrect.right ,ballrect.bottom)) left_button = oldcamshot.crop((ballrect.left ,ballrect.top ,ballrect.right ,ballrect.bottom)) if diff_image(left_button, new_left_button): speed[0] = -speed[0] #Pour pas que la balle sorte de l'écran .. if ballrect.left < 0 or ballrect.right > width: speed[0] = -speed[0] if ballrect.top < 0 or ballrect.bottom > height: speed[1] = -speed[1] oldcamshot=camshot screen.fill(black) camshot = pygame.image.fromstring(camshot.tostring(), (320,240), "RGB") screen.blit(camshot, (0,0)) screen.blit(ball, ballrect) pygame.display.flip()
Projet
Faire une version plein écran
Faire une version Linux
VideoCapture passe par directX pour interfacer la Webcam donc Windows only, cela semble plus difficile pour Linux.
Faire un photomaton
il suffit de trois lignes ..
from VideoCapture import Device cam = Device() cam.saveSnapshot('image.jpg')
On pourrait rajouter des Options comme incruster des décors etc ..
Optimiser la comparaison des images
La boucle qui compare les images est lente !!!
Faire un ou des mini-jeux
Graphisme
Si vous voulez faire tourner le jeux vous aurez besoin de ball.gif