# Image Attributes API

Image Attributes API also known as Face Detect API is part of the FaceAPI bundle. Subscribing to any of the Face API Plan provides you access to this API.

# Technology

Image Attributes API works on deep learning using our proprietary RCNN (Deep Learning A.I).

# How to Subscribe?

To start using the FaceDetect API, you need to sign up and subscribe to one of the FaceAPI plans View payment plans here. Learn more about signing up to the FaceAPI plans in our article “Getting Started with FaceX APIs“.

Please Note:

The Face Detect API accepts only images as input, each Image can have multiple faces and the API will return results for every face.

# How to send a POST Request?

The Face Detect API accepts a single image as input and provides a detailed analysis of the facial data of each face detected in the image as output, this includes- a face id, age analysis, gender, gender confidence, 68-landmark points, the bounding box of the face, and the image size in pixels.

# Image Guidelines Recommendation

In general, as the face detect API provides an initial analysis of the image, any image would be accepted by the API. However, if you are looking at the results of age and gender analysis, there are a few factors to keep in mind. Please refer to the article “Image Quality for Facial Recognition” for best practices.

We recommend an image resolution no higher than 1024p resolution as anything higher would slow down the response received. Supported image formats are JPEG/PNG/JPG format.

“Read more about the recommended Image Quality“

# Request

Our Global Request Endpoint : http://www.facexapi.com/get_image_attr

Key Description Type
user_id Your valid User ID (as shown in your user portal when you log in) String
content-type multipart/form-data (if using image file)
application/json (if using Base64/URL)

# Body

Key Description Type
image_attr Supported image File formats are JPEG/PNG format File
(or) Base64 encoded image String
(or) Image URL String

Please Note:

Certain Image URLs may not be accessible to the server (if not on HTTPS) or may take too long to load and therefore it is recommended to upload it as File Input or Base64 from above.

# Params Optional

Key Value Description
face_det 1 or 0 To enable auto face detection set value as 1 else 0
bboxes For example: (120,150,200,250) Provide the bounding boxes of the face you require the analysis for

You will need to use the Params Header only if you want to selectively get the results from a photo with multiple faces.

If bounding box coordinates are available- set values for key 'bboxes' in the format x1,y1,x1+w1,y1+h1 and the API will provide analysis for just the face specified.

You can also pass more than one face bboxes at a time by appending each bbox with a & ex:"120,150,200,250&130,180,240,300" or for just one face pass as "120,150,200,250"

Learn more about the bboxes article in this in-depth article


# Response Sample

See a sample response
{
   "status":"ok",
   "code":"1000",
   "success":true,
   "message":"Fetched attributes.",
   "data":{
      "attributes":{
         “face_id_0:{
            "age":20-40,
            "face_rectangle":[
               83,
               82,
               184,
               246
            ],
            "gender":"male",
            "gender_confidence":0.9929,
            "landmarks":{
               "faceLandMark":{
                  “LowerLipPoint1:{
                     "x":135,
                     "y":189
                  },
                  “LowerLipPoint2:{
                     "x":132,
                     "y":187
                  },
                  “LowerLipPoint3:{
                     "x":128,
                     "y":185
                  },
                  “LowerLipPoint4:{
                     "x":141,
                     "y":199
                  },
                  “LowerLipPoint5:{
                     "x":134,
                     "y":196
                  },
                  “LowerLipPoint6:{
                     "x":131,
                     "y":194
                  },
                  “LowerLipPoint7:{
                     "x":126,
                     "y":192
                  },
                  “LowerLipPoint8:{
                     "x":120,
                     "y":190
                  },
                  "chin":{
                     "x":128,
                     "y":218
                  },
                  “face_endpoint_0:{
                     "x":90,
                     "y":138
                  },
                  “face_endpoint_1:{
                     "x":90,
                     "y":154
                  },
                  “face_endpoint_10:{
                     "x":146,
                     "y":217
                  },
                  “face_endpoint_11:{
                     "x":154,
                     "y":212
                  },
                  “face_endpoint_12:{
                     "x":158,
                     "y":204
                  },
                  “face_endpoint_13:{
                     "x":161,
                     "y":192
                  },
                  “face_endpoint_14:{
                     "x":164,
                     "y":180
                  },
                  “face_endpoint_15:{
                     "x":167,
                     "y":168
                  },
                  “face_endpoint_16:{
                     "x":169,
                     "y":157
                  },
                  “face_endpoint_2:{
                     "x":90,
                     "y":171
                  },
                  “face_endpoint_3:{
                     "x":91,
                     "y":187
                  },
                  “face_endpoint_4:{
                     "x":95,
                     "y":200
                  },
                  “face_endpoint_5:{
                     "x":101,
                     "y":209
                  },
                  “face_endpoint_6:{
                     "x":109,
                     "y":214
                  },
                  “face_endpoint_7:{
                     "x":118,
                     "y":216
                  },
                  “face_endpoint_9:{
                     "x":138,
                     "y":220
                  },
                  “leftEyeBottom1:{
                     "x":119,
                     "y":133
                  },
                  “leftEyeBottom2:{
                     "x":113,
                     "y":131
                  },
                  "leftEyeLeftCorner":{
                     "x":108,
                     "y":127
                  },
                  "leftEyeRightCorner":{
                     "x":123,
                     "y":131
                  },
                  “leftEyeTop1:{
                     "x":119,
                     "y":125
                  },
                  “leftEyeTop2:{
                     "x":114,
                     "y":124
                  },
                  "leftEyebrowLeftCorner":{
                     "x":100,
                     "y":114
                  },
                  “leftEyebrowMiddle1:{
                     "x":125,
                     "y":109
                  },
                  “leftEyebrowMiddle2:{
                     "x":117,
                     "y":107
                  },
                  “leftEyebrowMiddle3:{
                     "x":108,
                     "y":108
                  },
                  "leftEyebrowRightCorner":{
                     "x":133,
                     "y":114
                  },
                  "mouthLeft":{
                     "x":114,
                     "y":189
                  },
                  "mouthRight":{
                     "x":149,
                     "y":200
                  },
                  “noseLower1:{
                     "x":139,
                     "y":142
                  },
                  “noseLower2:{
                     "x":139,
                     "y":152
                  },
                  “nosePoint1:{
                     "x":132,
                     "y":167
                  },
                  “nosePoint3:{
                     "x":139,
                     "y":171
                  },
                  "noseRootLeft":{
                     "x":128,
                     "y":167
                  },
                  "noseRootRight":{
                     "x":142,
                     "y":173
                  },
                  "noseTip":{
                     "x":136,
                     "y":169
                  },
                  “noseTop1:{
                     "x":139,
                     "y":124
                  },
                  “noseTop2:{
                     "x":139,
                     "y":134
                  },
                  “rightEyeBottom1:{
                     "x":158,
                     "y":145
                  },
                  “rightEyeBottom2:{
                     "x":152,
                     "y":142
                  },
                  "rightEyeLeftCorner":{
                     "x":148,
                     "y":137
                  },
                  "rightEyeRightCorner":{
                     "x":161,
                     "y":143
                  },
                  “rightEyeTop1:{
                     "x":153,
                     "y":134
                  },
                  “rightEyeTop2:{
                     "x":159,
                     "y":136
                  },
                  "rightEyebrowLeftCorner":{
                     "x":144,
                     "y":118
                  },
                  “rightEyebrowMiddle1:{
                     "x":164,
                     "y":124
                  },
                  “rightEyebrowMiddle2:{
                     "x":158,
                     "y":119
                  },
                  “rightEyebrowMiddle3:{
                     "x":152,
                     "y":117
                  },
                  "rightEyebrowRightCorner":{
                     "x":168,
                     "y":132
                  },
                  “underLipPoint3:{
                     "x":133,
                     "y":189
                  },
                  “underLipPoint4:{
                     "x":137,
                     "y":189
                  },
                  “underLipPoint7:{
                     "x":129,
                     "y":192
                  },
                  “underLipPoint8:{
                     "x":133,
                     "y":194
                  },
                  “upperLipPoint1:{
                     "x":122,
                     "y":188
                  },
                  “upperLipPoint10:{
                     "x":146,
                     "y":199
                  },
                  “upperLipPoint2:{
                     "x":129,
                     "y":187
                  },
                  “upperLipPoint5:{
                     "x":142,
                     "y":195
                  },
                  “upperLipPoint6:{
                     "x":116,
                     "y":189
                  },
                  “upperLipPoint9:{
                     "x":137,
                     "y":196
                  }
               }
            }
         },
         "image_size":[
            250,
            215
         ]
      }
   }
}

# Response Definitions Explained

The following are the output definitinos of the Image Attributes API

Attribute Name Definition Value Range
“face_id_X” The reference ID number of faces detected in the image For n Faces in an image, Face ID will be as face_id_(n-1)
“age” Result of Age analysis Age in year ranges : “0-10” (or) “10-20” (or) “20-40” (or) “40-60” (or) “60-100”
“face_rectangle” Bounding Box Param 4 coordinate value of the bounding box of the detected face (x,y, x+w, y+h). Used as param for Face recognition
“gender” Result of Gender Analysis Values are: Male (or) Female
“gender_confidence” The confidence level of Gender Analysis Value range of 0.501 to 1.00
"landmarks" Detailed definition provided below
“image_size” Size of the image provided Image size (height x width) in pixels

Definition for Landmarks Response

landmark_image

Image Attributes API extracts 68 landmark points of the face and provides the 2 coordinate location of each landmark point.

# Jawline

landmark_image
Key Definition
“face_endpoint_0” Point: 0
“face_endpoint_1” Point: 1
“face_endpoint_2” Point: 2
“face_endpoint_3” Point: 3
“face_endpoint_4” Point: 4
“face_endpoint_5” Point: 5
“face_endpoint_6” Point: 6
“face_endpoint_7” Point: 7
“face_endpoint_9” Point: 9
“chin” Point: 8
“face_endpoint_10” Point: 10
“face_endpoint_11” Point: 11
“face_endpoint_12” Point: 12
“face_endpoint_13” Point: 13
“face_endpoint_14” Point: 14
“face_endpoint_15” Point: 15
“face_endpoint_16” Point: 16

# Left Eye

landmark_image
Key Definition
“leftEyebrowLeftCorner” Point: 17
“leftEyebrowMiddle3” Point: 18
“leftEyebrowMiddle2” Point: 19
“leftEyebrowMiddle1” Point: 20
“leftEyebrowRightCorner” Point: 21
“leftEyeLeftCorner” Point: 36
“leftEyeTop2” Point: 37
“leftEyeTop1” Point: 38
“leftEyeRightCorner” Point: 39
“leftEyeBottom1” Point: 40
“leftEyeBottom2” Point: 41

# Right Eye

landmark_image
Key Definition
“rightEyebrowLeftCorner” Point : 22
“rightEyebrowMiddle3” Point : 23
“rightEyebrowMiddle2” Point : 24
“rightEyebrowMiddle1” Point : 25
“rightEyebrowRightCorner” Point : 26
“rightEyeLeftCorner” Point : 42
“rightEyeTop1” Point : 43
“rightEyeTop2” Point : 44
“rightEyeRightCorner” Point : 45
“rightEyeBottom1” Point : 46
“rightEyeBottom2” Point : 47

# Nose

landmark_image
Key Definition
“noseTop1” Point : 27
“noseTop2” Point : 28
“noseLower1” Point : 29
“noseLower2” Point : 30
“noseRootLeft” Point : 31
“nosePoint1” Point : 32
“noseTip” Point : 33
“nosePoint3” Point : 34
“noseRootRight” Point : 35

# Lips

landmark_image
Key Definition
“mouthLeft” Point : 48 mouth
“upperLipPoint1” Point : 49
“upperLipPoint2” Point : 50
“underLipPoint3” Point : 51
“underLipPoint4” Point : 52
“upperLipPoint5” Point : 53
“mouthRight” Point : 54
“LowerLipPoint4” Point : 55
“LowerLipPoint5” Point : 56
“LowerLipPoint6” Point : 57
“LowerLipPoint7” Point : 58
“LowerLipPoint8” Point : 59
“upperLipPoint6” Point : 60
“underLipPoint7” Point : 61
“underLipPoint8” Point : 62
“upperLipPoint9” Point : 63
“upperLipPoint10” Point: 64
“LowerLipPoint1” Point : 65
“LowerLipPoint2” Point : 66
“LowerLipPoint3” Point : 67

# Video Demo of Web-Trial

# Sample Codes

cURL Image File
# you can get your user_id in the user dashboard
curl --request POST \
  --url 'http://facexapi.com/get_image_attr' \
  --header 'content-type: multipart/form-data' \
  --header 'user_id: your user_id' \
  --form image_attr='@image.png'
cURL Base64 Image or URL
# you can get your user_id in the user dashboard
curl --request POST \
  --url 'http://facexapi.com/get_image_attr' \
  --header "Content-Type: application/json" \
  --header 'user_id: your user_id' \
  --data '{
	"image_attr":"https://cdn.dnaindia.com/sites/default/files/styles/full/public/2018/03/08/658858-577200-katrina-kaif-052217.jpg"
}'
PHP Image File
<?php
// you can get user_id in user dashboard
$APP_ID = "your_user_id";
//------------------------

$IMAGE_PATH ="image_path"; // add image path from local system
$queryUrl = "http://facexapi.com/get_image_attr"; // face attribute url

function makecUrlFile($file){
  $mime = mime_content_type($file);
  $info = pathinfo($file);
  $name = $info['basename'];
  $output = new CURLFile($file, $mime, $name);
  return $output;
}

$imageObjectt = makecUrlFile($IMAGE_PATH);
$request = curl_init();
$imageObject =  array("image_attr" => $imageObjectt);
curl_setopt($request, CURLOPT_URL, $queryUrl);
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request, CURLOPT_HTTPHEADER, array(
    "content-type: multipart/form-data",
    "user_id:" . $APP_ID
)
    );
curl_setopt($request,CURLOPT_POSTFIELDS,$imageObject);
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($request); // curl response
    echo $response;
    curl_close($request);
?>
PHP Base64 Image or URL
<?php
// you can get the user_id in user dashboard
$APP_ID = "your_user_id";
//-----------------------

$IMAGE_URL = "https://cdn.somethinghaute.com/wp-content/uploads/2018/07/katrina-kaif.jpg"; // add image url
$queryUrl = "http://facexapi.com/get_image_attr"; // face attribute url

$imageObject =  array("image_attr" => $IMAGE_URL);
$jsonDataEncoded = json_encode($imageObject);
$request = curl_init();
curl_setopt($request, CURLOPT_URL, $queryUrl);
curl_setopt($request, CURLOPT_POST, true);
curl_setopt($request,CURLOPT_POSTFIELDS,$jsonDataEncoded);
curl_setopt($request, CURLOPT_HTTPHEADER, array(
    "Content-Type: application/json",
    "user_id:" . $APP_ID
)
    );
curl_setopt($request, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($request); // curl response
echo $response;
curl_close($request);
?>
ruby Image File
require 'uri'
require 'net/http'

url = URI("https://facexapi.com/get_image_attr")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["user_id"] = 'your_user_id'
request["Content-Type"] = 'multipart/form-data'
request.body = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"image_attr\"; filename=\"image_file_name\"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"

response = http.request(request)
puts response.read_body
ruby Base64 Image or URL
require 'uri'
require 'net/http'

url = URI("https://facexapi.com/get_image_attr")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request["user_id"] = 'your_user_d'
request.body = "{\n\t\"image_attr\":\"your_image_url_base64\"\n}"
response = http.request(request)
puts response.read_body
python Image File
import requests
# you can get the user_id  in user dashboard
USER_ID = "your user_id"
#------------------------------

IMAGE_PATH = "/home/atul/Downloads/kat.jpeg" # add image path from local system
API_URL = "http://facexapi.com/get_image_attr" # face attribute url
files = {'image_attr': open(IMAGE_PATH, 'rb')}
headers = {"user_id": USER_ID} 
r = requests.post(API_URL,headers = headers,files = files) # comment this line to use url image
print (r.text) # printing response
python Base64 Image or URL
import requests
import json
# you can get the user_id  in user dashboard
USER_ID = "your_user_id"
#------------------------------
IMAGE_URL = "https://cdn.dnaindia.com/sites/default/files/styles/full/public/2018/03/08/658858-577200-katrina-kaif-052217.jpg" # add image url
API_URL = "http://facexapi.com/get_image_attr?face_det=1" # face attribute url
payload = {"image_attr": IMAGE_URL}
headers = {"user_id": USER_ID , "Content-Type":"application/json"} 
r = requests.post(url = API_URL,headers = headers,data = json.dumps(payload)) # uncomment this line to use url image
print (r.text) # printing response
GO Image File
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://facexapi.com/get_image_attr"
	payload := strings.NewReader("------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"image_attr\"; filename=\"image_file\"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--")

	req, _ := http.NewRequest("POST", url, payload)
	req.Header.Add("user_id", "your_user_id")
  req.Header.Add("Content-Type", "multipart/form-data")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)
	fmt.Println(res)
	fmt.Println(string(body))

}
GO Base64 Image or URL
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://facexapi.com/get_image_attr"
	payload := strings.NewReader("{\n\t\"image_attr\":\"your_mage_url_orbase64\"\n}")
	req, _ := http.NewRequest("POST", url, payload)
	req.Header.Add("Content-Type", "application/json")
	req.Header.Add("user_id", "your_user_id")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)
	fmt.Println(res)
	fmt.Println(string(body))

}
R Image File
POST(url = "http://facexapi.com/get_image_attr",
          add_headers(user_id = "your_user_id"),
          content_type('multipart/form-data'),
          body = list(image_attr = "image_file.jpg"))
python code to draw landmark on an image All types
import requests
import json
from PIL import Image, ImageDraw
from io import BytesIO
# you can get the user_id  in user dashboard
USER_ID = "your_user_id"
#------------------------------
IMAGE_URL = "https://www.whoa.in/20150417-Whoa/Leonardo-Dicaprio-Face-Closeup-HD-Wallpaper.jpg" # add image url
API_URL = "http://facexapi.com/get_image_attr?face_det=1" # face attribute url
response = requests.get(IMAGE_URL)
image = Image.open(BytesIO(response.content))
draw = ImageDraw.Draw(image)

payload = {"image_attr": IMAGE_URL}
headers = {"user_id": USER_ID , "Content-Type":"application/json"} 
r = requests.post(url = API_URL,headers = headers,data = json.dumps(payload)) # uncomment this line to use url image

json_resp=json.loads(r.text)
for key, value in json_resp['data']['attributes'].items():
    if 'face_id' in key:
        data=json_resp['data']['attributes'][key]['landmarks']['faceLandMark']
        jawline=[]
        lefteyebrow=[]
        righteyebrow=[]
        nose_a=[]
        nose_b=[]
        left_eye=[]
        right_eye=[]
        mouth_a=[]
        mouth_b=[]
        
        lefteyebrow.append((data['leftEyebrowLeftCorner']['x'],data['leftEyebrowLeftCorner']['y']))
        lefteyebrow.append((data['leftEyebrowMiddle3']['x'],data['leftEyebrowMiddle3']['y']))
        lefteyebrow.append((data['leftEyebrowMiddle2']['x'],data['leftEyebrowMiddle2']['y']))
        lefteyebrow.append((data['leftEyebrowMiddle1']['x'],data['leftEyebrowMiddle1']['y']))
        lefteyebrow.append((data['leftEyebrowRightCorner']['x'],data['leftEyebrowRightCorner']['y']))

        righteyebrow.append((data['rightEyebrowLeftCorner']['x'],data['rightEyebrowLeftCorner']['y']))
        righteyebrow.append((data['rightEyebrowMiddle3']['x'],data['rightEyebrowMiddle3']['y']))
        righteyebrow.append((data['rightEyebrowMiddle2']['x'],data['rightEyebrowMiddle2']['y']))
        righteyebrow.append((data['rightEyebrowMiddle1']['x'],data['rightEyebrowMiddle1']['y']))
        righteyebrow.append((data['rightEyebrowRightCorner']['x'],data['rightEyebrowRightCorner']['y']))   
            
        nose_a.append((data['noseTop1']['x'],data['noseTop1']['y']))
        nose_a.append((data['noseTop2']['x'],data['noseTop2']['y']))
        nose_a.append((data['noseLower1']['x'],data['noseLower1']['y']))
        nose_a.append((data['noseLower2']['x'],data['noseLower2']['y']))
        nose_b.append((data['noseLower2']['x'],data['noseLower2']['y']))
        nose_b.append((data['noseRootLeft']['x'],data['noseRootLeft']['y']))
        nose_b.append((data['nosePoint1']['x'],data['nosePoint1']['y']))
        nose_b.append((data['noseTip']['x'],data['noseTip']['y']))
        nose_b.append((data['nosePoint3']['x'],data['nosePoint3']['y']))
        nose_b.append((data['noseRootRight']['x'],data['noseRootRight']['y']))

        left_eye.append((data['leftEyeLeftCorner']['x'],data['leftEyeLeftCorner']['y']))
        left_eye.append((data['leftEyeTop2']['x'],data['leftEyeTop2']['y']))
        left_eye.append((data['leftEyeTop1']['x'],data['leftEyeTop1']['y']))
        left_eye.append((data['leftEyeRightCorner']['x'],data['leftEyeRightCorner']['y']))
        left_eye.append((data['leftEyeBottom1']['x'],data['leftEyeBottom1']['y']))
        left_eye.append((data['leftEyeBottom2']['x'],data['leftEyeBottom2']['y']))

        right_eye.append((data['rightEyeLeftCorner']['x'],data['rightEyeLeftCorner']['y']))
        right_eye.append((data['rightEyeTop1']['x'],data['rightEyeTop1']['y']))
        right_eye.append((data['rightEyeTop2']['x'],data['rightEyeTop2']['y']))
        right_eye.append((data['rightEyeRightCorner']['x'],data['rightEyeRightCorner']['y']))
        right_eye.append((data['rightEyeBottom1']['x'],data['rightEyeBottom1']['y']))
        right_eye.append((data['rightEyeBottom2']['x'],data['rightEyeBottom2']['y']))

        mouth_a.append((data['mouthLeft']['x'],data['mouthLeft']['y']))
        for i in range (1,6):
            if i==3 or i==4:
                mouth_a.append((data['underLipPoint'+str(i)]['x'],data['underLipPoint'+str(i)]['y']))
            else:
                mouth_a.append((data['upperLipPoint'+str(i)]['x'],data['upperLipPoint'+str(i)]['y']))
            
        mouth_a.append((data['mouthRight']['x'],data['mouthRight']['y']))

        for i in range (4,9):
            mouth_a.append((data['LowerLipPoint'+str(i)]['x'],data['LowerLipPoint'+str(i)]['y']))
        for i in range (6,11):
            if i==7 or i==8:
                mouth_b.append((data['underLipPoint'+str(i)]['x'],data['underLipPoint'+str(i)]['y']))
            else:
                mouth_b.append((data['upperLipPoint'+str(i)]['x'],data['upperLipPoint'+str(i)]['y']))
        for i in range (1,4):
            mouth_b.append((data['LowerLipPoint'+str(i)]['x'],data['LowerLipPoint'+str(i)]['y']))
        
        for i in range(17):
            if(i==8):
               j_point=data['chin']['x'],data['chin']['y']
            else:
                j_point=data['face_endpoint_'+str(i)]['x'],data['face_endpoint_'+str(i)]['y']
            jawline.append(j_point)        

        draw.line(jawline,fill=(0, 0, 255), width=1)
        draw.line(lefteyebrow,fill=(0, 0, 255), width=1)
        draw.line(righteyebrow,fill=(0, 0, 255), width=1)
        draw.line(nose_a,fill=(0, 0, 255), width=1)
        draw.polygon(nose_b,fill=None, outline=(0, 0, 255))
        draw.polygon(left_eye,fill=None, outline=(0, 0, 255))
        draw.polygon(right_eye,fill=None, outline=(0, 0, 255))
        draw.polygon(mouth_a,fill=None, outline=(0, 0, 255))
        draw.polygon(mouth_b,fill=None, outline=(0, 0, 255))
        image.show()
        image.save("image1.png")
        ```
        :::
Last Updated: 5/12/2020, 4:35:31 PM