#ifndef ANSONNXCL_H #define ANSONNXCL_H #pragma once #include "ANSEngineCommon.h" #include "engine.h" namespace ANSCENTER { class ANSENGINE_API ANSONNXCL :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 RunInference(const cv::Mat& input); std::vector RunInference(const cv::Mat& input, const std::string& camera_id); bool Destroy(); ~ANSONNXCL(); private: std::string _modelFilePath; bool _modelLoadValid; bool _fp16{ false }; size_t vectorProduct(const std::vector& vector); bool preprocessImageToTensor(const cv::Mat& image, cv::Mat& outImage, const cv::Size& targetShape, const cv::Scalar& color = cv::Scalar(0, 0, 0), bool scaleUp = true, const std::string& strategy = "resize"); void warmupModel(); bool Init(const std::string& modelPath, const cv::Size& targetInputShape, bool useGPU = true); bool preprocess(const cv::Mat& image, float*& blob, std::vector& inputTensorShape); std::vector postprocess(const std::vector& outputTensors, const std::string& camera_id); std::vector classify(const cv::Mat& image, const std::string& camera_id); private: Ort::Env env_{ nullptr }; Ort::SessionOptions sessionOptions_{ nullptr }; Ort::Session session_{ nullptr }; bool isDynamicInputShape_{}; cv::Size inputImageShape_{}; std::vector inputNodeNameAllocatedStrings_{}; std::vector inputNames_{}; std::vector outputNodeNameAllocatedStrings_{}; std::vector outputNames_{}; size_t numInputNodes_{}, numOutputNodes_{}; int numClasses_{ 0 }; float m_imgWidth = 0; float m_imgHeight = 0; }; } #endif #pragma once