task_api: add Task API specific strucuture 38/320138/1
authorInki Dae <inki.dae@samsung.com>
Mon, 24 Feb 2025 09:08:37 +0000 (18:08 +0900)
committerInki Dae <inki.dae@samsung.com>
Mon, 24 Feb 2025 09:08:37 +0000 (18:08 +0900)
Add Task API specific structure.

TaskApiResult structure should be used commonly for other task API
so this patch introduces ObjectDetectionResult structure for Object
detection task API and adds it as a member of TaskApiResult structure.

Change-Id: Iea825ab10cf093732f74c22b8fbf3e2cd086cef1
Signed-off-by: Inki Dae <inki.dae@samsung.com>
services/task_api/include/DataTypes.h
services/task_api/src/ObjectDetectionTask.cpp

index 6df3b74c396fd8592f57d81804510b01ff6b3435..235898f02e95bfe902863c7b75f211b2006d65b7 100644 (file)
@@ -29,15 +29,18 @@ namespace taskapi
 {
 enum class TaskApiResultType { MIN_X, MIN_Y, MAX_X, MAX_Y, LABEL };
 
-struct TaskApiResult : public ServiceBaseResultType {
-       TaskApiResult() : ServiceBaseResultType(ServiceType::TASK_API)
-       {}
+struct ObjectDetectionResult {
        bool is_valid { false };
-       unsigned int frame_number {};
        unsigned int num_of_objects {};
        std::vector<Rect> bboxes;
        std::vector<std::string> labels;
 };
+struct TaskApiResult : public ServiceBaseResultType {
+       TaskApiResult() : ServiceBaseResultType(ServiceType::TASK_API)
+       {}
+       unsigned int frame_number {};
+       ObjectDetectionResult object_detection_result;
+};
 
 }
 }
index 4def27686e0416858c5a8f8a47aba1abb9a7acbc..0ab9bfbcd5e3512eac4b14a3ff48a556f724e30b 100644 (file)
@@ -68,9 +68,9 @@ void ObjectDetectionTask::renderOn(BaseDataType &data)
        auto preprocessedImg = dynamic_cast<ImageDataType &>(data);
        unique_lock<mutex> lock(_result_lock);
 
-       if (_result.is_valid) {
-               auto rects = _result.bboxes;
-               auto labels = _result.labels;
+       if (_result.object_detection_result.is_valid) {
+               auto rects = _result.object_detection_result.bboxes;
+               auto labels = _result.object_detection_result.labels;
                cv::Mat imgCv(cv::Size(preprocessedImg.width, preprocessedImg.height), CV_MAKETYPE(CV_8U, 3),
                                          preprocessedImg.ptr);
 
@@ -83,7 +83,7 @@ void ObjectDetectionTask::renderOn(BaseDataType &data)
                }
 
                lock.lock();
-               _result.is_valid = false;
+               _result.object_detection_result.is_valid = false;
        }
 }
 
@@ -96,9 +96,9 @@ void ObjectDetectionTask::updateResult(std::vector<std::shared_ptr<BaseResultTyp
                unique_lock<mutex> lock(_result_lock);
 
                if (output->_type == ResultType::OBJECT_DETECTION) {
-                       _result.bboxes = dynamic_cast<OdResultType &>(*output)._rects;
-                       _result.labels = dynamic_cast<OdResultType &>(*output)._labels;
-                       _result.is_valid = true;
+                       _result.object_detection_result.bboxes = dynamic_cast<OdResultType &>(*output)._rects;
+                       _result.object_detection_result.labels = dynamic_cast<OdResultType &>(*output)._labels;
+                       _result.object_detection_result.is_valid = true;
                }
        }
 }
@@ -116,7 +116,7 @@ int ObjectDetectionTask::getNumOfResult(const TaskApiResult &result)
 
        _result = result;
 
-       return _result.bboxes.size();
+       return _result.object_detection_result.bboxes.size();
 }
 
 bool ObjectDetectionTask::isKeyValid(const std::string &key)
@@ -133,13 +133,13 @@ unsigned int ObjectDetectionTask::getResultInt(unsigned int idx, const std::stri
 
        switch (_result_keys[key]) {
        case TaskApiResultType::MIN_X:
-               return _result.bboxes[idx].left;
+               return _result.object_detection_result.bboxes[idx].left;
        case TaskApiResultType::MIN_Y:
-               return _result.bboxes[idx].top;
+               return _result.object_detection_result.bboxes[idx].top;
        case TaskApiResultType::MAX_X:
-               return _result.bboxes[idx].right;
+               return _result.object_detection_result.bboxes[idx].right;
        case TaskApiResultType::MAX_Y:
-               return _result.bboxes[idx].bottom;
+               return _result.object_detection_result.bboxes[idx].bottom;
        default:
                throw InvalidParameter("A given result key is inavlid.");
        }
@@ -152,12 +152,12 @@ const char *ObjectDetectionTask::getResultStr(unsigned int idx, const std::strin
 
        unique_lock<mutex> lock(_result_lock);
 
-       if (_result.labels.empty())
+       if (_result.object_detection_result.labels.empty())
                throw NoData("Label not provided.");
 
        switch (_result_keys[key]) {
        case TaskApiResultType::LABEL:
-               return _result.labels[idx].c_str();
+               return _result.object_detection_result.labels[idx].c_str();
        default:
                throw InvalidParameter("A given result key is inavlid.");
        }