On this page we will use the Microsoft Cognitive API to process faces.
Detecting Faces using Microsoft Cognitive Services |
Source code
The following outlines the Python code used:
import sys import json import urllib import requests from pprint import pprint url1 ='http://asecuritysite.com/log/F52361.jpg' if (len(sys.argv)>1): url1=str(sys.argv[1]) file='zzzz' if (len(sys.argv)>2): file=str(sys.argv[2]) headers = { 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': '--key--', } params = urllib.parse.urlencode({ 'returnFaceId': 'true', 'returnFaceLandmarks': 'true', 'returnFaceAttributes': 'age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup', }) body = { 'url': url1 } url = 'https://westeurope.api.cognitive.microsoft.com/face/v1.0/detect?%s' % params resp = requests.post(url, data=json.dumps(body), headers=headers) binary = resp.content output = json.loads(binary) print (binary) print ('Face ID: ',output[0]['faceId']) print ('Face Rectangle: ',output[0]['faceRectangle']) print ('Age: ',output[0]['faceAttributes']['age']) print ('Gender: ',output[0]['faceAttributes']['gender']) print ('Smile: ',output[0]['faceAttributes']['smile']) print ('Glasses: ',output[0]['faceAttributes']['glasses']) print() print ('Facial Hair: ',output[0]['faceAttributes']['facialHair']) print() print ('Head Pose: ',output[0]['faceAttributes']['headPose']) print() print ('Emotion: ',output[0]['faceAttributes']['emotion']) print() print ('Hair: ',output[0]['faceAttributes']['hair']) print() print ('Makeup: ',output[0]['faceAttributes']['makeup'])
A sample JSON return is:
[{u'faceAttributes': {u'age': 30.5, u'emotion': {u'anger': 0.005, u'contempt': 0.0, u'disgust': 0.0, u'fear': 0.002, u'happiness': 0.28, u'neutral': 0.697, u'sadness': 0.012, u'surprise': 0.003}, u'facialHair': {u'beard': 0.0, u'moustache': 0.1, u'sideburns': 0.0}, u'gender': u'male', u'glasses': u'NoGlasses', u'hair': {u'bald': 0.0, u'hairColor': [{u'color': u'black', u'confidence': 0.99}, {u'color': u'other', u'confidence': 0.59}, {u'color': u'red', u'confidence': 0.41}, {u'color': u'gray', u'confidence': 0.36}, {u'color': u'brown', u'confidence': 0.26}, {u'color': u'blond', u'confidence': 0.07}], u'invisible': False}, u'headPose': {u'pitch': 0.0, u'roll': 0.3, u'yaw': -2.3}, u'makeup': {u'eyeMakeup': False, u'lipMakeup': False}, u'smile': 0.28}, u'faceId': u'b1200f4c-26bf-4718-b9c4-de7056632410', u'faceRectangle': {u'height': 537, u'left': 394, u'top': 213, u'width': 537}}]
If we enable the faceAttributes the return also includes:
u'faceLandmarks': {u'eyeLeftBottom': {u'x': 550.8, u'y': 370.3}, u'eyeLeftInner': {u'x': 582.5, u'y': 357.6}, u'eyeLeftOuter': {u'x': 513.2, u'y': 353.7}, u'eyeLeftTop': {u'x': 552.4, u'y': 334.4}, u'eyeRightBottom': {u'x': 777.8, u'y': 371.9}, u'eyeRightInner': {u'x': 741.0, u'y': 356.9}, u'eyeRightOuter': {u'x': 813.0, u'y': 358.6}, u'eyeRightTop': {u'x': 778.8, u'y': 334.9}, u'eyebrowLeftInner': {u'x': 598.8, u'y': 304.6}, u'eyebrowLeftOuter': {u'x': 450.2, u'y': 305.1}, u'eyebrowRightInner': {u'x': 713.2, u'y': 307.2}, u'eyebrowRightOuter': {u'x': 877.5, u'y': 326.7}, u'mouthLeft': {u'x': 563.9, u'y': 607.7}, u'mouthRight': {u'x': 765.0, u'y': 605.6}, u'noseLeftAlarOutTip': {u'x': 597.7, u'y': 504.3}, u'noseLeftAlarTop': {u'x': 619.0, u'y': 464.4}, u'noseRightAlarOutTip': {u'x': 732.4, u'y': 512.8}, u'noseRightAlarTop': {u'x': 709.9, u'y': 465.1}, u'noseRootLeft': {u'x': 629.3, u'y': 360.7}, u'noseRootRight': {u'x': 692.5, u'y': 359.1}, u'noseTip': {u'x': 661.6, u'y': 526.6}, u'pupilLeft': {u'x': 548.6, u'y': 346.6}, u'pupilRight': {u'x': 774.9, u'y': 348.3}, u'underLipBottom': {u'x': 660.9, u'y': 649.5}, u'underLipTop': {u'x': 663.7, u'y': 622.0}, u'upperLipBottom': {u'x': 662.4, u'y': 623.4}, u'upperLipTop': {u'x': 667.1, u'y': 608.2}}, u'faceRectangle': {u'height': 537, u'left': 394, u'top': 213, u'width': 537}}