I have succesfully implemented the below:
private FaceServiceClient faceServiceClient =
new FaceServiceRestClient("xxx", "yyy");
private void detectAndFrame(final Bitmap imageBitmap)
{
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
ByteArrayInputStream inputStream =
new ByteArrayInputStream(outputStream.toByteArray());
AsyncTask<InputStream, String, Face[]> detectTask =
new AsyncTask<InputStream, String, Face[]>() {
@Override
protected Face[] doInBackground(InputStream... params) {
try {
publishProgress("Detecting...");
Log.e("face", "detecting");
Face[] result = faceServiceClient.detect(
params[0],
false, // returnFaceId
false, // returnFaceLandmarks
null // returnFaceAttributes: a string like "age, gender"
);
Now I want to get the face attributes like :
Age,Gender,FacialHair
Question 1:
Question 2:
I need an help on changing the query so it can get attributes like Age,Gender. I tried to change
null // returnFaceAttributes: a string like "age, gender"
to
age,gender // returnFaceAttributes: a string like "age, gender"
or "Age, Gender" , or [age, gender] or [Age, Gender] with no luck.
From the interface I see:
public interface FaceServiceClient {
Face[] detect(String var1, boolean var2, boolean var3, FaceServiceClient.FaceAttributeType[] var4) throws ClientException, IOException;
Face[] detect(InputStream var1, boolean var2, boolean var3, FaceServiceClient.FaceAttributeType[] var4) throws ClientException, IOException;
and
public static enum FaceAttributeType {
Age {
public String toString() {
return "age";
}
},
Gender {
public String toString() {
return "gender";
}
},
FacialHair {
public String toString() {
return "facialHair";
}
},
Smile {
public String toString() {
return "smile";
}
},
HeadPose {
public String toString() {
return "headPose";
}
};
How I have to format those parameters to get the values ?
Question 3:
I need to gather and work the output I receive from the call. What are the variables of the object returned? Like number of faces detected, age, gender?
The third argument to detect
is an array of enumerated types. You can see a sample app here. The relevant code is thus:
return faceServiceClient.detect(
params[0],
false, /* Whether to return face ID */
false, /* Whether to return face landmarks */
new FaceServiceClient.FaceAttributeType[] {
FaceServiceClient.FaceAttributeType.Age,
FaceServiceClient.FaceAttributeType.Gender
});
The response is an array of faces. The face count would be the length of said array. The age and gender face[n].faceAttributes.age
and face[n].faceAttributes.gender
, respectively.