This tutorial explains how to access the ALVisionRecognition module from Python. 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 instatiate 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", NAO_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'