using namespace Mediavision::MachineLearning::Exception;
FaceRecognition::FaceRecognition() :
- _initialized(), _internal(), _backbone(), _face_net_info(), _training_model(), _label_manager()
+ _initialized(true), _prepared(false), _internal(), _backbone(), _face_net_info(), _training_model(), _label_manager()
{
+
}
FaceRecognition::~FaceRecognition()
int FaceRecognition::Prepare()
{
- if (_initialized) {
- LOGW("Already initialized.");
+ if (!_initialized) {
+ LOGE("Initialization not ready yet.");
return MEDIA_VISION_ERROR_INVALID_OPERATION;
}
try {
+ // Prepare can be called several times after initialization is done so previous data should be dropped.
+ _face_net_info.reset();
+ _training_model.reset();
+ _label_manager.reset();
+ _backbone.reset();
+ _internal.reset();
+
_face_net_info = make_unique<FaceNetInfo>(_config.backbone_model_file_path);
_training_model = make_unique<SimpleShot>(_config.training_engine_backend_type, _config.internal_model_file_path);
_label_manager = make_unique<LabelManager>(_config.label_file_path, _config.decision_threshold);
return e.getError();
}
- _initialized = true;
+ _prepared = true;
return MEDIA_VISION_ERROR_NONE;
}
int FaceRecognition::RegisterNewFace(vector<float>& vec, string label_name)
{
- if (!_initialized) {
- LOGE("Initialization not ready yet.");
+ if (!_prepared) {
+ LOGE("Preparation not ready yet.");
return MEDIA_VISION_ERROR_INVALID_OPERATION;
}
int FaceRecognition::RecognizeFace(vector<float>& vec, vector<float>& out_vec, unsigned int *out_idx)
{
- if (!_initialized) {
- LOGE("Initialization not ready yet.");
+ if (!_prepared) {
+ LOGE("Preparation not ready yet.");
return MEDIA_VISION_ERROR_INVALID_OPERATION;
}
};
unsigned int label_idx = 0;
+ mv_face_recognition_h handle;
- for (auto& label : labels) {
- mv_face_recognition_h handle;
-
- int ret = mv_face_recognition_create(&handle);
- ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE);
+ int ret = mv_face_recognition_create(&handle);
+ ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE);
+ for (auto& label : labels) {
ret = mv_face_recognition_prepare(handle);
ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE);
const string image_path = string("/usr/share/capi-media-vision/face-recognition/images/test/") + image.first;
mv_source_h mv_source = NULL;
- int ret = mv_create_source(&mv_source);
+ ret = mv_create_source(&mv_source);
ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE);
ret = ImageHelper::loadImageToSource(image_path.c_str(), mv_source);
ASSERT_EQ(answer[image_idx++], string(result.label));
}
-
- ret = mv_face_recognition_destroy(handle);
- ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE);
}
+
+ ret = mv_face_recognition_destroy(handle);
+ ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE);
}
int main(int argc, char **argv)