enum class RequestMode { REGISTER, INFERENCE, DELETE };
}
-struct FaceRecognitionRegisterInput {
- std::vector<float> data;
- std::string label;
-};
-
struct FaceRecognitionInput {
face_recognition::RequestMode mode;
- std::vector<FaceRecognitionRegisterInput> register_src;
std::vector<std::vector<float> > inputs;
std::vector<std::string> labels;
};
template<typename T, typename V> void FaceRecognitionAdapter<T, V>::perform()
{
if (_source.mode == RequestMode::REGISTER) {
- for (auto &s : _source.register_src) {
- int ret = _face_recognition->registerNewFace(s.data, s.label);
+ if (_source.inputs.size() != _source.labels.size())
+ throw InvalidParameter("The number of inputs and labels are not matched.");
+
+ for (size_t idx = 0; idx < _source.inputs.size(); ++idx) {
+ int ret = _face_recognition->registerNewFace(_source.inputs[idx], _source.labels[idx]);
if (ret != MEDIA_VISION_ERROR_NONE)
throw InvalidOperation("Fail to register new face.");
}
FacenetOutput &facenet_output = facenet_task->getOutput();
FaceRecognitionInput face_recognition_input = { .mode = RequestMode::REGISTER };
- FaceRecognitionRegisterInput facenet_to_face_reg_input = { facenet_output.outputs[0], string(label) };
- face_recognition_input.register_src.clear();
- face_recognition_input.register_src.push_back(facenet_to_face_reg_input);
+ face_recognition_input.inputs.push_back(facenet_output.outputs[0]);
+ face_recognition_input.labels.push_back(label);
+
face_recognition_task->setInput(face_recognition_input);
face_recognition_task->perform();
} catch (const BaseException &e) {
FaceRecognitionInput input = { RequestMode::DELETE };
input.labels.clear();
- input.labels.push_back(string(label));
+ input.labels.push_back(label);
face_recognition_task->setInput(input);
face_recognition_task->perform();
} catch (const BaseException &e) {