Face detection and tracking ¶
This section illustrates the possibilites of ALFaceDetection.
Detect faces and print information about them.
# -*- encoding: 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 # Second Field = array of face_Info's. faceInfoArray = val 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 # Second Field = Extra info (empty for now). faceExtraInfo = faceInfo print " alpha %.3f - beta %.3f" % (faceShapeInfo, faceShapeInfo) print " width %.3f - height %.3f" % (faceShapeInfo, faceShapeInfo) 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.
# -*- encoding: UTF-8 -*- # 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 if len(sys.argv) > 2: tracking_enabled = bool(int(sys.argv)) 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()