#ifndef ANSPOSE_H
#define ANSPOSE_H
#pragma once
#include "ANSEngineCommon.h"
#include <opencv2/opencv.hpp>
#include <opencv2/dnn.hpp>
#include <openvino/openvino.hpp>
#include <models/hpe_model_openpose.h>
#include <pipelines/async_pipeline.h>

namespace ANSCENTER
{
    class ANSENGINE_API ANSPOSE :public ANSODBase
    {
    public:
        virtual bool Initialize(std::string licenseKey, ModelConfig modelConfig, const std::string& modelZipFilePath, const std::string& modelZipPassword, std::string& labelMap) override;
        virtual bool LoadModel(const std::string& modelZipFilePath, const std::string& modelZipPassword) override;
		virtual bool LoadModelFromFolder(std::string licenseKey, ModelConfig modelConfig, std::string modelName, std::string className, const std::string& modelFolder, std::string& labelMap)override;
        virtual bool OptimizeModel(bool fp16, std::string& optimizedModelFolder);
        std::vector<Object> RunInference(const cv::Mat& input);
        std::vector<Object> RunInference(const cv::Mat& input, const std::string& camera_id);   

        bool Destroy();
        ~ANSPOSE();
    private:
        AsyncPipeline*  _poseEstimationPipeline = nullptr;
        std::string     _modelFilePath;
		std::string     _device;
        ov::Core        _core;
    };
}

#endif
