Display an image from the robot

This tutorial will explain how to display an image from the Nao camera on your local computer, which you have already done inGetting started with the Nao robot. Before going through this tutorial, you should have the following set up:

  1. Redis is running on your laptop

  2. You have SIC installed locally in a virtual environment

Approach

First, let’s create a new file called demo_nao_camera.py.

We first import some libraries and the CompressedImageMessage and Nao object.

import queue import cv2 from sic_framework.core.message_python2 import CompressedImageMessage from sic_framework.devices import Nao from sic_framework.devices.common_naoqi.naoqi_camera import NaoqiCameraConf

Then, we make a queue and callback function to put the received images in this queue object.

imgs = queue.Queue() def on_image(image_message: CompressedImageMessage): # we could use cv2.imshow here, but that does not work on Mac OSX imgs.put(image_message.image)

We then connect with the Nao robot and register the callback function to its top_camera sensor.

nao = Nao(ip="192.168.0.0", top_camera_conf=conf) nao.top_camera.register_callback(on_image)

Now, the queue will be filled every time there is a new image available from the Nao’s top camera. So, we can write a while loop to show these images as soon as they arrive.

while True: img = imgs.get() cv2.imshow("", img[..., ::-1]) # cv2 is BGR instead of RGB cv2.waitKey(1)

 

That’s it! If you now run demo_nao_camera.py, you will receive images from the Nao, put them in a queue, and continuously show the images from this queue. The full code can be found here: demo_nao_camera.py.

Here is the schematic overview of how this program. The camera sends a “stream” of output messages that are received by your computer program.