From 1cae83e2c74cefc4e5fe1cb2bd88ad984e67c39a Mon Sep 17 00:00:00 2001 From: Inki Dae Date: Tue, 28 Dec 2021 19:31:33 +0900 Subject: [PATCH 01/16] test/machine_learning: add snpe model support [Version] : 0.10.0-0 [Issue type] : new feature Added a test case for SNPE engnie with dlc model. Change-Id: I7d20f9974300130ddeaf4e8eb77482d89dee0b9d Signed-off-by: Inki Dae --- packaging/capi-media-vision.spec | 2 +- .../inference/test_face_detection.cpp | 2 +- .../inference/test_image_classification.cpp | 41 ++++++++++++++++++++++ .../inference/test_inference_helper.cpp | 28 +++++++++++++-- .../inference/test_inference_helper.hpp | 7 +++- .../inference/test_pose_landmark_detection.cpp | 2 +- 6 files changed, 75 insertions(+), 7 deletions(-) diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 1af9b65..00147d8 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.9.0 +Version: 0.10.0 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause diff --git a/test/testsuites/machine_learning/inference/test_face_detection.cpp b/test/testsuites/machine_learning/inference/test_face_detection.cpp index 376a717..59a357f 100644 --- a/test/testsuites/machine_learning/inference/test_face_detection.cpp +++ b/test/testsuites/machine_learning/inference/test_face_detection.cpp @@ -40,7 +40,7 @@ public: TEST_P(TestFaceDetection, CPU_TFLITE_MobilenetV1_SSD) { - engine_config_hosted_cpu_tflite(engine_cfg, + engine_config_hosted_model_config(engine_cfg, FD_TFLITE_WEIGHT_MOBILENET_V1_SSD_300_PATH, _use_json_parser); if (!_use_json_parser) { const char *inputNodeName = "normalized_input_image_tensor"; diff --git a/test/testsuites/machine_learning/inference/test_image_classification.cpp b/test/testsuites/machine_learning/inference/test_image_classification.cpp index cdda3f6..103f6df 100644 --- a/test/testsuites/machine_learning/inference/test_image_classification.cpp +++ b/test/testsuites/machine_learning/inference/test_image_classification.cpp @@ -31,6 +31,13 @@ MV_CONFIG_PATH \ "/models/IC/tflite/quant_mobilenet_v1_224x224.tflite" +#define IC_LABEL_INCEPTION_V3_299_PATH \ + MV_CONFIG_PATH \ + "/models/IC_Q/snpe/imagenet_slim_labels.txt" +#define IC_SNPE_WEIGHT_QUANT_INCEPTION_V3_299_PATH \ + MV_CONFIG_PATH \ + "/models/IC_Q/snpe/inception_v3_quantized.dlc" + void _image_classified_cb(mv_source_h source, const int number_of_classes, const int *indices, const char **names, const float *confidences, void *user_data) @@ -286,6 +293,40 @@ TEST_P(TestImageClassification, CPU_TFLITE_QUANT_MobilenetV1) inferenceBanana(); } +TEST_P(TestImageClassification, SNPE_InceptionV3_Quantized) +{ + engine_config_hosted_cpu_snpe_user_model( + engine_cfg, IC_SNPE_WEIGHT_QUANT_INCEPTION_V3_299_PATH, + IC_LABEL_INCEPTION_V3_299_PATH, + _use_json_parser); + + if (!_use_json_parser) { + const char *inputNodeName = "input"; + const char *outputNodeName[] = { "output" }; + + ASSERT_EQ(mv_engine_config_set_int_attribute(engine_cfg, MV_INFERENCE_INPUT_DATA_TYPE, MV_INFERENCE_DATA_UINT8), + MEDIA_VISION_ERROR_NONE); + ASSERT_EQ(mv_engine_config_set_double_attribute(engine_cfg, MV_INFERENCE_MODEL_MEAN_VALUE, 127.5), + MEDIA_VISION_ERROR_NONE); + ASSERT_EQ(mv_engine_config_set_double_attribute(engine_cfg, MV_INFERENCE_MODEL_STD_VALUE, 127.5), + MEDIA_VISION_ERROR_NONE); + ASSERT_EQ(mv_engine_config_set_double_attribute(engine_cfg, MV_INFERENCE_CONFIDENCE_THRESHOLD, 0.0), + MEDIA_VISION_ERROR_NONE); + ASSERT_EQ(mv_engine_config_set_int_attribute(engine_cfg, MV_INFERENCE_INPUT_TENSOR_WIDTH, 299), + MEDIA_VISION_ERROR_NONE); + ASSERT_EQ(mv_engine_config_set_int_attribute(engine_cfg, MV_INFERENCE_INPUT_TENSOR_HEIGHT, 299), + MEDIA_VISION_ERROR_NONE); + ASSERT_EQ(mv_engine_config_set_int_attribute(engine_cfg, MV_INFERENCE_INPUT_TENSOR_CHANNELS, 3), + MEDIA_VISION_ERROR_NONE); + ASSERT_EQ(mv_engine_config_set_string_attribute(engine_cfg, MV_INFERENCE_INPUT_NODE_NAME, + inputNodeName), MEDIA_VISION_ERROR_NONE); + ASSERT_EQ(mv_engine_config_set_array_string_attribute(engine_cfg, MV_INFERENCE_OUTPUT_NODE_NAMES, + outputNodeName, 1), MEDIA_VISION_ERROR_NONE); + } + + inferenceBanana(); +} + INSTANTIATE_TEST_CASE_P(Prefix, TestImageClassification, ::testing::Values( ParamTypeOne(false), diff --git a/test/testsuites/machine_learning/inference/test_inference_helper.cpp b/test/testsuites/machine_learning/inference/test_inference_helper.cpp index 81a0380..9d5c95b 100644 --- a/test/testsuites/machine_learning/inference/test_inference_helper.cpp +++ b/test/testsuites/machine_learning/inference/test_inference_helper.cpp @@ -15,7 +15,7 @@ TestInference::~TestInference() EXPECT_EQ(mv_destroy_engine_config(engine_cfg), MEDIA_VISION_ERROR_NONE); } -void engine_config_hosted_cpu_tflite(mv_engine_config_h handle, +void engine_config_hosted_model_config(mv_engine_config_h handle, const char *tf_weight, const bool use_json_parser) { @@ -32,6 +32,14 @@ void engine_config_hosted_cpu_tflite(mv_engine_config_h handle, handle, MV_INFERENCE_MODEL_META_FILE_PATH , meta_file_path.c_str()), MEDIA_VISION_ERROR_NONE); } +} + +void engine_config_hosted_cpu_tflite_user_model(mv_engine_config_h handle, + const char *tf_weight, + const char *user_file, + const bool use_json_parser) +{ + engine_config_hosted_model_config(handle, tf_weight, use_json_parser); EXPECT_EQ(mv_engine_config_set_int_attribute(handle, MV_INFERENCE_BACKEND_TYPE, @@ -41,14 +49,28 @@ void engine_config_hosted_cpu_tflite(mv_engine_config_h handle, MV_INFERENCE_TARGET_TYPE, MV_INFERENCE_TARGET_CPU), MEDIA_VISION_ERROR_NONE); + + EXPECT_EQ(mv_engine_config_set_string_attribute( + handle, MV_INFERENCE_MODEL_USER_FILE_PATH, user_file), + MEDIA_VISION_ERROR_NONE); } -void engine_config_hosted_cpu_tflite_user_model(mv_engine_config_h handle, +void engine_config_hosted_cpu_snpe_user_model(mv_engine_config_h handle, const char *tf_weight, const char *user_file, const bool use_json_parser) { - engine_config_hosted_cpu_tflite(handle, tf_weight, use_json_parser); + engine_config_hosted_model_config(handle, tf_weight, use_json_parser); + + EXPECT_EQ(mv_engine_config_set_int_attribute(handle, + MV_INFERENCE_BACKEND_TYPE, + MV_INFERENCE_BACKEND_SNPE), + MEDIA_VISION_ERROR_NONE); + EXPECT_EQ(mv_engine_config_set_int_attribute(handle, + MV_INFERENCE_TARGET_TYPE, + MV_INFERENCE_TARGET_CPU), + MEDIA_VISION_ERROR_NONE); + EXPECT_EQ(mv_engine_config_set_string_attribute( handle, MV_INFERENCE_MODEL_USER_FILE_PATH, user_file), MEDIA_VISION_ERROR_NONE); diff --git a/test/testsuites/machine_learning/inference/test_inference_helper.hpp b/test/testsuites/machine_learning/inference/test_inference_helper.hpp index a04fb00..3023d81 100644 --- a/test/testsuites/machine_learning/inference/test_inference_helper.hpp +++ b/test/testsuites/machine_learning/inference/test_inference_helper.hpp @@ -23,7 +23,7 @@ public: mv_source_h mv_source; }; -void engine_config_hosted_cpu_tflite(mv_engine_config_h handle, +void engine_config_hosted_model_config(mv_engine_config_h handle, const char *tf_weight, const bool use_json_parser); @@ -32,4 +32,9 @@ void engine_config_hosted_cpu_tflite_user_model(mv_engine_config_h handle, const char *user_file, const bool use_json_parser); +void engine_config_hosted_cpu_snpe_user_model(mv_engine_config_h handle, + const char *tf_weight, + const char *user_file, + const bool use_json_parser); + #endif //__TEST_INFERENCE_HELPER_HPP__ diff --git a/test/testsuites/machine_learning/inference/test_pose_landmark_detection.cpp b/test/testsuites/machine_learning/inference/test_pose_landmark_detection.cpp index 58c4b43..623903a 100644 --- a/test/testsuites/machine_learning/inference/test_pose_landmark_detection.cpp +++ b/test/testsuites/machine_learning/inference/test_pose_landmark_detection.cpp @@ -39,7 +39,7 @@ public: TEST_P(TestPoseLandmarkDetection, CPU_TFLITE_MobilenetV1) { - engine_config_hosted_cpu_tflite( + engine_config_hosted_model_config( engine_cfg, PLD_TFLITE_WEIGHT_MOBILENET_V1_POSENET_257_PATH, _use_json_parser); if (!_use_json_parser) { -- 2.7.4 From a32be06de5a36e685309e056c556fd9b135a8786 Mon Sep 17 00:00:00 2001 From: Inki Dae Date: Fri, 31 Dec 2021 10:50:53 +0900 Subject: [PATCH 02/16] mv_maching_learning: deprecate MLAPI and MAX types [Version] : 0.11.0-0 [Issue type] : cleanup Deprecated MV_INFERENCE_BACKEND_MLAPI and MV_INFERENCE_BACKEND_MAX types. MV_INFERENCE_BACKEND_MLAPI is not backend type but other API framework, and another may break the binary compatibility when adding a new enumeration value because MAX value is different from one of the binary So drop these two types. Change-Id: I391cd0d4b713e3d35fe263f1567f4cea3df60630 Signed-off-by: Inki Dae --- include/mv_inference_type.h | 6 +++--- .../mv_inference/inference/src/mv_inference_open.cpp | 2 ++ packaging/capi-media-vision.spec | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/mv_inference_type.h b/include/mv_inference_type.h index 5a6572d..1794b83 100644 --- a/include/mv_inference_type.h +++ b/include/mv_inference_type.h @@ -48,7 +48,7 @@ extern "C" { * run efficiently without modification on Embedded hardware. * (https://developer.arm.com/ip-products/processors/machine-learning/arm-nn) * #MV_INFERENCE_BACKEND_MLAPI Samsung-introduced open source ML single API framework of NNStreamer, which - * runs various NN models via tensor filters of NNStreamer. + * runs various NN models via tensor filters of NNStreamer. (Deprecated since 7.0) * (https://github.com/nnstreamer/nnstreamer) * #MV_INFERENCE_BACKEND_ONE Samsung-introduced open source inference engine called On-device Neural Engine, which * performs inference of a given NN model on various devices such as CPU, GPU, DSP and NPU. @@ -63,11 +63,11 @@ typedef enum { MV_INFERENCE_BACKEND_OPENCV, /**< OpenCV */ MV_INFERENCE_BACKEND_TFLITE, /**< TensorFlow-Lite */ MV_INFERENCE_BACKEND_ARMNN, /**< ARMNN (Since 6.0) */ - MV_INFERENCE_BACKEND_MLAPI, /**< ML Single API of NNStreamer (Since 6.0) */ + MV_INFERENCE_BACKEND_MLAPI, /**< @deprecated ML Single API of NNStreamer (Deprecated since 7.0) */ MV_INFERENCE_BACKEND_ONE, /**< On-device Neural Engine (Since 6.0) */ MV_INFERENCE_BACKEND_NNTRAINER, /**< NNTrainer (Since 7.0) */ MV_INFERENCE_BACKEND_SNPE, /**< SNPE Engine (Since 7.0) */ - MV_INFERENCE_BACKEND_MAX /**< Backend MAX */ + MV_INFERENCE_BACKEND_MAX /**< @deprecated Backend MAX (Deprecated since 7.0) */ } mv_inference_backend_type_e; /** diff --git a/mv_machine_learning/mv_inference/inference/src/mv_inference_open.cpp b/mv_machine_learning/mv_inference/inference/src/mv_inference_open.cpp index a9fd490..5faa3ad 100644 --- a/mv_machine_learning/mv_inference/inference/src/mv_inference_open.cpp +++ b/mv_machine_learning/mv_inference/inference/src/mv_inference_open.cpp @@ -125,6 +125,8 @@ static bool IsValidBackendType(const int backend_type) static bool IsConfigFilePathRequired(const int target_device_type, const int backend_type) { + LOGW("DEPRECATION WARNING : MV_INFERENCE_BACKEND_MLAPI type is deprecated and will be removed from next release."); + // In case of MV_INFERENCE_TARGET_DEVICE_CUSTOM via MLAPI backend, config file path is required. return (backend_type == MV_INFERENCE_BACKEND_MLAPI && target_device_type & MV_INFERENCE_TARGET_DEVICE_CUSTOM); diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 00147d8..50fcffc 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.10.0 +Version: 0.11.0 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause -- 2.7.4 From 5f741065916c718fd6a4b30f5532552cf6ef5d44 Mon Sep 17 00:00:00 2001 From: Tae-Young Chung Date: Mon, 20 Dec 2021 18:01:24 +0900 Subject: [PATCH 03/16] inference: support movenet [Version] 0.12.0 [Issue type] new feature Movenet models with variants, Lightning3/4 and Thunder3/4, are supported. Models can be downloaded from tfhub.dev and meta files for the models are added as examples. In addition, testsuite with those Movenet models are updated. Change-Id: I1c526cba688842e408fad1c84ba7dff4d0320e80 Signed-off-by: Tae-Young Chung --- meta-template/pld_movenet_lightning3_192x192.json | 46 ++++++++++++ .../pld_movenet_lightning3_192x192_int8_quant.json | 46 ++++++++++++ meta-template/pld_movenet_lightning4_192x192.json | 46 ++++++++++++ .../pld_movenet_lightning4_192x192_int8_quant.json | 46 ++++++++++++ meta-template/pld_movenet_thunder3_256x256.json | 46 ++++++++++++ .../pld_movenet_thunder3_256x256_int8_quant.json | 46 ++++++++++++ meta-template/pld_movenet_thunder4_256x256.json | 46 ++++++++++++ .../pld_movenet_thunder4_256x256_int8_quant.json | 46 ++++++++++++ .../mv_inference/inference/include/Landmark.h | 1 + .../inference/include/OutputMetadataTypes.h | 1 + .../mv_inference/inference/src/Inference.cpp | 7 +- .../mv_inference/inference/src/OutputMetadata.cpp | 3 +- .../mv_inference/inference/src/PoseDecoder.cpp | 24 ++++++- packaging/capi-media-vision.spec | 2 +- .../inference/inference_test_suite.c | 84 ++++++++++++++++++++++ 15 files changed, 484 insertions(+), 6 deletions(-) create mode 100644 meta-template/pld_movenet_lightning3_192x192.json create mode 100644 meta-template/pld_movenet_lightning3_192x192_int8_quant.json create mode 100644 meta-template/pld_movenet_lightning4_192x192.json create mode 100644 meta-template/pld_movenet_lightning4_192x192_int8_quant.json create mode 100644 meta-template/pld_movenet_thunder3_256x256.json create mode 100644 meta-template/pld_movenet_thunder3_256x256_int8_quant.json create mode 100644 meta-template/pld_movenet_thunder4_256x256.json create mode 100644 meta-template/pld_movenet_thunder4_256x256_int8_quant.json diff --git a/meta-template/pld_movenet_lightning3_192x192.json b/meta-template/pld_movenet_lightning3_192x192.json new file mode 100644 index 0000000..f40c6ff --- /dev/null +++ b/meta-template/pld_movenet_lightning3_192x192.json @@ -0,0 +1,46 @@ +{ + "inputmetadata" : + { + "tensor_info" : [ + { + "name" : "input:0", + "shape_type" : "NHWC", + "shape_dims" : [ 1, 192, 192, 3], + "data_type" : "FLOAT32", + "color_space" : "RGB888" + } + ], + "preprocess" : [ + { + "normalization" : [ + { + "mean" : [0.0, 0.0, 0.0], + "std" : [1.0, 1.0, 1.0] + } + ] + } + ] + }, + "outputmetadata" : + { + "score" : [ + { + "name" : "Identity:0", + "index" : [-1, -1, -1, 1], + "top_number" : 1, + "threshold" : 0.5, + "score_type" : "NORMAL" + } + ], + "landmark" : [ + { + "name" : "Identity:0", + "index" : [-1, -1, 1, -1], + "landmark_type" : "2D_SINGLE", + "landmark_coordinate" : "RATIO", + "decoding_type" : "BYPASS_MULTICHANNEL", + "landmark_offset" : 3 + } + ] + } +} diff --git a/meta-template/pld_movenet_lightning3_192x192_int8_quant.json b/meta-template/pld_movenet_lightning3_192x192_int8_quant.json new file mode 100644 index 0000000..f40c6ff --- /dev/null +++ b/meta-template/pld_movenet_lightning3_192x192_int8_quant.json @@ -0,0 +1,46 @@ +{ + "inputmetadata" : + { + "tensor_info" : [ + { + "name" : "input:0", + "shape_type" : "NHWC", + "shape_dims" : [ 1, 192, 192, 3], + "data_type" : "FLOAT32", + "color_space" : "RGB888" + } + ], + "preprocess" : [ + { + "normalization" : [ + { + "mean" : [0.0, 0.0, 0.0], + "std" : [1.0, 1.0, 1.0] + } + ] + } + ] + }, + "outputmetadata" : + { + "score" : [ + { + "name" : "Identity:0", + "index" : [-1, -1, -1, 1], + "top_number" : 1, + "threshold" : 0.5, + "score_type" : "NORMAL" + } + ], + "landmark" : [ + { + "name" : "Identity:0", + "index" : [-1, -1, 1, -1], + "landmark_type" : "2D_SINGLE", + "landmark_coordinate" : "RATIO", + "decoding_type" : "BYPASS_MULTICHANNEL", + "landmark_offset" : 3 + } + ] + } +} diff --git a/meta-template/pld_movenet_lightning4_192x192.json b/meta-template/pld_movenet_lightning4_192x192.json new file mode 100644 index 0000000..bcbf9d0 --- /dev/null +++ b/meta-template/pld_movenet_lightning4_192x192.json @@ -0,0 +1,46 @@ +{ + "inputmetadata" : + { + "tensor_info" : [ + { + "name" : "serving_default_input_0:0", + "shape_type" : "NHWC", + "shape_dims" : [ 1, 192, 192, 3], + "data_type" : "FLOAT32", + "color_space" : "RGB888" + } + ], + "preprocess" : [ + { + "normalization" : [ + { + "mean" : [0.0, 0.0, 0.0], + "std" : [1.0, 1.0, 1.0] + } + ] + } + ] + }, + "outputmetadata" : + { + "score" : [ + { + "name" : "StatefulPartitionedCall_0:0", + "index" : [-1, -1, -1, 1], + "top_number" : 1, + "threshold" : 0.5, + "score_type" : "NORMAL" + } + ], + "landmark" : [ + { + "name" : "StatefulPartitionedCall_0:0", + "index" : [-1, -1, 1, -1], + "landmark_type" : "2D_SINGLE", + "landmark_coordinate" : "RATIO", + "decoding_type" : "BYPASS_MULTICHANNEL", + "landmark_offset" : 3 + } + ] + } +} diff --git a/meta-template/pld_movenet_lightning4_192x192_int8_quant.json b/meta-template/pld_movenet_lightning4_192x192_int8_quant.json new file mode 100644 index 0000000..bcbf9d0 --- /dev/null +++ b/meta-template/pld_movenet_lightning4_192x192_int8_quant.json @@ -0,0 +1,46 @@ +{ + "inputmetadata" : + { + "tensor_info" : [ + { + "name" : "serving_default_input_0:0", + "shape_type" : "NHWC", + "shape_dims" : [ 1, 192, 192, 3], + "data_type" : "FLOAT32", + "color_space" : "RGB888" + } + ], + "preprocess" : [ + { + "normalization" : [ + { + "mean" : [0.0, 0.0, 0.0], + "std" : [1.0, 1.0, 1.0] + } + ] + } + ] + }, + "outputmetadata" : + { + "score" : [ + { + "name" : "StatefulPartitionedCall_0:0", + "index" : [-1, -1, -1, 1], + "top_number" : 1, + "threshold" : 0.5, + "score_type" : "NORMAL" + } + ], + "landmark" : [ + { + "name" : "StatefulPartitionedCall_0:0", + "index" : [-1, -1, 1, -1], + "landmark_type" : "2D_SINGLE", + "landmark_coordinate" : "RATIO", + "decoding_type" : "BYPASS_MULTICHANNEL", + "landmark_offset" : 3 + } + ] + } +} diff --git a/meta-template/pld_movenet_thunder3_256x256.json b/meta-template/pld_movenet_thunder3_256x256.json new file mode 100644 index 0000000..5d22c4a --- /dev/null +++ b/meta-template/pld_movenet_thunder3_256x256.json @@ -0,0 +1,46 @@ +{ + "inputmetadata" : + { + "tensor_info" : [ + { + "name" : "input:0", + "shape_type" : "NHWC", + "shape_dims" : [ 1, 256, 256, 3], + "data_type" : "FLOAT32", + "color_space" : "RGB888" + } + ], + "preprocess" : [ + { + "normalization" : [ + { + "mean" : [0.0, 0.0, 0.0], + "std" : [1.0, 1.0, 1.0] + } + ] + } + ] + }, + "outputmetadata" : + { + "score" : [ + { + "name" : "Identity:0", + "index" : [-1, -1, -1, 1], + "top_number" : 1, + "threshold" : 0.5, + "score_type" : "NORMAL" + } + ], + "landmark" : [ + { + "name" : "Identity:0", + "index" : [-1, -1, 1, -1], + "landmark_type" : "2D_SINGLE", + "landmark_coordinate" : "RATIO", + "decoding_type" : "BYPASS_MULTICHANNEL", + "landmark_offset" : 3 + } + ] + } +} diff --git a/meta-template/pld_movenet_thunder3_256x256_int8_quant.json b/meta-template/pld_movenet_thunder3_256x256_int8_quant.json new file mode 100644 index 0000000..5d22c4a --- /dev/null +++ b/meta-template/pld_movenet_thunder3_256x256_int8_quant.json @@ -0,0 +1,46 @@ +{ + "inputmetadata" : + { + "tensor_info" : [ + { + "name" : "input:0", + "shape_type" : "NHWC", + "shape_dims" : [ 1, 256, 256, 3], + "data_type" : "FLOAT32", + "color_space" : "RGB888" + } + ], + "preprocess" : [ + { + "normalization" : [ + { + "mean" : [0.0, 0.0, 0.0], + "std" : [1.0, 1.0, 1.0] + } + ] + } + ] + }, + "outputmetadata" : + { + "score" : [ + { + "name" : "Identity:0", + "index" : [-1, -1, -1, 1], + "top_number" : 1, + "threshold" : 0.5, + "score_type" : "NORMAL" + } + ], + "landmark" : [ + { + "name" : "Identity:0", + "index" : [-1, -1, 1, -1], + "landmark_type" : "2D_SINGLE", + "landmark_coordinate" : "RATIO", + "decoding_type" : "BYPASS_MULTICHANNEL", + "landmark_offset" : 3 + } + ] + } +} diff --git a/meta-template/pld_movenet_thunder4_256x256.json b/meta-template/pld_movenet_thunder4_256x256.json new file mode 100644 index 0000000..d28d5c7 --- /dev/null +++ b/meta-template/pld_movenet_thunder4_256x256.json @@ -0,0 +1,46 @@ +{ + "inputmetadata" : + { + "tensor_info" : [ + { + "name" : "serving_default_input:0", + "shape_type" : "NHWC", + "shape_dims" : [ 1, 256, 256, 3], + "data_type" : "FLOAT32", + "color_space" : "RGB888" + } + ], + "preprocess" : [ + { + "normalization" : [ + { + "mean" : [0.0, 0.0, 0.0], + "std" : [1.0, 1.0, 1.0] + } + ] + } + ] + }, + "outputmetadata" : + { + "score" : [ + { + "name" : "StatefulPartitionedCall:0", + "index" : [-1, -1, -1, 1], + "top_number" : 1, + "threshold" : 0.5, + "score_type" : "NORMAL" + } + ], + "landmark" : [ + { + "name" : "StatefulPartitionedCall:0", + "index" : [-1, -1, 1, -1], + "landmark_type" : "2D_SINGLE", + "landmark_coordinate" : "RATIO", + "decoding_type" : "BYPASS_MULTICHANNEL", + "landmark_offset" : 3 + } + ] + } +} diff --git a/meta-template/pld_movenet_thunder4_256x256_int8_quant.json b/meta-template/pld_movenet_thunder4_256x256_int8_quant.json new file mode 100644 index 0000000..d28d5c7 --- /dev/null +++ b/meta-template/pld_movenet_thunder4_256x256_int8_quant.json @@ -0,0 +1,46 @@ +{ + "inputmetadata" : + { + "tensor_info" : [ + { + "name" : "serving_default_input:0", + "shape_type" : "NHWC", + "shape_dims" : [ 1, 256, 256, 3], + "data_type" : "FLOAT32", + "color_space" : "RGB888" + } + ], + "preprocess" : [ + { + "normalization" : [ + { + "mean" : [0.0, 0.0, 0.0], + "std" : [1.0, 1.0, 1.0] + } + ] + } + ] + }, + "outputmetadata" : + { + "score" : [ + { + "name" : "StatefulPartitionedCall:0", + "index" : [-1, -1, -1, 1], + "top_number" : 1, + "threshold" : 0.5, + "score_type" : "NORMAL" + } + ], + "landmark" : [ + { + "name" : "StatefulPartitionedCall:0", + "index" : [-1, -1, 1, -1], + "landmark_type" : "2D_SINGLE", + "landmark_coordinate" : "RATIO", + "decoding_type" : "BYPASS_MULTICHANNEL", + "landmark_offset" : 3 + } + ] + } +} diff --git a/mv_machine_learning/mv_inference/inference/include/Landmark.h b/mv_machine_learning/mv_inference/inference/include/Landmark.h index 26dda7f..4aae027 100644 --- a/mv_machine_learning/mv_inference/inference/include/Landmark.h +++ b/mv_machine_learning/mv_inference/inference/include/Landmark.h @@ -99,6 +99,7 @@ namespace inference supportedLandmarkCoordinateTypes.insert({"PIXEL", INFERENCE_LANDMARK_COORDINATE_TYPE_PIXEL}); supportedLandmarkDecodingTypes.insert({"BYPASS", INFERENCE_LANDMARK_DECODING_TYPE_BYPASS}); + supportedLandmarkDecodingTypes.insert({"BYPASS_MULTICHANNEL", INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL}); supportedLandmarkDecodingTypes.insert({"HEATMAP", INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP}); supportedLandmarkDecodingTypes.insert({"HEATMAP_REFINE", INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP_REFINE}); } diff --git a/mv_machine_learning/mv_inference/inference/include/OutputMetadataTypes.h b/mv_machine_learning/mv_inference/inference/include/OutputMetadataTypes.h index 440fa76..7ce558b 100644 --- a/mv_machine_learning/mv_inference/inference/include/OutputMetadataTypes.h +++ b/mv_machine_learning/mv_inference/inference/include/OutputMetadataTypes.h @@ -67,6 +67,7 @@ namespace inference typedef enum { INFERENCE_LANDMARK_DECODING_TYPE_BYPASS, + INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL, INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP, INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP_REFINE } inference_landmark_decoding_type_e; diff --git a/mv_machine_learning/mv_inference/inference/src/Inference.cpp b/mv_machine_learning/mv_inference/inference/src/Inference.cpp index fdd0560..8cb63c8 100755 --- a/mv_machine_learning/mv_inference/inference/src/Inference.cpp +++ b/mv_machine_learning/mv_inference/inference/src/Inference.cpp @@ -1542,6 +1542,8 @@ namespace inference LOGI("landmark dim size: %zd and idx[0] is %d", channelIndexes.size(), channelIndexes[0]); number_of_landmarks = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[channelIndexes[0]] / outputMeta.GetLandmarkOffset(); + } else if (outputMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL) { + number_of_landmarks = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[channelIndexes[0]]; } else { heatMapWidth = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[outputMeta.GetLandmarkHeatMapInfo().wIdx]; heatMapHeight = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[outputMeta.GetLandmarkHeatMapInfo().hIdx]; @@ -1635,7 +1637,8 @@ namespace inference int heatMapHeight = 0; int heatMapChannel = 0; - if (outputMeta.GetLandmarkDecodingType() != INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) { + if (outputMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP || + outputMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP_REFINE) { heatMapWidth = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[outputMeta.GetLandmarkHeatMapInfo().wIdx]; heatMapHeight = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[outputMeta.GetLandmarkHeatMapInfo().hIdx]; heatMapChannel = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[outputMeta.GetLandmarkHeatMapInfo().cIdx]; @@ -1652,6 +1655,8 @@ namespace inference if (outputMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) landmarkChannel = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[channelIndexes[0]] / outputMeta.GetLandmarkOffset(); + else if (outputMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL) + landmarkChannel = mOutputLayerProperty.layers[outputMeta.GetLandmarkName()].shape[channelIndexes[0]]; poseResult->number_of_landmarks_per_pose = mUserListName.empty() ? landmarkChannel : static_cast(mUserListName.size()); diff --git a/mv_machine_learning/mv_inference/inference/src/OutputMetadata.cpp b/mv_machine_learning/mv_inference/inference/src/OutputMetadata.cpp index 738116f..391b265 100755 --- a/mv_machine_learning/mv_inference/inference/src/OutputMetadata.cpp +++ b/mv_machine_learning/mv_inference/inference/src/OutputMetadata.cpp @@ -468,7 +468,8 @@ namespace inference } if (!landmark.GetName().empty()) { - if (landmark.GetDecodingType() != INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) { + if (landmark.GetDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP || + landmark.GetDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP_REFINE) { ret = landmark.ParseDecodeInfo(root, mSupportedShapeType); if (ret != MEDIA_VISION_ERROR_NONE) { LOGE("Fail to GetLandmarkDecodeInfo[%d]", ret); diff --git a/mv_machine_learning/mv_inference/inference/src/PoseDecoder.cpp b/mv_machine_learning/mv_inference/inference/src/PoseDecoder.cpp index ca04829..e1596aa 100644 --- a/mv_machine_learning/mv_inference/inference/src/PoseDecoder.cpp +++ b/mv_machine_learning/mv_inference/inference/src/PoseDecoder.cpp @@ -56,7 +56,8 @@ namespace inference return MEDIA_VISION_ERROR_INVALID_OPERATION; } - if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) { + if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS || + mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL) { LOGI("Skip init"); return MEDIA_VISION_ERROR_NONE; } @@ -245,14 +246,16 @@ namespace inference mMeta.GetLandmarkType() == INFERENCE_LANDMARK_TYPE_3D_SINGLE) { mPoseLandmarks.resize(1); - if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) { + if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS || + mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL) { mPoseLandmarks[0].landmarks.resize(mNumberOfLandmarks); } else { mPoseLandmarks[0].landmarks.resize(mHeatMapChannel); } } - if (mMeta.GetLandmarkDecodingType() != INFERENCE_LANDMARK_DECODING_TYPE_BYPASS) { + if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP || + mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_HEATMAP_REFINE) { while (!mCandidates.empty()) { LandmarkPoint &root = mCandidates.front(); @@ -311,6 +314,21 @@ namespace inference for (auto& pose : mPoseLandmarks) { pose.score /= static_cast(mHeatMapChannel); } + } else if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL) { + int landmarkOffset = mMeta.GetLandmarkOffset(); + for (int idx = 0; idx < mNumberOfLandmarks; ++idx) { + float py = mTensorBuffer.getValue(mMeta.GetLandmarkName(), idx * landmarkOffset); + float px = mTensorBuffer.getValue(mMeta.GetLandmarkName(), idx * landmarkOffset + 1); + float pscore = mTensorBuffer.getValue(mMeta.GetScoreName(), idx * landmarkOffset + 2); + + mPoseLandmarks[0].landmarks[idx].score = pscore; + mPoseLandmarks[0].landmarks[idx].heatMapLoc = cv::Point(-1, -1); + mPoseLandmarks[0].landmarks[idx].decodedLoc = cv::Point2f(px / scaleWidth, py / scaleHeight); + mPoseLandmarks[0].landmarks[idx].id = idx; + mPoseLandmarks[0].landmarks[idx].valid = true; + + LOGI("idx[%d]: %.4f, %.4f, score: %.4f", idx, px, py, pscore); + } } else { // multi pose is not supported std::vector scoreIndexes = mMeta.GetScoreDimInfo().GetValidIndexAll(); diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 50fcffc..2aeff26 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.11.0 +Version: 0.12.0 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause diff --git a/test/testsuites/machine_learning/inference/inference_test_suite.c b/test/testsuites/machine_learning/inference/inference_test_suite.c index 188524d..681afab 100644 --- a/test/testsuites/machine_learning/inference/inference_test_suite.c +++ b/test/testsuites/machine_learning/inference/inference_test_suite.c @@ -224,6 +224,42 @@ #define PLD_TFLITE_WEIGHT_INT8_MOVENET_PATH \ "/usr/share/capi-media-vision/models/PLD/tflite/pld_int8_movenet.tflite" +#define PLD_TFLITE_WEIGHT_MOVENET_THUNDER3_256_FLOAT32_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder3_256x256.tflite" +#define PLD_TFLITE_META_MOVENET_THUNDER3_256_FLOAT32_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder3_256x256.json" +#define PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING3_192_FLOAT32_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning3_192x192.tflite" +#define PLD_TFLITE_META_MOVENET_LIGHTNING3_192_FLOAT32_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning3_192x192.json" + +#define PLD_TFLITE_WEIGHT_MOVENET_THUNDER3_256_INT8_QUANT_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder3_256x256_int8_quant.tflite" +#define PLD_TFLITE_META_MOVENET_THUNDER3_256_INT8_QUANT_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder3_256x256_int8_quant.json" +#define PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING3_192_INT8_QUANT_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning3_192x192_int8_quant.tflite" +#define PLD_TFLITE_META_MOVENET_LIGHTNING3_192_INT8_QUANT_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning3_192x192_int8_quant.json" + +#define PLD_TFLITE_WEIGHT_MOVENET_THUNDER4_256_FLOAT32_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder4_256x256.tflite" +#define PLD_TFLITE_META_MOVENET_THUNDER4_256_FLOAT32_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder4_256x256.json" +#define PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING4_192_FLOAT32_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning4_192x192.tflite" +#define PLD_TFLITE_META_MOVENET_LIGHTNING4_192_FLOAT32_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning4_192x192.json" + +#define PLD_TFLITE_WEIGHT_MOVENET_THUNDER4_256_INT8_QUANT_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder4_256x256_int8_quant.tflite" +#define PLD_TFLITE_META_MOVENET_THUNDER4_256_INT8_QUANT_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_thunder4_256x256_int8_quant.json" +#define PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING4_192_INT8_QUANT_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning4_192x192_int8_quant.tflite" +#define PLD_TFLITE_META_MOVENET_LIGHTNING4_192_INT8_QUANT_PATH \ + "/usr/share/capi-media-vision/models/PLD/tflite/pld_movenet_lightning4_192x192_int8_quant.json" + #define TASK_IC 0 #define TASK_OD 1 #define TASK_FD 2 @@ -1622,6 +1658,14 @@ int perform_pose_landmark_detection() "Hosted[o]: TFLITE(CPU) + CPM", "Hosted[o]: TFLITE(CPU) + MOBILENET_V1_POSENET", "Hosted[x]: TFLITE(CPU) + INT8_MOVENET", + "Hosted[o]: TFLITE(CPU) + FLOAT32_MOVENET_THUNDER3", + "Hosted[o]: TFLITE(CPU) + FLOAT32_MOVENET_LIGHTNING3", + "Hosted[o]: TFLITE(CPU) + INT8_QUANT_MOVENET_THUNDER3", + "Hosted[o]: TFLITE(CPU) + INT8_QUANT_MOVENET_LIGHTNING3", + "Hosted[o]: TFLITE(CPU) + FLOAT32_MOVENET_THUNDER4", + "Hosted[o]: TFLITE(CPU) + FLOAT32_MOVENET_LIGHTNING4", + "Hosted[o]: TFLITE(CPU) + INT8_QUANT_MOVENET_THUNDER4", + "Hosted[o]: TFLITE(CPU) + INT8_QUANT_MOVENET_LIGHTNING4", }; int sel_opt = show_menu_linear("Select Action:", names, ARRAY_SIZE(names)); @@ -1655,6 +1699,46 @@ int perform_pose_landmark_detection() engine_cfg, PLD_TFLITE_WEIGHT_INT8_MOVENET_PATH, NULL); } break; + case 5: { + err = engine_config_hosted_tflite_cpu( + engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_THUNDER3_256_FLOAT32_PATH, + PLD_TFLITE_META_MOVENET_THUNDER3_256_FLOAT32_PATH); + } break; + case 6: { + err = engine_config_hosted_tflite_cpu( + engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING3_192_FLOAT32_PATH, + PLD_TFLITE_META_MOVENET_LIGHTNING3_192_FLOAT32_PATH); + } break; + case 7: { + err = engine_config_hosted_tflite_cpu( + engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_THUNDER3_256_INT8_QUANT_PATH, + PLD_TFLITE_META_MOVENET_THUNDER3_256_INT8_QUANT_PATH); + } break; + case 8: { + err = engine_config_hosted_tflite_cpu( + engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING3_192_INT8_QUANT_PATH, + PLD_TFLITE_META_MOVENET_LIGHTNING3_192_INT8_QUANT_PATH); + } break; + case 9: { + err = engine_config_hosted_tflite_cpu( + engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_THUNDER4_256_FLOAT32_PATH, + PLD_TFLITE_META_MOVENET_THUNDER4_256_FLOAT32_PATH); + } break; + case 10: { + err = engine_config_hosted_tflite_cpu( + engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING4_192_FLOAT32_PATH, + PLD_TFLITE_META_MOVENET_LIGHTNING4_192_FLOAT32_PATH); + } break; + case 11: { + err = engine_config_hosted_tflite_cpu( + engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_THUNDER4_256_INT8_QUANT_PATH, + PLD_TFLITE_META_MOVENET_THUNDER4_256_INT8_QUANT_PATH); + } break; + case 12: { + err = engine_config_hosted_tflite_cpu( + engine_cfg, PLD_TFLITE_WEIGHT_MOVENET_LIGHTNING4_192_INT8_QUANT_PATH, + PLD_TFLITE_META_MOVENET_LIGHTNING4_192_INT8_QUANT_PATH); + } break; } if (err != MEDIA_VISION_ERROR_NONE) { printf("Fail to perform config [err:%i]\n", err); -- 2.7.4 From 53b0a9274aae3b2d06b27e62f3b0b1070a3a0423 Mon Sep 17 00:00:00 2001 From: Inki Dae Date: Tue, 11 Jan 2022 20:26:14 +0900 Subject: [PATCH 04/16] test/machine_learning: fix device attribute type [Version] : 0.12.1-0 [Issue type] : bug fix Fixed device attribute type. Legacy device attribute type has been deprecated so use new one. Change-Id: Ia31a5be01595e6d39f3dff783e5b4d0982987e86 Signed-off-by: Inki Dae --- packaging/capi-media-vision.spec | 2 +- .../machine_learning/inference/test_inference_helper.cpp | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 2aeff26..8af3d73 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.12.0 +Version: 0.12.1 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause diff --git a/test/testsuites/machine_learning/inference/test_inference_helper.cpp b/test/testsuites/machine_learning/inference/test_inference_helper.cpp index 9d5c95b..c041f48 100644 --- a/test/testsuites/machine_learning/inference/test_inference_helper.cpp +++ b/test/testsuites/machine_learning/inference/test_inference_helper.cpp @@ -46,8 +46,8 @@ void engine_config_hosted_cpu_tflite_user_model(mv_engine_config_h handle, MV_INFERENCE_BACKEND_TFLITE), MEDIA_VISION_ERROR_NONE); EXPECT_EQ(mv_engine_config_set_int_attribute(handle, - MV_INFERENCE_TARGET_TYPE, - MV_INFERENCE_TARGET_CPU), + MV_INFERENCE_TARGET_DEVICE_TYPE, + MV_INFERENCE_TARGET_DEVICE_CPU), MEDIA_VISION_ERROR_NONE); EXPECT_EQ(mv_engine_config_set_string_attribute( @@ -67,11 +67,11 @@ void engine_config_hosted_cpu_snpe_user_model(mv_engine_config_h handle, MV_INFERENCE_BACKEND_SNPE), MEDIA_VISION_ERROR_NONE); EXPECT_EQ(mv_engine_config_set_int_attribute(handle, - MV_INFERENCE_TARGET_TYPE, - MV_INFERENCE_TARGET_CPU), + MV_INFERENCE_TARGET_DEVICE_TYPE, + MV_INFERENCE_TARGET_DEVICE_CPU), MEDIA_VISION_ERROR_NONE); EXPECT_EQ(mv_engine_config_set_string_attribute( handle, MV_INFERENCE_MODEL_USER_FILE_PATH, user_file), MEDIA_VISION_ERROR_NONE); -} \ No newline at end of file +} -- 2.7.4 From af72d3db5f2a1894756ba92a9427f5bd560aac91 Mon Sep 17 00:00:00 2001 From: Kwang Son Date: Wed, 19 Jan 2022 23:15:07 -0500 Subject: [PATCH 05/16] packaging: Change gcov object install path [Version] : 0.12.2-0 [Issue type] : feature request Change gcov install path with append package prefix for better directory structure. Change-Id: Icf586a264e1f8a37db31c134e5e2ea9f82968e21 Signed-off-by: Kwang Son --- packaging/capi-media-vision.spec | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 8af3d73..70a2bc1 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.12.1 +Version: 0.12.2 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause @@ -229,8 +229,8 @@ cp media-vision-config.json %{buildroot}%{_datadir}/%{name}/ %make_install %if 0%{?gcov:1} -mkdir -p %{buildroot}%{_datadir}/gcov/obj -install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj +mkdir -p %{buildroot}%{_datadir}/gcov/obj/%{name} +install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj/%{name} %endif %post -p /sbin/ldconfig -- 2.7.4 From e3ebe78d9e3ac4512fca897da7c1e0eedf4752cc Mon Sep 17 00:00:00 2001 From: Tae-Young Chung Date: Fri, 21 Jan 2022 09:28:32 +0900 Subject: [PATCH 06/16] face/image: Add opencv's tracking header files [Version] 0.12.3-0 [Issue type] Update From OpenCV-4.5.3, a tracking module is moved to contrib and some tracking modes is changed to legacy. Change-Id: Ibdfcc89abf5f10a8d874da81ab3fc4601cec5423 Signed-off-by: Tae-Young Chung --- mv_face/face/include/FaceTracker.h | 3 ++- mv_image/image/include/Tracking/ObjectTracker.h | 1 + mv_surveillance/surveillance/include/MFTracker.h | 1 + packaging/capi-media-vision.spec | 2 +- 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mv_face/face/include/FaceTracker.h b/mv_face/face/include/FaceTracker.h index 5266fea..210cc41 100644 --- a/mv_face/face/include/FaceTracker.h +++ b/mv_face/face/include/FaceTracker.h @@ -44,6 +44,7 @@ #include #include +#include namespace cv { @@ -59,7 +60,7 @@ by authors to outperform MIL). During the implementation period the code at , the courtesy of the author Arthur Amarra, was used for the reference purpose. */ -class FaceTracker : public TrackerMedianFlow { +class FaceTracker : public legacy::TrackerMedianFlow { public: struct Params { /** diff --git a/mv_image/image/include/Tracking/ObjectTracker.h b/mv_image/image/include/Tracking/ObjectTracker.h index e3e6894..9486b51 100644 --- a/mv_image/image/include/Tracking/ObjectTracker.h +++ b/mv_image/image/include/Tracking/ObjectTracker.h @@ -18,6 +18,7 @@ #define __MEDIA_VISION_OBJECTTRACKER_H__ #include +#include namespace MediaVision { namespace Image { diff --git a/mv_surveillance/surveillance/include/MFTracker.h b/mv_surveillance/surveillance/include/MFTracker.h index 4a58714..b93267a 100644 --- a/mv_surveillance/surveillance/include/MFTracker.h +++ b/mv_surveillance/surveillance/include/MFTracker.h @@ -18,6 +18,7 @@ #define __MEDIA_VISION_MFTRACKER_H__ #include +#include namespace mediavision { namespace surveillance { diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 70a2bc1..7bb6988 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.12.2 +Version: 0.12.3 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause -- 2.7.4 From da602b92861bfa60532443f68a2e46f6c43e9993 Mon Sep 17 00:00:00 2001 From: Tae-Young Chung Date: Tue, 22 Feb 2022 15:30:50 +0900 Subject: [PATCH 07/16] Fix bugs [Version] 0.12.4-0 [Issue type] bug fix 1. Fix INVARIANT_RESULT.OP_ZERO - In case of GetLandmarkType(), its' return values are limited to the landmark type enumeration so that checking the return value of GetLandmarkType() is meaningless 2. Check null after malloc() 3. Initialize member variable in class ctor Change-Id: I0e23298ffcb7760eb86e24e37347eae5e992e421 Signed-off-by: Tae-Young Chung --- mv_face/face/src/mv_face_open.cpp | 22 ++++++++++++---------- .../mv_inference/inference/src/PoseDecoder.cpp | 6 ------ packaging/capi-media-vision.spec | 2 +- test/testsuites/image/image_test_suite.c | 4 ++++ .../inference/test_inference_helper.cpp | 3 ++- .../surveillance/surveillance_test_suite.c | 4 ++++ 6 files changed, 23 insertions(+), 18 deletions(-) diff --git a/mv_face/face/src/mv_face_open.cpp b/mv_face/face/src/mv_face_open.cpp index 443fd71..fb4496b 100644 --- a/mv_face/face/src/mv_face_open.cpp +++ b/mv_face/face/src/mv_face_open.cpp @@ -694,19 +694,21 @@ int mv_face_recognition_model_query_labels_open( static_cast(recognition_model); const std::set& learnedLabels = pRecModel->getFaceLabels(); - *number_of_labels = learnedLabels.size(); - - if ((*number_of_labels)) { - (*labels) = (int*)malloc(sizeof(int) * (*number_of_labels)); - - std::set::const_iterator it = learnedLabels.begin(); - int i = 0; - for (; it != learnedLabels.end(); ++it) { - (*labels)[i] = *it; - ++i; + auto _number_of_labels = learnedLabels.size(); + int *_pLabels = NULL; + if (_number_of_labels) { + _pLabels = (int*)malloc(sizeof(int) * (_number_of_labels)); + if(_pLabels == NULL) { + LOGE("Fail to alloc memory for %zu labels", _number_of_labels); + return MEDIA_VISION_ERROR_OUT_OF_MEMORY; } + + std::copy(learnedLabels.begin(), learnedLabels.end(), _pLabels); } + *number_of_labels = _number_of_labels; + *labels = _pLabels; + LOGD("List of the labels learned by the recognition model has been retrieved"); return MEDIA_VISION_ERROR_NONE; } diff --git a/mv_machine_learning/mv_inference/inference/src/PoseDecoder.cpp b/mv_machine_learning/mv_inference/inference/src/PoseDecoder.cpp index e1596aa..09c10d8 100644 --- a/mv_machine_learning/mv_inference/inference/src/PoseDecoder.cpp +++ b/mv_machine_learning/mv_inference/inference/src/PoseDecoder.cpp @@ -50,12 +50,6 @@ namespace inference { LOGI("ENTER"); - if (mMeta.GetLandmarkType() < INFERENCE_LANDMARK_TYPE_2D_SINGLE || - mMeta.GetLandmarkType() > INFERENCE_LANDMARK_TYPE_3D_SINGLE) { - LOGE("Not supported landmark type"); - return MEDIA_VISION_ERROR_INVALID_OPERATION; - } - if (mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS || mMeta.GetLandmarkDecodingType() == INFERENCE_LANDMARK_DECODING_TYPE_BYPASS_MULTICHANNEL) { LOGI("Skip init"); diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 7bb6988..a8cd2a9 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.12.3 +Version: 0.12.4 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause diff --git a/test/testsuites/image/image_test_suite.c b/test/testsuites/image/image_test_suite.c index f1ff0de..a18ef5a 100644 --- a/test/testsuites/image/image_test_suite.c +++ b/test/testsuites/image/image_test_suite.c @@ -1742,6 +1742,10 @@ void perform_recognition_cases(GArray *image_objects) } mv_image_object_h *objects_pool = malloc(sizeof(mv_image_object_h) * image_objects->len); + if (objects_pool == NULL) { + printf("\nFail to alloc memory for %u objects.\n", image_objects->len); + break; + } int index = 0; for (; index < image_objects->len; ++index) objects_pool[index] = g_array_index(image_objects, testing_object_h, index)->entity; diff --git a/test/testsuites/machine_learning/inference/test_inference_helper.cpp b/test/testsuites/machine_learning/inference/test_inference_helper.cpp index c041f48..ac427e6 100644 --- a/test/testsuites/machine_learning/inference/test_inference_helper.cpp +++ b/test/testsuites/machine_learning/inference/test_inference_helper.cpp @@ -2,7 +2,8 @@ #include #include "test_inference_helper.hpp" -TestInference::TestInference() +TestInference::TestInference() : + _use_json_parser(false) { EXPECT_EQ(mv_create_engine_config(&engine_cfg), MEDIA_VISION_ERROR_NONE); EXPECT_EQ(mv_inference_create(&infer), MEDIA_VISION_ERROR_NONE); diff --git a/test/testsuites/surveillance/surveillance_test_suite.c b/test/testsuites/surveillance/surveillance_test_suite.c index 0a86b98..5b7810c 100644 --- a/test/testsuites/surveillance/surveillance_test_suite.c +++ b/test/testsuites/surveillance/surveillance_test_suite.c @@ -454,6 +454,10 @@ void add_roi_to_event(mv_surveillance_event_trigger_h event_trigger) PRINT_R("Incorrect input! Try again."); mv_point_s* roi = (mv_point_s*) malloc(sizeof(mv_point_s) * number_of_roi_points); + if (roi == NULL) { + PRINT_E("Fail to alloc roi err[%d].", MEDIA_VISION_ERROR_OUT_OF_MEMORY); + return; + } int x = 0; int y = 0; -- 2.7.4 From f5c8d848e03d7a629520c762a2785de2a96238af Mon Sep 17 00:00:00 2001 From: sangho park Date: Tue, 29 Mar 2022 11:07:41 +0900 Subject: [PATCH 08/16] fix cmake_minimum_required() deprecation warning. [Version] : 0.12.5-0 [Issue type] : Bug fix Change-Id: I6b178d31b204ebdc38860bd82ed942867782ee0f Signed-off-by: sangho park --- CMakeLists.txt | 2 +- mv_barcode/barcode_detector/CMakeLists.txt | 2 +- mv_barcode/barcode_generator/CMakeLists.txt | 2 +- mv_common/CMakeLists.txt | 2 +- mv_face/face/CMakeLists.txt | 2 +- mv_image/CMakeLists.txt | 2 +- mv_image/image/CMakeLists.txt | 2 +- mv_machine_learning/mv_inference/inference/CMakeLists.txt | 2 +- mv_surveillance/surveillance/CMakeLists.txt | 2 +- packaging/capi-media-vision.spec | 2 +- test/CMakeLists.txt | 2 +- test/assessment/CMakeLists.txt | 2 +- test/assessment/barcode/CMakeLists.txt | 2 +- test/assessment/face/CMakeLists.txt | 2 +- test/assessment/surveillance/CMakeLists.txt | 2 +- test/testsuites/CMakeLists.txt | 2 +- test/testsuites/common/image_helper/CMakeLists.txt | 2 +- test/testsuites/common/testsuite_common/CMakeLists.txt | 2 +- test/testsuites/common/video_helper/CMakeLists.txt | 2 +- test/testsuites/face/CMakeLists.txt | 2 +- test/testsuites/image/CMakeLists.txt | 2 +- test/testsuites/machine_learning/CMakeLists.txt | 2 +- test/testsuites/machine_learning/inference/CMakeLists.txt | 2 +- test/testsuites/surveillance/CMakeLists.txt | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9421c35..fb5b84e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ set(fw_name "capi-media-vision") project(${fw_name}) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) option(BUILD_ML_ONLY "Build mv_machine_learning only" OFF) diff --git a/mv_barcode/barcode_detector/CMakeLists.txt b/mv_barcode/barcode_detector/CMakeLists.txt index 8840abc..b67afb1 100644 --- a/mv_barcode/barcode_detector/CMakeLists.txt +++ b/mv_barcode/barcode_detector/CMakeLists.txt @@ -1,5 +1,5 @@ project(${MV_BARCODE_DETECTOR_LIB_NAME}) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) file(GLOB MV_BARCODE_DET_SRC_LIST "${PROJECT_SOURCE_DIR}/src/*.cpp" "${PROJECT_SOURCE_DIR}/src/*.c") diff --git a/mv_barcode/barcode_generator/CMakeLists.txt b/mv_barcode/barcode_generator/CMakeLists.txt index ca40696..099ae2c 100644 --- a/mv_barcode/barcode_generator/CMakeLists.txt +++ b/mv_barcode/barcode_generator/CMakeLists.txt @@ -1,5 +1,5 @@ project(${MV_BARCODE_GENERATOR_LIB_NAME}) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) file(GLOB MV_BARCODE_GEN_SRC_LIST "${PROJECT_SOURCE_DIR}/src/*.cpp" "${PROJECT_SOURCE_DIR}/src/*.c") diff --git a/mv_common/CMakeLists.txt b/mv_common/CMakeLists.txt index 9fd4d67..b802adf 100644 --- a/mv_common/CMakeLists.txt +++ b/mv_common/CMakeLists.txt @@ -1,5 +1,5 @@ project(${MV_COMMON_LIB_NAME}) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) file(GLOB MV_COMMON_SRC_LIST "${PROJECT_SOURCE_DIR}/src/*.cpp" "${PROJECT_SOURCE_DIR}/src/*.c") diff --git a/mv_face/face/CMakeLists.txt b/mv_face/face/CMakeLists.txt index 74c0dce..3c30f7c 100644 --- a/mv_face/face/CMakeLists.txt +++ b/mv_face/face/CMakeLists.txt @@ -1,5 +1,5 @@ project(${MV_FACE_LIB_NAME}) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) file(GLOB MV_FACE_SRC_LIST "${PROJECT_SOURCE_DIR}/src/*.cpp" "${PROJECT_SOURCE_DIR}/src/*.c") diff --git a/mv_image/CMakeLists.txt b/mv_image/CMakeLists.txt index 2fe1e5d..12ea46f 100644 --- a/mv_image/CMakeLists.txt +++ b/mv_image/CMakeLists.txt @@ -1,4 +1,4 @@ project(mv_image_port) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) add_subdirectory(${PROJECT_SOURCE_DIR}/image) diff --git a/mv_image/image/CMakeLists.txt b/mv_image/image/CMakeLists.txt index e51e9a2..b0ff1c9 100644 --- a/mv_image/image/CMakeLists.txt +++ b/mv_image/image/CMakeLists.txt @@ -1,5 +1,5 @@ project(${MV_IMAGE_LIB_NAME}) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) file(GLOB_RECURSE MV_IMAGE_SRC_LIST "${PROJECT_SOURCE_DIR}/src/*.cpp" "${PROJECT_SOURCE_DIR}/src/*.c") diff --git a/mv_machine_learning/mv_inference/inference/CMakeLists.txt b/mv_machine_learning/mv_inference/inference/CMakeLists.txt index cd20e57..41d6816 100644 --- a/mv_machine_learning/mv_inference/inference/CMakeLists.txt +++ b/mv_machine_learning/mv_inference/inference/CMakeLists.txt @@ -1,5 +1,5 @@ project(${MV_INFERENCE_LIB_NAME}) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) pkg_check_modules(${PROJECT_NAME}_DEP REQUIRED inference-engine-interface-common iniparser json-glib-1.0) file(GLOB MV_INFERENCE_SOURCE_LIST "${PROJECT_SOURCE_DIR}/src/*.c" "${PROJECT_SOURCE_DIR}/src/*.cpp") diff --git a/mv_surveillance/surveillance/CMakeLists.txt b/mv_surveillance/surveillance/CMakeLists.txt index 4b8c191..30c61f2 100644 --- a/mv_surveillance/surveillance/CMakeLists.txt +++ b/mv_surveillance/surveillance/CMakeLists.txt @@ -1,5 +1,5 @@ project(${MV_SURVEILLANCE_LIB_NAME}) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) file(GLOB MV_SURVEILLANCE_SRC_LIST "${PROJECT_SOURCE_DIR}/src/*.cpp" "${PROJECT_SOURCE_DIR}/src/*.c") diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index a8cd2a9..07dd13d 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.12.4 +Version: 0.12.5 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 7008d14..b33a710 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -2,7 +2,7 @@ add_subdirectory(assessment) add_subdirectory(testsuites) project(mv_test) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) add_executable(${PROJECT_NAME} testsuites/barcode/test_barcode.cpp diff --git a/test/assessment/CMakeLists.txt b/test/assessment/CMakeLists.txt index aae4038..0b70a03 100644 --- a/test/assessment/CMakeLists.txt +++ b/test/assessment/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_test_assessment) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) add_subdirectory(${PROJECT_SOURCE_DIR}/barcode) add_subdirectory(${PROJECT_SOURCE_DIR}/face) diff --git a/test/assessment/barcode/CMakeLists.txt b/test/assessment/barcode/CMakeLists.txt index fbcb2dc..e12f939 100644 --- a/test/assessment/barcode/CMakeLists.txt +++ b/test/assessment/barcode/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_barcode_assessment) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) add_executable(${PROJECT_NAME} assessment_barcode.cpp) target_link_libraries(${PROJECT_NAME} ${MV_BARCODE_DETECTOR_LIB_NAME} diff --git a/test/assessment/face/CMakeLists.txt b/test/assessment/face/CMakeLists.txt index cf203b9..464acb6 100644 --- a/test/assessment/face/CMakeLists.txt +++ b/test/assessment/face/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_face_assessment) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) find_package(OpenCV REQUIRED imgcodecs) if(NOT OpenCV_FOUND) diff --git a/test/assessment/surveillance/CMakeLists.txt b/test/assessment/surveillance/CMakeLists.txt index c7a30bd..7fa3163 100644 --- a/test/assessment/surveillance/CMakeLists.txt +++ b/test/assessment/surveillance/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) project(mv_surveillance_assessment) find_package(OpenCV REQUIRED videoio xfeatures2d) diff --git a/test/testsuites/CMakeLists.txt b/test/testsuites/CMakeLists.txt index bc195d7..1ea5af5 100644 --- a/test/testsuites/CMakeLists.txt +++ b/test/testsuites/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_testsuites) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) set(INC_IMAGE_HELPER "${PROJECT_SOURCE_DIR}/common/image_helper/include") set(INC_VIDEO_HELPER "${PROJECT_SOURCE_DIR}/common/video_helper") diff --git a/test/testsuites/common/image_helper/CMakeLists.txt b/test/testsuites/common/image_helper/CMakeLists.txt index be4ec3f..4a8a008 100644 --- a/test/testsuites/common/image_helper/CMakeLists.txt +++ b/test/testsuites/common/image_helper/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_image_helper) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) file(GLOB MV_IMAGE_HELPER_SRC_LIST "${PROJECT_SOURCE_DIR}/src/*.c" "${PROJECT_SOURCE_DIR}/src/*.cpp") diff --git a/test/testsuites/common/testsuite_common/CMakeLists.txt b/test/testsuites/common/testsuite_common/CMakeLists.txt index a7ca583..f93c508 100644 --- a/test/testsuites/common/testsuite_common/CMakeLists.txt +++ b/test/testsuites/common/testsuite_common/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_testsuite_common) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) add_library(${PROJECT_NAME} SHARED mv_testsuite_common.c) target_link_libraries(${PROJECT_NAME} ${MV_COMMON_LIB_NAME} mv_image_helper) diff --git a/test/testsuites/common/video_helper/CMakeLists.txt b/test/testsuites/common/video_helper/CMakeLists.txt index 22296ee..43331fb 100644 --- a/test/testsuites/common/video_helper/CMakeLists.txt +++ b/test/testsuites/common/video_helper/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_video_helper) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) pkg_check_modules(${PROJECT_NAME}_DEP REQUIRED gstreamer-1.0 gstreamer-app-1.0 gstreamer-video-1.0 capi-media-tool dlog) diff --git a/test/testsuites/face/CMakeLists.txt b/test/testsuites/face/CMakeLists.txt index ce57d1d..2e111e7 100644 --- a/test/testsuites/face/CMakeLists.txt +++ b/test/testsuites/face/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_face_test_suite) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) add_executable(${PROJECT_NAME} face_test_suite.c) target_link_libraries(${PROJECT_NAME} ${MV_FACE_LIB_NAME} diff --git a/test/testsuites/image/CMakeLists.txt b/test/testsuites/image/CMakeLists.txt index aa2ecfd..6b20bce 100644 --- a/test/testsuites/image/CMakeLists.txt +++ b/test/testsuites/image/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_image_test_suite) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) pkg_check_modules(GLIB_PKG glib-2.0) diff --git a/test/testsuites/machine_learning/CMakeLists.txt b/test/testsuites/machine_learning/CMakeLists.txt index 57785be..5b21eb4 100644 --- a/test/testsuites/machine_learning/CMakeLists.txt +++ b/test/testsuites/machine_learning/CMakeLists.txt @@ -1,4 +1,4 @@ project(machine_learning) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) add_subdirectory(${PROJECT_SOURCE_DIR}/inference) diff --git a/test/testsuites/machine_learning/inference/CMakeLists.txt b/test/testsuites/machine_learning/inference/CMakeLists.txt index cd480a7..0aabbe4 100644 --- a/test/testsuites/machine_learning/inference/CMakeLists.txt +++ b/test/testsuites/machine_learning/inference/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_infer_test_suite) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) add_executable(${PROJECT_NAME} inference_test_suite.c) diff --git a/test/testsuites/surveillance/CMakeLists.txt b/test/testsuites/surveillance/CMakeLists.txt index d87d645..1d731a7 100644 --- a/test/testsuites/surveillance/CMakeLists.txt +++ b/test/testsuites/surveillance/CMakeLists.txt @@ -1,5 +1,5 @@ project(mv_surveillance_test_suite) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 2.6...3.13) add_executable(${PROJECT_NAME} surveillance_test_suite.c) target_link_libraries(${PROJECT_NAME} ${MV_SURVEILLANCE_LIB_NAME} -- 2.7.4 From 2728d7dd19a92dc67eac29255935086da314b275 Mon Sep 17 00:00:00 2001 From: sangho park Date: Mon, 9 May 2022 14:53:43 +0900 Subject: [PATCH 09/16] clean up manual file copy [Version] 0.12.6-0 [Issue type] cleanup delete hard copy commands in spec file and implement in CMakeLists.txt Change-Id: I75841678480972f2a270b84db6fc533e006e1d5d Signed-off-by: sangho park --- CMakeLists.txt | 2 ++ packaging/capi-media-vision.spec | 6 +----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fb5b84e..56672ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,3 +123,5 @@ configure_file( @ONLY ) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}-inference.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig) + +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/media-vision-config.json DESTINATION ${CMAKE_INSTALL_DATADIR}/${fw_name}) diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 07dd13d..22b0ee5 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.12.5 +Version: 0.12.6 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause @@ -222,10 +222,6 @@ find . -name '*.gcno' -exec cp '{}' gcov-obj ';' %endif %install -rm -rf %{buildroot} -mkdir -p %{buildroot}%{_datadir}/%{name} -cp media-vision-config.json %{buildroot}%{_datadir}/%{name}/ - %make_install %if 0%{?gcov:1} -- 2.7.4 From d17a59235de2fc28ecd6958ef9bd3325a1cd9ef1 Mon Sep 17 00:00:00 2001 From: Hyunsoo Park Date: Mon, 23 May 2022 14:36:24 +0900 Subject: [PATCH 10/16] docs: Fix typo [Version] 0.12.7-0 [Issue type] Fix typo Change-Id: I894675ef5904bd9d10a9b4d40218eafed81db989 Signed-off-by: Hyunsoo Park --- doc/mediavision_doc.h | 2 +- include/mv_barcode_detect.h | 2 +- packaging/capi-media-vision.spec | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/mediavision_doc.h b/doc/mediavision_doc.h index 371d227..7691efd 100644 --- a/doc/mediavision_doc.h +++ b/doc/mediavision_doc.h @@ -399,7 +399,7 @@ * @section CAPI_MEDIA_VISION_INFERENCE_MODULE_OVERVIEW Overview * @ref CAPI_MEDIA_VISION_INFERENCE_MODULE contains #mv_inference_h handle to perform * Image Classification, Object Detection, Face and Facial Landmark detection. - * Inference handle should be created with mv_inference_create() and destoryed with + * Inference handle should be created with mv_inference_create() and destroyed with * mv_inference_destroy(). #mv_inference_h should be configured by calling * mv_inference_configure(). After configuration, #mv_inference_h should be prepared by * calling mv_inference_prepare() which loads models and set required parameters. diff --git a/include/mv_barcode_detect.h b/include/mv_barcode_detect.h index 61944ba..b34f946 100644 --- a/include/mv_barcode_detect.h +++ b/include/mv_barcode_detect.h @@ -58,7 +58,7 @@ extern "C" { * to set rotation count attribute of the engine configuration. * @details If #MV_BARCODE_DETECT_ATTR_ROTATION_DEGREES, #MV_BARCODE_DETECT_ATTR_ROTATION_COUNT, * and #MV_BARCODE_DETECT_ATTR_ROTATION_DIRECTION are set to - * 20, 9, and MV_BARCODE_DETECT_ATTR_ROTATION_CLOCKWISE, repectively,\n + * 20, 9, and MV_BARCODE_DETECT_ATTR_ROTATION_CLOCKWISE, respectively,\n * detection will be tried with 20, 40, 60, ... 180 degrees as well as 0 degrees.\n * Similarly, -20, -40, -60, ... will be tried for #MV_BARCODE_DETECT_ATTR_ROTATION_COUNTER_CLOCKWISE and * -20, +20, -40, +40, ... will be tried iteratively for #MV_BARCODE_DETECT_ATTR_ROTATION_ALL. diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 22b0ee5..0f3216e 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.12.6 +Version: 0.12.7 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause -- 2.7.4 From 178d4a3bfa8c7529dacac4952d45c107bf08588f Mon Sep 17 00:00:00 2001 From: Kwang Son Date: Tue, 24 May 2022 19:54:05 -0400 Subject: [PATCH 11/16] Change gcov rpm packaging path [Version] 0.12.8 [Issue type] Gcov Change gcov package to show relative code path gcov/obj/%{name} -> gcov/obj/%{name}/%{builddir} Change-Id: I27895951a5e39d6b637ec9734a01b54f8679dfdc Signed-off-by: Kwang Son --- packaging/capi-media-vision.spec | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 0f3216e..fb3fabb 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.12.7 +Version: 0.12.8 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause @@ -216,17 +216,14 @@ export LDFLAGS+=" -lgcov" make %{?jobs:-j%jobs} -%if 0%{?gcov:1} -mkdir -p gcov-obj -find . -name '*.gcno' -exec cp '{}' gcov-obj ';' -%endif - %install %make_install %if 0%{?gcov:1} -mkdir -p %{buildroot}%{_datadir}/gcov/obj/%{name} -install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj/%{name} +builddir=$(basename $PWD) +gcno_obj_dir=%{buildroot}%{_datadir}/gcov/obj/%{name}/"$builddir" +mkdir -p "$gcno_obj_dir" +find . -name '*.gcno' -exec cp --parents '{}' "$gcno_obj_dir" ';' %endif %post -p /sbin/ldconfig -- 2.7.4 From 40c4aa819b77c4003bbcd67e9761810500f7f705 Mon Sep 17 00:00:00 2001 From: Kwanghoon Son Date: Thu, 2 Jun 2022 01:43:32 -0400 Subject: [PATCH 12/16] Exclude line coverage test files [Version] : 0.12.9-0 [Issue type] : Bug fix Change-Id: Ie3ed102e0bd30332cd4d5efaadc56425a8e84edd Signed-off-by: Kwanghoon Son --- packaging/capi-media-vision.spec | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index fb3fabb..8dfb22f 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.12.8 +Version: 0.12.9 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause @@ -223,7 +223,7 @@ make %{?jobs:-j%jobs} builddir=$(basename $PWD) gcno_obj_dir=%{buildroot}%{_datadir}/gcov/obj/%{name}/"$builddir" mkdir -p "$gcno_obj_dir" -find . -name '*.gcno' -exec cp --parents '{}' "$gcno_obj_dir" ';' +find . -not -path './test/*' -name '*.gcno' -exec cp --parents '{}' "$gcno_obj_dir" ';' %endif %post -p /sbin/ldconfig -- 2.7.4 From a3957a7188baa049fb19b67395b7c68c29502c00 Mon Sep 17 00:00:00 2001 From: Kwanghoon Son Date: Thu, 2 Jun 2022 02:07:25 -0400 Subject: [PATCH 13/16] Fix implicit declaration function Use before function declaration and this makes wrong function usage. [Version] : 0.12.10-0 [Issue type] : Bug fix Change-Id: I2f8cc1386acd6c2d6afb098729140fe070725424 Signed-off-by: Kwanghoon Son --- packaging/capi-media-vision.spec | 2 +- .../inference/inference_test_suite.c | 56 +++++++++++----------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index 8dfb22f..ff1a687 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.12.9 +Version: 0.12.10 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause diff --git a/test/testsuites/machine_learning/inference/inference_test_suite.c b/test/testsuites/machine_learning/inference/inference_test_suite.c index 681afab..d7326c0 100644 --- a/test/testsuites/machine_learning/inference/inference_test_suite.c +++ b/test/testsuites/machine_learning/inference/inference_test_suite.c @@ -520,6 +520,33 @@ clean_mv_inference: return err; } +int engine_config_hosted_tflite_cpu(mv_engine_config_h handle, + const char *tf_weight, + const char *meta_file) +{ + RET_IF_FAIL(mv_engine_config_set_string_attribute( + handle, MV_INFERENCE_MODEL_WEIGHT_FILE_PATH, tf_weight)); + RET_IF_FAIL(mv_engine_config_set_int_attribute( + handle, MV_INFERENCE_BACKEND_TYPE, MV_INFERENCE_BACKEND_TFLITE)); + RET_IF_FAIL(mv_engine_config_set_int_attribute( + handle, MV_INFERENCE_TARGET_TYPE, MV_INFERENCE_TARGET_CPU)); + if (meta_file != NULL) + RET_IF_FAIL(mv_engine_config_set_string_attribute( + handle, MV_INFERENCE_MODEL_META_FILE_PATH, meta_file)); + return MEDIA_VISION_ERROR_NONE; +} + +int engine_config_user_hosted_tflite_cpu(mv_engine_config_h handle, + const char *tf_weight, + const char *user_file, + const char *meta_file) +{ + RET_IF_FAIL(engine_config_hosted_tflite_cpu(handle, tf_weight, meta_file)); + RET_IF_FAIL(mv_engine_config_set_string_attribute( + handle, MV_INFERENCE_MODEL_USER_FILE_PATH, user_file)); + return MEDIA_VISION_ERROR_NONE; +} + int perform_configure_set_model_config_path(mv_engine_config_h engine_cfg) { int err = MEDIA_VISION_ERROR_NONE; @@ -1332,7 +1359,7 @@ int perform_tflite_mobilenetv1ssd_face(mv_engine_config_h handle) "TFLite_Detection_PostProcess:2", "TFLite_Detection_PostProcess:3" }; - RET_IF_FAIL(engine_config_hosted_tflite_cpu(handle, FD_TFLITE_WEIGHT_PATH)); + RET_IF_FAIL(engine_config_hosted_tflite_cpu(handle, FD_TFLITE_WEIGHT_PATH, NULL)); RET_IF_FAIL(mv_engine_config_set_int_attribute( handle, MV_INFERENCE_INPUT_DATA_TYPE, MV_INFERENCE_DATA_FLOAT32)); RET_IF_FAIL(mv_engine_config_set_double_attribute( @@ -1592,33 +1619,6 @@ clean_facial_landmark_engine: return err; } -int engine_config_hosted_tflite_cpu(mv_engine_config_h handle, - const char *tf_weight, - const char *meta_file) -{ - RET_IF_FAIL(mv_engine_config_set_string_attribute( - handle, MV_INFERENCE_MODEL_WEIGHT_FILE_PATH, tf_weight)); - RET_IF_FAIL(mv_engine_config_set_int_attribute( - handle, MV_INFERENCE_BACKEND_TYPE, MV_INFERENCE_BACKEND_TFLITE)); - RET_IF_FAIL(mv_engine_config_set_int_attribute( - handle, MV_INFERENCE_TARGET_TYPE, MV_INFERENCE_TARGET_CPU)); - if (meta_file != NULL) - RET_IF_FAIL(mv_engine_config_set_string_attribute( - handle, MV_INFERENCE_MODEL_META_FILE_PATH, meta_file)); - return MEDIA_VISION_ERROR_NONE; -} - -int engine_config_user_hosted_tflite_cpu(mv_engine_config_h handle, - const char *tf_weight, - const char *user_file, - const char *meta_file) -{ - RET_IF_FAIL(engine_config_hosted_tflite_cpu(handle, tf_weight, meta_file)); - RET_IF_FAIL(mv_engine_config_set_string_attribute( - handle, MV_INFERENCE_MODEL_USER_FILE_PATH, user_file)); - return MEDIA_VISION_ERROR_NONE; -} - int perform_armnn_cpm_config(mv_engine_config_h handle) { const char *inputNodeName = "image"; -- 2.7.4 From 35950665024e1725570ef14c8d1a68eb71b7dc18 Mon Sep 17 00:00:00 2001 From: Hyunsoo Park Date: Mon, 4 Jul 2022 13:59:13 +0900 Subject: [PATCH 14/16] mv_image: Fix bugs [Version] 0.12.11-0 [Issue type] bug fix Return if 'CascadeTracker' is null. Change-Id: Ica09a490d8dc9cd9268172d3c1a1a05d6cf1472a Signed-off-by: Hyunsoo Park --- mv_image/image/src/Tracking/ImageTrackingModel.cpp | 4 +++- packaging/capi-media-vision.spec | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mv_image/image/src/Tracking/ImageTrackingModel.cpp b/mv_image/image/src/Tracking/ImageTrackingModel.cpp index e0337ad..caeef38 100644 --- a/mv_image/image/src/Tracking/ImageTrackingModel.cpp +++ b/mv_image/image/src/Tracking/ImageTrackingModel.cpp @@ -118,8 +118,10 @@ void ImageTrackingModel::setTarget(const ImageObject& target) /* Creating a basic tracker which will have other trackers */ cv::Ptr mainTracker = new (std::nothrow)CascadeTracker; - if (mainTracker == NULL) + if (mainTracker == NULL) { LOGE("Failed to create mainTracker"); + return; + } /* Adding asynchronous recognition based tracker */ diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index ff1a687..f3c228b 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.12.10 +Version: 0.12.11 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause -- 2.7.4 From 0aae0e48f7f251f7b7f50f851cd4b5be3e16b2b4 Mon Sep 17 00:00:00 2001 From: Hyunsoo Park Date: Mon, 4 Jul 2022 16:44:26 +0900 Subject: [PATCH 15/16] [ACR-1706] mv_image: add return value From this patch, 'mv_image_tracking_model_set_target' api could return MEDIA_VISION_ERROR_INVALID_OPERATION when 'CascadeTracker' is null. Change-Id: I73b50d9a5b9dd5a592370d1d7c30973402b661a0 Signed-off-by: Hyunsoo Park --- include/mv_image.h | 1 + mv_image/image/include/Tracking/ImageTrackingModel.h | 4 +++- mv_image/image/include/mv_image_open.h | 1 + mv_image/image/src/Tracking/ImageTrackingModel.cpp | 6 ++++-- mv_image/image/src/mv_image_open.cpp | 6 +++++- 5 files changed, 14 insertions(+), 4 deletions(-) diff --git a/include/mv_image.h b/include/mv_image.h index 4f27bf9..1ad1a99 100644 --- a/include/mv_image.h +++ b/include/mv_image.h @@ -701,6 +701,7 @@ int mv_image_tracking_model_create( * @return @c 0 on success, otherwise a negative error value * @retval #MEDIA_VISION_ERROR_NONE Successful * @retval #MEDIA_VISION_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #MEDIA_VISION_ERROR_INVALID_OPERATION Invalid operation * @retval #MEDIA_VISION_ERROR_NOT_SUPPORTED Not supported * * @pre Create image tracking model by calling diff --git a/mv_image/image/include/Tracking/ImageTrackingModel.h b/mv_image/image/include/Tracking/ImageTrackingModel.h index ce40825..83664fd 100644 --- a/mv_image/image/include/Tracking/ImageTrackingModel.h +++ b/mv_image/image/include/Tracking/ImageTrackingModel.h @@ -58,8 +58,10 @@ public: * * @since_tizen 3.0 * @param [in] target @ref ImageObject which will be tracked + * + * @return @a 0 on success, otherwise a negative error value */ - void setTarget(const ImageObject& target); + int setTarget(const ImageObject& target); /** * @brief Checks whether the tracking model is valid for tracking. diff --git a/mv_image/image/include/mv_image_open.h b/mv_image/image/include/mv_image_open.h index 0184b81..3089778 100644 --- a/mv_image/image/include/mv_image_open.h +++ b/mv_image/image/include/mv_image_open.h @@ -415,6 +415,7 @@ int mv_image_tracking_model_create_open( * @return @c 0 on success, otherwise a negative error value * @retval #MEDIA_VISION_ERROR_NONE Successful * @retval #MEDIA_VISION_ERROR_INVALID_PARAMETER Invalid parameter + * @retval #MEDIA_VISION_ERROR_INVALID_OPERATION Invalid operation * * @pre Create image tracking model by calling * @ref mv_image_tracking_model_create_open() diff --git a/mv_image/image/src/Tracking/ImageTrackingModel.cpp b/mv_image/image/src/Tracking/ImageTrackingModel.cpp index caeef38..ba83581 100644 --- a/mv_image/image/src/Tracking/ImageTrackingModel.cpp +++ b/mv_image/image/src/Tracking/ImageTrackingModel.cpp @@ -54,7 +54,7 @@ ImageTrackingModel::ImageTrackingModel(const ImageTrackingModel& copy) : /* NULL */ } -void ImageTrackingModel::setTarget(const ImageObject& target) +int ImageTrackingModel::setTarget(const ImageObject& target) { /* TODO: Here are all the settings. * This can be transferred to configuration file. @@ -120,7 +120,7 @@ void ImageTrackingModel::setTarget(const ImageObject& target) cv::Ptr mainTracker = new (std::nothrow)CascadeTracker; if (mainTracker == NULL) { LOGE("Failed to create mainTracker"); - return; + return MEDIA_VISION_ERROR_INVALID_OPERATION; } /* Adding asynchronous recognition based tracker */ @@ -178,6 +178,8 @@ void ImageTrackingModel::setTarget(const ImageObject& target) __tracker = mainTracker; __target = target; + + return MEDIA_VISION_ERROR_NONE; } bool ImageTrackingModel::isValid() const diff --git a/mv_image/image/src/mv_image_open.cpp b/mv_image/image/src/mv_image_open.cpp index 1d69007..0b5b99d 100644 --- a/mv_image/image/src/mv_image_open.cpp +++ b/mv_image/image/src/mv_image_open.cpp @@ -712,8 +712,12 @@ int mv_image_tracking_model_set_target_open( return MEDIA_VISION_ERROR_INVALID_DATA; } - ((MediaVision::Image::ImageTrackingModel*)image_tracking_model)->setTarget( + int ret = ((MediaVision::Image::ImageTrackingModel*)image_tracking_model)->setTarget( *(MediaVision::Image::ImageObject*)image_object); + if (ret != MEDIA_VISION_ERROR_NONE) { + LOGE("Fail to set target."); + return ret; + } return MEDIA_VISION_ERROR_NONE; } -- 2.7.4 From be5b6d8df826f3f0a2202f43ef02ce6c6f529745 Mon Sep 17 00:00:00 2001 From: Hyunsoo Park Date: Thu, 14 Jul 2022 11:20:08 +0900 Subject: [PATCH 16/16] docs: fix typo [Version] 0.12.12-0 [Issue type] doc update Change-Id: I660abc56ae1ae60ac39139197d1170fb8b9e88be Signed-off-by: Hyunsoo Park --- include/mv_barcode_detect.h | 10 +++++----- include/mv_barcode_generate.h | 4 ++-- packaging/capi-media-vision.spec | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/mv_barcode_detect.h b/include/mv_barcode_detect.h index b34f946..5a30341 100644 --- a/include/mv_barcode_detect.h +++ b/include/mv_barcode_detect.h @@ -44,7 +44,7 @@ extern "C" { #define MV_BARCODE_DETECT_ATTR_TARGET "MV_BARCODE_DETECT_ATTR_TARGET" /**< Target: 0-all, 1-1D, 2-2D*/ /** - * @brief Use MV_BARCODE_DETECT_ATTR_ROTATION_DEGREE + * @brief Use #MV_BARCODE_DETECT_ATTR_ROTATION_DEGREE * to set rotation degree attribute of the engine configuration. * * @since_tizen 6.5 @@ -54,11 +54,11 @@ extern "C" { #define MV_BARCODE_DETECT_ATTR_ROTATION_DEGREES "MV_BARCODE_DETECT_ATTR_ROTATION_DEGREES" /** - * @brief Use MV_BARCODE_DETECT_ATTR_ROTATION_COUNT + * @brief Use #MV_BARCODE_DETECT_ATTR_ROTATION_COUNT * to set rotation count attribute of the engine configuration. * @details If #MV_BARCODE_DETECT_ATTR_ROTATION_DEGREES, #MV_BARCODE_DETECT_ATTR_ROTATION_COUNT, * and #MV_BARCODE_DETECT_ATTR_ROTATION_DIRECTION are set to - * 20, 9, and MV_BARCODE_DETECT_ATTR_ROTATION_CLOCKWISE, respectively,\n + * 20, 9, and #MV_BARCODE_DETECT_ATTR_ROTATION_CLOCKWISE, respectively,\n * detection will be tried with 20, 40, 60, ... 180 degrees as well as 0 degrees.\n * Similarly, -20, -40, -60, ... will be tried for #MV_BARCODE_DETECT_ATTR_ROTATION_COUNTER_CLOCKWISE and * -20, +20, -40, +40, ... will be tried iteratively for #MV_BARCODE_DETECT_ATTR_ROTATION_ALL. @@ -71,7 +71,7 @@ extern "C" { #define MV_BARCODE_DETECT_ATTR_ROTATION_COUNT "MV_BARCODE_DETECT_ATTR_ROTATION_COUNT" /** - * @brief Use MV_BARCODE_DETECT_ATTR_ROTATION_DIRECTION + * @brief Use #MV_BARCODE_DETECT_ATTR_ROTATION_DIRECTION * to set rotation direction attribute of the engine configuration. * * @since_tizen 6.5 @@ -82,7 +82,7 @@ extern "C" { #define MV_BARCODE_DETECT_ATTR_ROTATION_DIRECTION "MV_BARCODE_DETECT_ATTR_ROTATION_DIRECTION" /** - * @brief Use MV_BARCODE_DETECT_ATTR_USE_ENHANCEMENT + * @brief Use #MV_BARCODE_DETECT_ATTR_USE_ENHANCEMENT * to enable image quality enhancement attribute of the engine configuration. * * @since_tizen 6.5 diff --git a/include/mv_barcode_generate.h b/include/mv_barcode_generate.h index 4a68a8b..aaaa2b4 100644 --- a/include/mv_barcode_generate.h +++ b/include/mv_barcode_generate.h @@ -87,7 +87,7 @@ typedef enum { * @remarks If the text attribute of engine configuration is set to * #MV_BARCODE_GENERATE_ATTR_TEXT_VISIBLE, * #MEDIA_VISION_ERROR_INVALID_OPERATION will be returned - * when @a type is MV_BARCODE_QR + * when @a type is #MV_BARCODE_QR * * @param [in] engine_cfg The handle to the configuration of the engine * @param [in] message The message to be encoded in the barcode @@ -136,7 +136,7 @@ int mv_barcode_generate_source( * @remarks If the text attribute of engine configuration is set to * #MV_BARCODE_GENERATE_ATTR_TEXT_VISIBLE, * #MEDIA_VISION_ERROR_INVALID_OPERATION will be returned - * when @a type is MV_BARCODE_QR + * when @a type is #MV_BARCODE_QR * * @remarks The mediastorage privilege %http://tizen.org/privilege/mediastorage is needed \n * if @a image_path is relevant to media storage.\n diff --git a/packaging/capi-media-vision.spec b/packaging/capi-media-vision.spec index f3c228b..13ef166 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.12.11 +Version: 0.12.12 Release: 0 Group: Multimedia/Framework License: Apache-2.0 and BSD-3-Clause -- 2.7.4