#include "machine_learning_exception.h"
#include "face_recognition_adapter.h"
#include "facenet_adapter.h"
+#include "MachineLearningNative.h"
#include "mv_face_recognition.h"
#include "mv_face_recognition_internal.h"
MEDIA_VISION_FUNCTION_ENTER();
- Context *context = nullptr;
- ITask *face_recognition_task = nullptr;
- ITask *facenet_task = nullptr;
+ mv_face_recognition_h ctx = nullptr;
try {
- context = new Context();
- face_recognition_task = new FaceRecognitionAdapter();
- facenet_task = new FacenetAdapter();
- context->__tasks.insert(make_pair("face_recognition", face_recognition_task));
- context->__tasks.insert(make_pair("facenet", facenet_task));
-
- *out_handle = static_cast<mv_face_recognition_h>(context);
-
- LOGD("face recognition handle [%p] has been created", *out_handle);
+ ctx = machine_learning_native_create();
+ machine_learning_native_add(ctx, "face_recognition", new FaceRecognitionAdapter());
+ machine_learning_native_add(ctx, "facenet", new FacenetAdapter());
} catch (const BaseException &e) {
- delete face_recognition_task;
- delete facenet_task;
- delete context;
return e.getError();
}
+ *out_handle = ctx;
+ LOGD("face recognition handle [%p] has been created", *out_handle);
+
MEDIA_VISION_FUNCTION_LEAVE();
return MEDIA_VISION_ERROR_NONE;
MEDIA_VISION_FUNCTION_ENTER();
- Context *context = static_cast<Context *>(handle);
- map<string, ITask *>::iterator iter;
-
- for (iter = context->__tasks.begin(); iter != context->__tasks.end(); ++iter) {
- if (iter->first.compare("face_recognition") == 0)
- delete iter->second;
-
- if (iter->first.compare("facenet") == 0)
- delete iter->second;
+ try {
+ machine_learning_native_destory(handle);
+ } catch (const BaseException &e) {
+ return e.getError();
}
- delete context;
-
LOGD("Face recognition handle has been destroyed");
MEDIA_VISION_FUNCTION_LEAVE();
MEDIA_VISION_FUNCTION_ENTER();
try {
- Context *context = static_cast<Context *>(handle);
- auto face_recognition_task = context->__tasks["face_recognition"];
- auto facenet_task = context->__tasks["facenet"];
-
- face_recognition_task->configure();
- facenet_task->configure();
- face_recognition_task->prepare();
- facenet_task->prepare();
+ machine_learning_native_configure(handle, "face_recognition");
+ machine_learning_native_configure(handle, "facenet");
+
+ machine_learning_native_prepare(handle, "face_recognition");
+ machine_learning_native_prepare(handle, "facenet");
} catch (const BaseException &e) {
LOGE("%s", e.what());
return e.getError();
MEDIA_VISION_FUNCTION_ENTER();
try {
- Context *context = static_cast<Context *>(handle);
- auto face_recognition_task = context->__tasks["face_recognition"];
- auto facenet_task = context->__tasks["facenet"];
FacenetInput facenet_input(source);
- facenet_task->perform(facenet_input);
+ machine_learning_native_inference(handle, "facenet", facenet_input);
- auto &facenet_output = static_cast<FacenetOutput &>(facenet_task->getOutput());
+ auto &facenet_output = static_cast<FacenetOutput &>(machine_learning_native_get_result(handle, "facenet"));
FaceRecognitionInput face_recognition_input;
face_recognition_input.mode = RequestMode::REGISTER;
-
face_recognition_input.inputs.push_back(facenet_output.outputs[0]);
face_recognition_input.labels.push_back(label);
-
- face_recognition_task->perform(face_recognition_input);
+ machine_learning_native_inference(handle, "face_recognition", face_recognition_input);
} catch (const BaseException &e) {
LOGE("%s", e.what());
return e.getError();
MEDIA_VISION_FUNCTION_ENTER();
try {
- Context *context = static_cast<Context *>(handle);
- auto face_recognition_task = context->__tasks["face_recognition"];
FaceRecognitionInput input;
input.mode = RequestMode::DELETE;
-
input.labels.clear();
input.labels.push_back(label);
- face_recognition_task->perform(input);
+ machine_learning_native_inference(handle, "face_recognition", input);
} catch (const BaseException &e) {
LOGE("%s", e.what());
return e.getError();
MEDIA_VISION_FUNCTION_ENTER();
try {
- Context *context = static_cast<Context *>(handle);
- auto face_recognition_task = context->__tasks["face_recognition"];
- auto facenet_task = context->__tasks["facenet"];
FacenetInput facenet_input(source);
- facenet_task->perform(facenet_input);
+ machine_learning_native_inference(handle, "facenet", facenet_input);
- auto &facenet_output = static_cast<FacenetOutput &>(facenet_task->getOutput());
+ auto &facenet_output = static_cast<FacenetOutput &>(machine_learning_native_get_result(handle, "facenet"));
FaceRecognitionInput face_recognition_input;
face_recognition_input.mode = RequestMode::INFERENCE;
-
face_recognition_input.inputs = facenet_output.outputs;
- face_recognition_task->perform(face_recognition_input);
+ machine_learning_native_inference(handle, "face_recognition", face_recognition_input);
} catch (const BaseException &e) {
LOGE("%s", e.what());
return e.getError();
MEDIA_VISION_FUNCTION_ENTER();
try {
- Context *context = static_cast<Context *>(handle);
- auto face_recognition_task = context->__tasks["face_recognition"];
- auto &result = static_cast<FaceRecognitionResult &>(face_recognition_task->getOutput());
+ auto &result =
+ static_cast<FaceRecognitionResult &>(machine_learning_native_get_result(handle, "face_recognition"));
*out_label = result.label.c_str();
} catch (const BaseException &e) {
MEDIA_VISION_FUNCTION_ENTER();
try {
- auto context = static_cast<Context *>(handle);
- auto face_recognition_task = context->__tasks["face_recognition"];
- auto &result = static_cast<FaceRecognitionResult &>(face_recognition_task->getOutput());
+ auto &result =
+ static_cast<FaceRecognitionResult &>(machine_learning_native_get_result(handle, "face_recognition"));
*confidences = result.raw_data.data();
*num_of_confidences = result.raw_data.size();
MEDIA_VISION_FUNCTION_ENTER();
try {
- auto context = static_cast<Context *>(handle);
- auto face_recognition_task = context->__tasks["face_recognition"];
- auto &result = static_cast<FaceRecognitionResult &>(face_recognition_task->getOutput());
+ auto &result =
+ static_cast<FaceRecognitionResult &>(machine_learning_native_get_result(handle, "face_recognition"));
if (static_cast<size_t>(index) >= result.labels.size())
throw InvalidParameter("A given index is out of boundary.");