cozmo-video-stremaing-camera-feature-image

Cozmo SDK : streaming vidéo avec la caméra

Cette entrée a été publiée dans Cozmo, Education, Tutoriels en robotique, et marquée avec , , , , , , , le par .

Objectif : récupérer une image ou un flux d’image de la caméra 

  • Durée :  15 minutes
  • Niveau de difficulté :  facile
  • Objectif :  explorer la fonctionnalité de capture d’images

Les prérequis

Accéder à la caméra du robot Cozmo

Présentation de la caméra de Cozmo

Cozmo dispose d’une camera VGA 30 embarquée. Celle-ci fournit des images en noir et blanc de dimension 320 x 240 pixels. L’angle de la caméra est de 60° et la longueur de la focale de 290 mm. Cozmo possède également un logiciel de reconnaissance faciale qui ouvre de nombreuses possibilités d’applications.

Récupération d’une image

Pour récupérer une image depuis la caméra de Cozmo, il faudra effectuer les deux étapes ci-dessous :

  • Activer le streaming vidéo du robot auquel vous êtes connecté : robot.camera.image_stream_enabled = True
  • Récupérer l’image elle-même  via l’objet robot.world.latest_image  :
    latest_image = robot.world.latest_image

L’activation du streaming vidéo se fait par un paramètre de la caméra, qui va activer le flux caméra. L’objet latest_image est un objet CameraImage renvoyé par le robot. Ces images peuvent être annotée. Nous verrons cela dans un prochain tutoriel.

Ci-dessous, un exemple de code qui va servir à récupérer l’image de la caméra avec un rafraîchissement de 100 ms :

def simple_camera(robot: cozmo.robot.Robot):
	# activation du flux camera
	robot.camera.image_stream_enabled = True
	
	# récupération de l'image caméra
	latest_image = robot.world.latest_image

Ce code se contente uniquement de récupérer l’image. Nous allons donc l’améliorer afin de créer un streaming vidéo avec ces images caméra.

Streaming vidéo du flux caméra

Ici, nous allons utiliser TkInter (une librairie très simple d’utilisation permettant de construire des interfaces graphiques avec Python) pour afficher le streaming vidéo de Cozmo dans un fenêtre dédiée. Cette classe est disponible sur notre repository GitHub de même que l’exemple complet.

from PIL import Image, ImageTk
from libs.simple_image_viewer import SimpleImageViewer

def stream_camera(robot: cozmo.robot.Robot):
	
	# on active le stream camera
	robot.camera.image_stream_enabled = True

	# instance de la vue 
	image_view = SimpleImageViewer(w=320, h=240)


	print("Press CTRL-C to quit")
	try:
		while True:
			latest_image = robot.world.latest_image
			if latest_image:
				
				# affichage du image_number
				#print(latest_image.image_number)
				print('.', end='', flush=True)

				# récupération du raw
				im = latest_image.raw_image

				# update de la vue
				image = ImageTk.PhotoImage(im)
				image_view.update_image(image)

			# refresh tous les 100 ms
			time.sleep(0.1)

	# pour capter le Ctrl+C et terminer proprement		
	except KeyboardInterrupt:
		sys.exit()

Vous devriez maintenant voir le streaming vidéo de la caméra de Cozmo sur l’écran de votre PC.

Informations supplémentaires sur le streaming vidéo avec Cozmo

La caméra de Cozmo peut fournir des images en 640 x 480 pixels, mais le firmware ne supporte que des images de résolution inférieure pour le moment.

De même, la caméra du robot perçoit les couleurs, mais la transmission des vidéos se fait en noir et blanc pour économiser la bande passante utilisée.