diff options
author | Inki Dae <inki.dae@samsung.com> | 2022-08-08 15:43:57 +0900 |
---|---|---|
committer | Inki Dae <inki.dae@samsung.com> | 2022-08-08 15:48:19 +0900 |
commit | 6f71bf9d67470aac07c94579b284b818d301fa25 (patch) | |
tree | 69af825e1c181025e455188729f37f5d5e52399f | |
parent | 46dca26638fb3bac0e098b3e3dbb92f49a99aea7 (diff) | |
download | mediavision-6f71bf9d67470aac07c94579b284b818d301fa25.tar.gz mediavision-6f71bf9d67470aac07c94579b284b818d301fa25.tar.bz2 mediavision-6f71bf9d67470aac07c94579b284b818d301fa25.zip |
mv_machine_learning: bug fix to recognition requestsubmit/tizen/20220808.075156accepted/tizen/unified/20220809.213751
[Versin] : 0.23.11
[Issue type] : bug fix
Fixed a bug that it didn't handle an error case correctly
at recognition request without label file.
Without label file, recognition request incurred seg. fault issue so
this patch handles the error case correctly.
In addition, this patch adds a test case which tests a recognition request
without label file.
Change-Id: I9e577e4fe8e13f3865bfc2db4a60244626d31467
Signed-off-by: Inki Dae <inki.dae@samsung.com>
4 files changed, 59 insertions, 1 deletions
diff --git a/mv_machine_learning/face_recognition/src/face_recognition.cpp b/mv_machine_learning/face_recognition/src/face_recognition.cpp index 4731d9f7..66473cc2 100644 --- a/mv_machine_learning/face_recognition/src/face_recognition.cpp +++ b/mv_machine_learning/face_recognition/src/face_recognition.cpp @@ -619,6 +619,9 @@ int FaceRecognition::GetLabel(const char **out_label) mv_face_recognition_result_s& FaceRecognition::GetResult() { + if (!_label_manager) + throw NoData("Label file doesn't exist."); + try { _label_manager->GetLabelString(_result.label, _result.label_idx); } catch (const BaseException& e) { diff --git a/mv_machine_learning/face_recognition/src/face_recognition_adapter.cpp b/mv_machine_learning/face_recognition/src/face_recognition_adapter.cpp index da8aeec9..dba1829b 100644 --- a/mv_machine_learning/face_recognition/src/face_recognition_adapter.cpp +++ b/mv_machine_learning/face_recognition/src/face_recognition_adapter.cpp @@ -118,6 +118,9 @@ void FaceRecognitionAdapter<T, V>::perform() if (ret == MEDIA_VISION_ERROR_NO_DATA) throw NoData("Label not found."); + if (ret != MEDIA_VISION_ERROR_NONE) + throw InvalidOperation("Fail to request a recognition."); + return; } diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index e43f4c85..dbb8634d 100644 --- a/packaging/capi-media-vision.spec +++ b/packaging/capi-media-vision.spec @@ -1,6 +1,6 @@ Name: capi-media-vision Summary: Media Vision library for Tizen Native API -Version: 0.23.10 +Version: 0.23.11 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause diff --git a/test/testsuites/machine_learning/face_recognition/test_face_recognition.cpp b/test/testsuites/machine_learning/face_recognition/test_face_recognition.cpp index c24258e0..37e2c454 100644 --- a/test/testsuites/machine_learning/face_recognition/test_face_recognition.cpp +++ b/test/testsuites/machine_learning/face_recognition/test_face_recognition.cpp @@ -25,6 +25,9 @@ #define TRAINING_IMAGE_PATH "/home/owner/media/res/face_recognition/res/test/training/" #define TEST_IMAGE_PATH "/home/owner/media/res/face_recognition/res/test/test/" +#define LABEL_FILE_PATH "/home/owner/media/res/face_recognition/training/labels.dat" +#define MODEL_FILE_PATH "/home/owner/media/res/face_recognition/training/model_and_weights.ini" +#define FV_FILE_PATH "/home/owner/media/res/face_recognition/training/feature_vector_file.dat" using namespace testing; using namespace std; @@ -67,6 +70,13 @@ static const map<string, string> test_images = { using namespace MediaVision::Common; +static void RemoveModelResources(void) +{ + remove(LABEL_FILE_PATH); + remove(MODEL_FILE_PATH); + remove(FV_FILE_PATH); +} + TEST(FaceRecognitionTest, FaceRecognitionSimpleTest) { mv_face_recognition_h handle; @@ -145,6 +155,44 @@ TEST(FaceRecognitionTest, FaceRecognitionClassShouldBeOk) ret = mv_face_recognition_destroy(handle); ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE); + + RemoveModelResources(); +} + +TEST(FaceRecognitionTest, NoLabelShouldBeOk) +{ + mv_face_recognition_h handle; + + int ret = mv_face_recognition_create(&handle); + ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE); + + ret = mv_face_recognition_prepare(handle); + ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE); + + for (auto& image : test_images) { + const string image_path = string(TEST_IMAGE_PATH) + image.first; + mv_source_h mv_source = NULL; + + int ret = mv_create_source(&mv_source); + ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE); + + ret = ImageHelper::loadImageToSource(image_path.c_str(), mv_source); + ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE); + + ret = mv_face_recognition_inference(handle, mv_source); + ASSERT_NE(ret, MEDIA_VISION_ERROR_NONE); + + ret = mv_destroy_source(mv_source); + ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE); + + const char *out_label = NULL; + + ret = mv_face_recognition_get_label(handle, &out_label); + ASSERT_NE(ret, MEDIA_VISION_ERROR_NONE); + } + + ret = mv_face_recognition_destroy(handle); + ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE); } TEST(FaceRecognitionTest, FaceRecognitionClassWithEachLabelRemovalShouldBeOk) @@ -241,6 +289,8 @@ TEST(FaceRecognitionTest, FaceRecognitionClassWithEachLabelRemovalShouldBeOk) ret = mv_face_recognition_destroy(handle); ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE); + + RemoveModelResources(); } TEST(FaceRecognitionTest, RemoveAllLabelsShouldBeOk) @@ -277,6 +327,8 @@ TEST(FaceRecognitionTest, RemoveAllLabelsShouldBeOk) ret = mv_face_recognition_destroy(handle); ASSERT_EQ(ret, MEDIA_VISION_ERROR_NONE); + + RemoveModelResources(); } int main(int argc, char **argv) |