Advertisement
Guest User

FaceReco

a guest
May 21st, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.57 KB | None | 0 0
  1. import socket
  2.  
  3. import qi
  4. import time
  5. import sys
  6. import cv2
  7. import numpy as np
  8.  
  9. from naoqi import ALModule, ALBroker
  10.  
  11.  
  12. class FaceRecognition(ALModule):
  13.     """
  14.    Face recognition utility class
  15.    """
  16.  
  17.     serverip = 'localhost'
  18.     port = 8888
  19.  
  20.     # naoqi sessions
  21.     face_recon = None
  22.     tts = None
  23.     memory = None
  24.     subscriber = None
  25.     video_service = None
  26.  
  27.     # search options
  28.     scanning = False
  29.     searched_person = None
  30.     learn = False
  31.     face_to_learn = None
  32.     face_learend = False
  33.  
  34.     def __init__(self, name, session):
  35.         ALModule.__init__(self, name)
  36.  
  37.         self.tts = session.service("ALTextToSpeech")
  38.         self.face_recon = session.service("ALFaceDetection")
  39.         self.video_service = session.service("ALVideoDevice")
  40.  
  41.         self.memory = session.service("ALMemory")
  42.         self.subscriber = self.memory.subscriber("FaceDetected")
  43.         self.subscriber.signal.connect(self.faceCallback)
  44.  
  45.     def learn_face(self, name):
  46.         """Learns Face that is in the frame atm"""
  47.  
  48.         self.face_to_learn = name
  49.         self.learn = True
  50.         while not self.face_learend:
  51.             time.sleep(0)
  52.  
  53.         self.face_to_learn = None
  54.         self.learn = False
  55.  
  56.     def known_faces(self):
  57.         """returns list of known faces"""
  58.         return self.face_recon.getLearnedFacesList()
  59.  
  60.     def delete_faces(self):
  61.         """Deletes all known faces"""
  62.         self.face_recon.clearDatabase()
  63.  
  64.     def delete_face(self, name):
  65.         """Deletes a learned face by name"""
  66.         self.face_recon.forgetPerson(name)
  67.  
  68.     def find_face(self, name):
  69.         """Finds a face that was previously learned"""
  70.         self.searched_person = name
  71.         self.scanning = True
  72.  
  73.         # todo: tell movement class to do search movement.
  74.         # movement.search()
  75.  
  76.     def faceCallback(self, *_args):
  77.         """Callback method for faceDetected"""
  78.         if self.scanning:
  79.             if _args[2] == self.searched_person:
  80.                 self.person_found()
  81.  
  82.         if self.learn:
  83.             while not self.face_recon.learnFace(self.face_to_learn):
  84.                 time.sleep(1)
  85.             self.tts.say('hello ', self.face_to_learn)
  86.  
  87.     def person_found(self):
  88.         """activity started when searched person was found"""
  89.         # todo: do stuff when person is found.
  90.  
  91.         # movement.moveToPerson()
  92.         # reset search variables
  93.         self.scanning = False
  94.         self.searched_person = None
  95.  
  96.     def grayscale_img(self):
  97.         """Takes a picture and returns it as greyscale image"""
  98.         t0 = time.time()
  99.  
  100.         resolution = 2  # VGA
  101.         colorSpace = 11  # RGB
  102.         videoClient = self.video_service.subscribe("python_client", resolution, colorSpace, 5)
  103.         # Time the image transfer.
  104.         images = []
  105.         for i in range(0, 50):
  106.             naoImage = self.video_service.getImageRemote(videoClient)
  107.             # Get the image size and pixel array.
  108.             imageWidth = naoImage[0]
  109.             imageHeight = naoImage[1]
  110.             array = naoImage[6]
  111.             image_string = str(bytearray(array))
  112.  
  113.             nparr = np.fromstring(image_string, np.uint8).reshape(imageHeight, imageWidth, 3)
  114.  
  115.             img_grey = cv2.cvtColor(nparr, cv2.COLOR_RGB2GRAY)
  116.             images.append(img_grey)
  117.  
  118.         t1 = time.time()
  119.         print('time used to aquire picture: '+str(t1-t0)+'s')
  120.         self.video_service.unsubscribe(videoClient)
  121.  
  122.         return images
  123.  
  124.     # cv2.resize(img_grey, (256, 256))
  125.  
  126.     def send_image(self):
  127.         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  128.         server_adress = (self.serverip, self.port)
  129.         s.connect(server_adress)
  130.  
  131.         s.send(self.grayscale_img())
  132.  
  133.  
  134. if __name__ == '__main__':
  135.     connect_ip = '192.168.1.102'
  136.     connection_url = connect_ip+':9559'
  137.  
  138.     myBroker = ALBroker("myBroker",
  139.                         "0.0.0.0",  # listen to anyone
  140.                         0,  # find a free port and use it
  141.                         connect_ip,  # parent broker IP
  142.                         9559)  # parent broker port
  143.     app = qi.Application(["--qi-url=" + connection_url])  # Connection to robot
  144.     app.start()
  145.     session = app.session
  146.     global FaceRec
  147.  
  148.     FaceRec = FaceRecognition('FaceRecognition', session)
  149.     # img = FaceRec.grayscale_img()
  150.     FaceRec.learn_face('Pascal')
  151.  
  152.     try:
  153.         while True:
  154.             time.sleep(1)
  155.     except KeyboardInterrupt:
  156.         print
  157.         print "Interrupted by user, shutting down"
  158.         myBroker.shutdown()
  159.         sys.exit(0)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement