SoftBank Robotics documentation What's new in NAOqi 2.5?

ALVisionRecognition Tutorial

NAOqi Vision - Overview | API | Tutorial


Introduction

This tutorial explains two ways to access the ALVisionRecognition module from Python: (1) subscribing to AlMemory key that contains the detection result of ALVisionRecognition, or (2) calling ALVisionRecognition APIs via Choregraphe Script box.

Subscribing to ALVisionRecognition’s memory key

The module is designed to notify subscribers when a previously learned image has been recognized. To receive the notification, we need to create a module that exposes a callback method.

Note

You might not have this module depending on your distribution. This module should be loaded on the robot’s NAOqi.

After some initialization steps, we first instantiate a proxy to the ALVisionRecognition module.

Prepare some imports and variables

import os
import sys
import time
import naoqi
from naoqi import *

# A global counter of the number of loops
count = 10

PC_IP = "127.0.0.1"  # Replace this with your computer's IP address
NAO_IP = "nao.local" # Replace this with your NAOqi's IP address

# The name of the event generated by ALVisionRecognition
event_name = "PictureDetected"

We create a python module with a callback method and instantiate it

# The name of our local python module
module_name = "python_module"

class myModule(ALModule):
"""python class myModule test auto documentation"""

  def dataChanged(self, strVarName, value, strMessage):
    """callback when data change"""

    print "datachanged", strVarName, " ", value, " ", strMessage
    global count
    count = count - 1

# Create a local broker, connected to the remote naoqi
broker = ALBroker("pythonBroker", PC_IP, 9999, NAO_IP, 9559)

# Create a python module
pythonModule = myModule(module_name)

We subscribe to event so that our callback can be called

try:
  # Create a proxy to ALMemory
  memoryProxy = ALProxy("ALMemory", ROBOT_IP, PORT)

  # Subscribe to the event, saying where we want to be called back
  memoryProxy.subscribeToEvent(event_name, module_name, "dataChanged")

  # Let the picture recognition run
  while count > 0:
    time.sleep(5)

  # Unsubscribe
  memoryProxy.unsubscribeToEvent(event_name, module_name)

except RuntimeError, e:
  print e
  exit(1)

print 'end'

Calling APIs of ALVisionRecognition from a Choregraphe Script box

Access to ALVisionRecognition API via Choregraphe Script box can be done easily under Python, like below:

class MyClass(GeneratedClass):
    def __init__(self):
  GeneratedClass.__init__(self)

    def onLoad(self):
  #put initialization code here
  pass

    def onUnload(self):
  #put clean-up code here
  pass

    def onInput_onStart(self):
  #Get connected to the ALVisionRecognition module
  vr = ALProxy("ALVisionRecognition")

  #Get the size of the current database
  self.log( "DB size: %s" % vr.getSize())

  self.onStopped() #activate the output of the box
  pass

    def onInput_onStop(self):
  self.onUnload() #it is recommended to reuse the clean-up as the box is stopped