From 53686d264d53d2fd7706b55ebab11e7ea5c1f682 Mon Sep 17 00:00:00 2001 From: Inki Dae Date: Thu, 2 May 2024 16:28:13 +0900 Subject: [PATCH] add task manger support for Autozoom Change-Id: I1b9d70d5fae439122c95c84b78728282ca10a307 Signed-off-by: Inki Dae --- services/auto_zoom/include/AutoZoom.h | 13 +++++++------ services/auto_zoom/src/AutoZoom.cpp | 21 +++++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/services/auto_zoom/include/AutoZoom.h b/services/auto_zoom/include/AutoZoom.h index cd65836..c75d83b 100644 --- a/services/auto_zoom/include/AutoZoom.h +++ b/services/auto_zoom/include/AutoZoom.h @@ -19,7 +19,6 @@ #include "IService.h" #include "SingleoCommonTypes.h" -#include "IInferenceServiceInterface.h" #include "SingleoInputManager.h" #include "IInputService.h" #include "SingleoInferenceTypes.h" @@ -28,6 +27,7 @@ #include "DataTypes.h" #include "AsyncManager.h" #include "IPostprocessor.h" +#include "TaskManager.h" namespace singleo { @@ -38,7 +38,7 @@ namespace autozoom class AutoZoom : public IService { private: - std::unique_ptr _inference_service; + std::unique_ptr _taskManager; std::unique_ptr _input_service; std::unique_ptr _postprocessor; SingleoInputManager _input_image_data; @@ -82,14 +82,15 @@ public: return _async_manager; } - std::unique_ptr &getInferenceService() - { - return _inference_service; - } std::unique_ptr &getPostprocessor() { return _postprocessor; } + + std::unique_ptr &getTaskManager() + { + return _taskManager; + } }; } // autozoom diff --git a/services/auto_zoom/src/AutoZoom.cpp b/services/auto_zoom/src/AutoZoom.cpp index d9575b5..0c5d6a1 100644 --- a/services/auto_zoom/src/AutoZoom.cpp +++ b/services/auto_zoom/src/AutoZoom.cpp @@ -17,7 +17,6 @@ #include #include "SingleoException.h" #include "AutoZoom.h" -#include "IInferenceServiceFactory.h" #include "InferenceServiceFactory.h" #include "SingleoLog.h" #include "ImagePreprocessor.h" @@ -25,6 +24,7 @@ #include "InputCamera.h" #include "InputTypes.h" #include "Postprocessor.h" +#include "InferenceNode.h" using namespace std; using namespace singleo::inference; @@ -44,8 +44,12 @@ AutoZoom::AutoZoom(InputConfigBase &config) // In default, we will use Inference service factory for Mediavision to use Mediavision framework // for inference service. TODO. introduce meta config file approach later. auto factory = InferenceServiceFactory::instance().create("MvInferenceServiceFactory"); + auto face_detection_node = make_shared(); - _inference_service = factory->createFaceDetection(); + face_detection_node->setName("face_detection"); + face_detection_node->setInferenceService(factory->createFaceDetection()); + _taskManager = make_unique(); + _taskManager->addNode(face_detection_node); // Create InputCamera service if input service type is CAMERA. if (config._input_feed_type == InputFeedType::CAMERA) { @@ -65,8 +69,6 @@ AutoZoom::AutoZoom(InputConfigBase &config) SINGLEO_LOGD("Camera input service has been initialized."); } - _inference_service->configure(); - _inference_service->prepare(); _postprocessor = make_unique(); } @@ -146,7 +148,8 @@ void AutoZoom::perform() auto data = dynamic_pointer_cast(result); preprocessor.update(*data); - _inference_service->invoke(preprocessor.getData()); + _taskManager->addInput(preprocessor.getData()); + _taskManager->run(); updateResult(preprocessor.getData()); return; } else { @@ -156,7 +159,8 @@ void AutoZoom::perform() preprocessor.update(input_data); } - _inference_service->invoke(preprocessor.getData()); + _taskManager->addInput(preprocessor.getData()); + _taskManager->run(); updateResult(preprocessor.getData()); } @@ -174,7 +178,8 @@ void AutoZoom::performAsync() _async_manager->registerInvokeCb(this, [this](IService *service, BaseDataType &data) { auto auto_zoom = static_cast(service); - auto_zoom->getInferenceService()->invoke(data); + auto_zoom->getTaskManager()->addInput(data); + auto_zoom->getTaskManager()->run(); auto_zoom->updateResult(data); // This buffer was allocated and copied in inputServiceCb callback. @@ -187,7 +192,7 @@ void AutoZoom::performAsync() void AutoZoom::updateResult(BaseDataType &in_data) { - auto &output_data = _inference_service->result(); + auto &output_data = _taskManager->output(); if (output_data._type != ResultType::OBJECT_DETECTION && output_data._type != ResultType::FACE_DETECTION) throw InvalidParameter("Invalid result type"); -- 2.34.1