0
votes

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:

  • I am importing FACE API 1.0 at the moment, is there any update version?
  • I am using FACE API on IOS as well and in Android I do not see attributes I can see in IOS like glasses, why?

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?

1

1 Answers

2
votes
  1. v1.0 is the most current API.
  2. 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
            });
    
  3. 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.