# SoftBank Robotics documentation What's new in NAOqi 2.8?

# 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

Glossary Site map Index Support Contact Legal Notices