Skip to content

Face Identification

This module lets you search for a face from an image in a database of faces. Learn more in the Web Service section.

Function call

The function call is searchPerson(searchRequest, callback).

searchRequest is an object representing the search request, it contains the following properties:

  • The groups property is optional and specifies the groups where the search should be conducted. If no groups are provided, the search is performed in the default group.
  • The imageUpload property represents the image to be uploaded for the search.
  • The threshold property denotes the similarity threshold.
  • The limit property defines the maximum number of results to be returned.
  • The detectAll property enables the detection of all faces in the image. If set to false, only the most central face is detected.
  • The outputImageParams property allows specifying image settings, such as image size and aspect ratio, for the face images that are returned in the identification response.

callback is a function invoked once the search operation is completed. Includes search results as a list of SearchPerson objects.

let imageUpload = PersonDatabase.ImageUpload(imageData: yourImageData)
let searchRequest = PersonDatabase.SearchPersonRequest(imageUpload: imageUpload)
searchRequest.groupIdsForSearch = groupIds
searchRequest.detectAll = true

FaceSDK.service.personDatabase.searchPerson(searchRequest: searchRequest) { response in
  // handle response
}
RFSImageUpload *imageUpload = [[RFSImageUpload alloc] initWithImageData:yourImageData];
RFSSearchPersonRequest *searchRequest = [[RFSSearchPersonRequest alloc] initWithImageUpload:imageUpload];
searchRequest.groupIdsForSearch = groupIds;
searchRequest.detectAll = YES;

[RFSFaceSDK.service.personDatabase searchPerson:searchRequest completion:^(RFSSearchPersonResponse * _Nonnull response) {
  // handle response
}];
val imageUpload = ImageUpload()  
val imageData = <byte array>  
imageUpload.imageData = imageData  

val searchPersonRequest = SearchPersonRequest()  
searchPersonRequest.groupIdsForSearch = <array of String>
searchPersonRequest.imageUpload = imageUpload
searchPersonRequest.detectAll = true

FaceSDK.Instance().personDatabase(context)  
    .searchPerson(searchPersonRequest, object : PersonDBCallback<List<SearchPerson?>?> {  
        override fun onSuccess(response: List<SearchPerson?>?) {
            //Handle positive response
        }  
        override fun onFailure(message: String) {
            //Handle failed request here
        }  
    })
ImageUpload imageUpload = new ImageUpload();  
imageUpload.setImageData(byte[] data);

SearchPersonRequest searchPersonRequest = new SearchPersonRequest();  
searchPersonRequest.setGroupIdsForSearch(String[] ids);
searchPersonRequest.setImageUpload(imageUpload);
searchPersonRequest.setDetectAll(true);

FaceSDK.Instance().personDatabase(context).searchPerson(searchPersonRequest, 
    new PersonDBCallback<List<SearchPerson>>() {  
        @Override  
        public void onSuccess(@Nullable List<SearchPerson> response) {

        }  

        @Override
        public void onFailure(@NonNull String message) {
            //Handle failed request here
        }  
    });
var request = SearchPersonRequest(
  ImageUpload.withImageData(imageData),
  groupIdsForSearch: ["id1", "id2", "id3"],
  detectAll: true,
);

var (searchPerson, error) = await FaceSDK.instance.personDatabase.searchPerson(request);
var request = new SearchPersonRequest(
  ImageUpload.withImageData(imageData), {
  groupIdsForSearch: ["id1", "id2", "id3"],
  detectAll: true,
});

var [searchPerson, error] = await FaceSDK.instance.personDatabase.searchPerson(request);
// Android
public void SearchPerson(byte[] data, String[] ids)
{
    ImageUpload imageUpload = new();
    imageUpload.SetImageData(data);

    SearchPersonRequest searchPersonRequest = new();
    searchPersonRequest.SetGroupIdsForSearch(ids);
    searchPersonRequest.ImageUpload = imageUpload;
    searchPersonRequest.DetectAll = true;

    FaceSDK.Instance().PersonDatabase().SearchPerson(searchPersonRequest, this);
}

public void OnSuccess(Java.Lang.Object response)
{

}

public void OnFailure(string message)
{
    //Handle failed request here
}

// iOS
RFSImageUpload imageUpload = new(yourImageData);
RFSSearchPersonRequest searchRequest = new(imageUpload)
{
    GroupIdsForSearch = groupIds,
    DetectAll = true
};

RFSFaceSDK.Service.PersonDatabase.SearchPerson(searchRequest, (RFSSearchPersonResponse response) =>
{
    // handle response
});
var imageUpload = new ImageUpload();
imageUpload.imageData = "base64";
var searchPersonRequest = new SearchPersonRequest();
searchPersonRequest.groupIdsForSearch = [];
searchPersonRequest.imageUpload = imageUpload;
searchPersonRequest.detectAll = true;

FaceSDK.searchPerson(searchPersonRequest, (response) => {

}, _ => { });
var imageUpload = new ImageUpload();
imageUpload.imageData = "base64";
var searchPersonRequest = new SearchPersonRequest();
searchPersonRequest.groupIdsForSearch = [];
searchPersonRequest.imageUpload = imageUpload;
searchPersonRequest.detectAll = true;

FaceSDK.searchPerson(searchPersonRequest, function (response) {

}, function (e) { });
var imageUpload = new ImageUpload();
imageUpload.imageData = "base64";
var searchPersonRequest = new SearchPersonRequest();
searchPersonRequest.groupIdsForSearch = [];
searchPersonRequest.imageUpload = imageUpload;
searchPersonRequest.detectAll = true;

FaceSDK.searchPerson(searchPersonRequest).then((response) => {

});

Tag

The detailed tag description is available at Online License Transactions

To set up a tag, invoke:

let imageUpload = PersonDatabase.ImageUpload(imageData: yourImageData)
let searchRequest = PersonDatabase.SearchPersonRequest(imageUpload: imageUpload)
searchRequest.groupIdsForSearch = groupIds
searchRequest.detectAll = true
searchRequest.tag = UUID().uuidString

FaceSDK.service.personDatabase.searchPerson(searchRequest: searchRequest) { response in
// handle response
}
RFSImageUpload *imageUpload = [[RFSImageUpload alloc] initWithImageData:yourImageData];
RFSSearchPersonRequest *searchRequest = [[RFSSearchPersonRequest alloc] initWithImageUpload:imageUpload];
searchRequest.groupIdsForSearch = groupIds;
searchRequest.detectAll = YES;
searchRequest.tag = [[NSUUID UUID] UUIDString];

[RFSFaceSDK.service.personDatabase searchPerson:searchRequest completion:^(RFSSearchPersonResponse * _Nonnull response) {
// handle response
}];
val searchRequest = SearchPersonRequest()
searchRequest.groupIdsForSearch = groupIds
searchRequest.isDetectAll = true
searchRequest.tag = UUID.randomUUID().toString()
FaceSDK.Instance().personDatabase(context).searchPerson(searchRequest, object : PersonDBCallback<MutableList<SearchPerson?>?> {
    override fun onSuccess(response: MutableList<SearchPerson?>?) {
    }

    override fun onFailure(message: String) {
    }
})
SearchPersonRequest searchRequest = new SearchPersonRequest();
searchRequest.setGroupIdsForSearch(groupIds);
searchRequest.setDetectAll(true);
searchRequest.setTag(UUID.randomUUID().toString());
FaceSDK.Instance().personDatabase(context).searchPerson(searchRequest, new PersonDBCallback<>() {
    @Override
    public void onSuccess(@Nullable @org.jetbrains.annotations.Nullable List<SearchPerson> response) {

    }

    @Override
    public void onFailure(@NonNull String message) {

    }
});
var request = new SearchPersonRequest(
  ImageUpload.withImageData(image),
  tag: tag,
);
var request = new SearchPersonRequest(
    ImageUpload.withImageData(image),
    { tag: tag }
);
// Android
var searchRequest = new SearchPersonRequest();
searchRequest.Tag = tag;

// iOS
var searchRequest = new RFSSearchPersonRequest(new RFSImageUpload(image));
searchRequest.Tag = tag;

Endpoints

The in-detail information is available in the Face SDK OpenAPI specification: