Face Detection¶
The face detection API detects faces and returns their coordinates. It functions similarly to the face recognition API except that it does not perform recognition.
Example
import requests
image_data = open("family.jpg","rb").read()
response = requests.post("http://localhost:80/v1/vision/face",files={"image":image_data}).json()
print(response)
Result
{'predictions': [{'x_max': 712, 'y_max': 261, 'x_min': 626, 'confidence': 0.99990666, 'y_min': 145}, {'x_max': 620, 'y_max': 288, 'x_min': 543, 'confidence': 0.99986553, 'y_min': 174}, {'x_max': 810, 'y_max': 242, 'x_min': 731, 'confidence': 0.99986434, 'y_min': 163}, {'x_max': 542, 'y_max': 279, 'x_min': 477, 'confidence': 0.99899536, 'y_min': 197}], 'success': True}
We can use the coordinates returned to extract the faces from the image
import requests
from PIL import Image
image_data = open("family.jpg","rb").read()
image = Image.open("family.jpg").convert("RGB")
response = requests.post("http://localhost:80/v1/vision/face",files={"image":image_data}).json()
i = 0
for face in response["predictions"]:
y_max = int(face["y_max"])
y_min = int(face["y_min"])
x_max = int(face["x_max"])
x_min = int(face["x_min"])
cropped = image.crop((x_min,y_min,x_max,y_max))
cropped.save("image{}.jpg".format(i))
i += 1
Result
Performance
DeepStack offers three modes allowing you to tradeoff speed for peformance. During startup, you can specify performance mode to be , “High” , “Medium” and “Low”
The default mode is “Medium”
You can speciy a different mode as seen below
sudo docker run -e MODE=High -e VISION-FACE=True -v localstorage:/datastore \
-p 80:5000 deepquestai/deepstack
Note the -e MODE=High above
Setting Minimum Confidence
By default, the minimum confidence for detecting faces is 0.45. The confidence ranges between 0 and 1. If the confidence level for a face falls below the min_confidence, no face is detected.
The min_confidence parameter allows you to increase or reduce the minimum confidence.
We lower the confidence allowed below.
Example
import requests
image_data = open("family.jpg","rb").read()
response = requests.post("http://localhost:80/v1/vision/face",
files={"image":image_data},data={"min_confidence":0.30}).json()