This section illustrates the possibilites of ALFaceDetection.
Detect faces and print information about them.
# -*- coding: utf-8 -*-
# This test demonstrates how to use the ALFaceDetection module.
# Note that you might not have this module depending on your distribution
#
# - We first instantiate a proxy to the ALFaceDetection module
# Note that this module should be loaded on the robot's naoqi.
# The module output its results in ALMemory in a variable
# called "FaceDetected"
# - We then read this ALMemory value and check whether we get
# interesting things.
import time
from naoqi import ALProxy
IP = "nao.local" # Replace here with your NaoQi's IP address.
PORT = 9559
# Create a proxy to ALFaceDetection
try:
faceProxy = ALProxy("ALFaceDetection", IP, PORT)
except Exception, e:
print "Error when creating face detection proxy:"
print str(e)
exit(1)
# Subscribe to the ALFaceDetection proxy
# This means that the module will write in ALMemory with
# the given period below
period = 500
faceProxy.subscribe("Test_Face", period, 0.0 )
# ALMemory variable where the ALFacedetection modules
# outputs its results
memValue = "FaceDetected"
# Create a proxy to ALMemory
try:
memoryProxy = ALProxy("ALMemory", IP, PORT)
except Exception, e:
print "Error when creating memory proxy:"
print str(e)
exit(1)
# A simple loop that reads the memValue and checks whether faces are detected.
for i in range(0, 20):
time.sleep(0.5)
val = memoryProxy.getData(memValue)
print ""
print "*****"
print ""
# Check whether we got a valid output.
if(val and isinstance(val, list) and len(val) >= 2):
# We detected faces !
# For each face, we can read its shape info and ID.
# First Field = TimeStamp.
timeStamp = val[0]
# Second Field = array of face_Info's.
faceInfoArray = val[1]
try:
# Browse the faceInfoArray to get info on each detected face.
for j in range( len(faceInfoArray)-1 ):
faceInfo = faceInfoArray[j]
# First Field = Shape info.
faceShapeInfo = faceInfo[0]
# Second Field = Extra info (empty for now).
faceExtraInfo = faceInfo[1]
print " alpha %.3f - beta %.3f" % (faceShapeInfo[1], faceShapeInfo[2])
print " width %.3f - height %.3f" % (faceShapeInfo[3], faceShapeInfo[4])
except Exception, e:
print "faces detected, but it seems getData is invalid. ALValue ="
print val
print "Error msg %s" % (str(e))
else:
print "No face detected"
# Unsubscribe the module.
faceProxy.unsubscribe("Test_Face")
print "Test terminated successfully."
Detect and track faces with NAO’s head.
# This python script assumes that you have correctly set your PYTHONPATH
# environment variable to "your_naoqi_sdk_path"/lib/.
#
# When tracking is activated, faces looking sideways, or located further away
# should be tracked for a longer period.
# Launch Monitor, Cameraviewer, activate face detection, and see if it works better.
#
from naoqi import ALProxy
import sys
USAGE = "USAGE:\n" \
"python vision_setfacetracking.py [NAO_IP] [0 or 1] \n" \
"\nExamples: \n" \
"Enable tracking: set_tracking.py 192.168.1.102 1\n" \
"Disable tracking: set_tracking.py 192.168.1.102 0"
def set_nao_face_detection_tracking(nao_ip, nao_port, tracking_enabled):
"""Make a proxy to nao's ALFaceDetection and enable/disable tracking.
"""
faceProxy = ALProxy("ALFaceDetection", nao_ip, nao_port)
print "Will set tracking to '%s' on the robot ..." % tracking_enabled
# Enable or disable tracking.
faceProxy.enableTracking(tracking_enabled)
# Just to make sure correct option is set.
print "Is tracking now enabled on the robot?", faceProxy.isTrackingEnabled()
def main():
# Specify your IP address here.
nao_ip = "127.0.0.1"
nao_port = 9559
tracking_enabled = True
try:
if len(sys.argv) > 1:
nao_ip = sys.argv[1]
if len(sys.argv) > 2:
tracking_enabled = bool(int(sys.argv[2]))
set_nao_face_detection_tracking(nao_ip, nao_port, tracking_enabled)
except Exception as e:
print "Exception Caught: %s\n" % e
print USAGE
if __name__ == "__main__":
main()