#include "IService.h"
#include "SingleoCommonTypes.h"
-#include "IInferenceServiceInterface.h"
#include "SingleoInputManager.h"
#include "IInputService.h"
#include "SingleoInferenceTypes.h"
#include "DataTypes.h"
#include "AsyncManager.h"
#include "IPostprocessor.h"
+#include "TaskManager.h"
namespace singleo
{
class AutoZoom : public IService
{
private:
- std::unique_ptr<singleo::inference::IInferenceServiceInterface> _inference_service;
+ std::unique_ptr<TaskManager> _taskManager;
std::unique_ptr<singleo::input::IInputService> _input_service;
std::unique_ptr<IPostprocessor> _postprocessor;
SingleoInputManager _input_image_data;
return _async_manager;
}
- std::unique_ptr<singleo::inference::IInferenceServiceInterface> &getInferenceService()
- {
- return _inference_service;
- }
std::unique_ptr<IPostprocessor> &getPostprocessor()
{
return _postprocessor;
}
+
+ std::unique_ptr<TaskManager> &getTaskManager()
+ {
+ return _taskManager;
+ }
};
} // autozoom
#include <algorithm>
#include "SingleoException.h"
#include "AutoZoom.h"
-#include "IInferenceServiceFactory.h"
#include "InferenceServiceFactory.h"
#include "SingleoLog.h"
#include "ImagePreprocessor.h"
#include "InputCamera.h"
#include "InputTypes.h"
#include "Postprocessor.h"
+#include "InferenceNode.h"
using namespace std;
using namespace singleo::inference;
// 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<InferenceNode>();
- _inference_service = factory->createFaceDetection();
+ face_detection_node->setName("face_detection");
+ face_detection_node->setInferenceService(factory->createFaceDetection());
+ _taskManager = make_unique<TaskManager>();
+ _taskManager->addNode(face_detection_node);
// Create InputCamera service if input service type is CAMERA.
if (config._input_feed_type == InputFeedType::CAMERA) {
SINGLEO_LOGD("Camera input service has been initialized.");
}
- _inference_service->configure();
- _inference_service->prepare();
_postprocessor = make_unique<Postprocessor>();
}
auto data = dynamic_pointer_cast<FileDataType>(result);
preprocessor.update(*data);
- _inference_service->invoke(preprocessor.getData());
+ _taskManager->addInput(preprocessor.getData());
+ _taskManager->run();
updateResult(preprocessor.getData());
return;
} else {
preprocessor.update(input_data);
}
- _inference_service->invoke(preprocessor.getData());
+ _taskManager->addInput(preprocessor.getData());
+ _taskManager->run();
updateResult(preprocessor.getData());
}
_async_manager->registerInvokeCb(this, [this](IService *service, BaseDataType &data) {
auto auto_zoom = static_cast<AutoZoom *>(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.
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");