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
const request = require("request") const fs = require("fs") image_stream = fs.createReadStream("family.jpg") var form = {"image":image_stream} request.post({url:"http://localhost:80/v1/vision/face", formData:form},function(err,res,body){ response = JSON.parse(body) predictions = response["predictions"] console.log(response) })
Result
{ success: true, predictions: [ { confidence: 0.99990666, y_min: 145, x_min: 626, y_max: 261, x_max: 712 }, { confidence: 0.99986553, y_min: 174, x_min: 543, y_max: 288, x_max: 620 }, { confidence: 0.99986434, y_min: 163, x_min: 731, y_max: 242, x_max: 810 }, { confidence: 0.99899536, y_min: 197, x_min: 477, y_max: 279, x_max: 542 } ] }
Using the face coordinates, we shall use the Easy Image library to extract the faces and save them
const request = require("request") const fs = require("fs") const easyimage = require("easyimage") image_stream = fs.createReadStream("family.jpg") var form = {"image":image_stream} request.post({url:"http://localhost:80/v1/vision/face", formData:form},function(err,res,body){ response = JSON.parse(body) predictions = response["predictions"] for(var i =0; i < predictions.length; i++){ pred = predictions[i] gender = pred["gender"] y_min = pred["y_min"] x_min = pred["x_min"] y_max = pred["y_max"] x_max = pred["x_max"] easyimage.crop( { src: "family.jpg", dst: i.toString() + "_.jpg", x: x_min, cropwidth: x_max - x_min, y: y_min, cropheight: y_max - y_min, } ) } })
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
const request = require("request") const fs = require("fs") image_stream = fs.createReadStream("family.jpg") var form = {"image":image_stream, "min_confidence":0.30} request.post({url:"http://localhost:80/v1/vision/face", formData:form},function(err,res,body){ response = JSON.parse(body) predictions = response["predictions"] console.log(response) })