#pragma once #include "Common.h" #include "ConfigModule.h" #include "ResourceKit.h" #include "AsyncProcessor.h" #include "SyncProcessor.h" /** * @brief AI类 * * 该类用于C调用 */ class RuntimeEngine { public: /** * @brief 初始化AI模块 * * 该函数用于初始化AI模块,包括读取配置文件和初始化模型资源。 * * @param filePath 配置文件路径 * @return 返回值为整数,表示初始化操作的结果: * - 如果初始化成功,返回AIStatus::StatusCode::SUCCESS。 * - 如果读取配置文件失败,返回ConfigProcessor函数的返回值。 * - 如果初始化模型资源失败,返回ai_model.init_resource函数的返回值。 */ int init(const std::string &filePath,bool is_sync); /** * @brief 处理图像帧 * * 该函数用于处理图像帧,包括执行AI模型推理操作。 * * @param frame_st 图像帧结构体指针,包含待处理的图像信息 * @return 返回值为整数,表示处理操作的结果: * - 如果处理成功,返回AIStatus::StatusCode::SUCCESS。 * - 如果发生错误,返回相应的错误码,具体错误码含义请参考ai_model.infer函数的注释。 */ int createRequest(frame_t *frame_st); int wait(int reqId); int getResult(int reqId, std::vector &bbox); int cleanup(); int getAllPipelineIdNameStatus(std::vector> &uidPipilineIdNameStatusMap); int setPipelineStatus(int pipelineId, bool is_enable); int getPipelineModelConfig(const int &pipelineId, const int &model_uid, const std::string &obj_name, float &conf); int setPipelineModelConfig(const int &pipelineId, const int &modeUid, const std::string &key, float &value); // int process(frame_t *frame_st); /** * @brief 设置推理管道状态 * * 该函数用于设置指定推理管道的状态,可启用或禁用推理管道,修改配置文件,并重新初始化AI模型资源。 * * @param pp_name 推理管道名称 * @param is_enable 若为true,则启用推理管道;若为false,则禁用推理管道。 * @return 返回值为整数,表示设置操作的结果: * - 如果设置成功,返回AIStatus::StatusCode::SUCCESS。 * - 如果发生错误,返回相应的错误码,具体错误码含义请参考ai_model.update_resource函数的注释。 */ // int set_pp_status(const std::string &pp_name, bool is_enable); // /** // * @brief 获取推理管道状态 // * // * 该函数用于获取指定推理管道的状态,判断是否启用或禁用推理管道。 // * // * @param pp_name 推理管道名称 // * @param is_enable 用于存储推理管道状态的引用变量,若为true表示启用,若为false表示禁用。 // * @return 返回值为整数,表示获取状态操作的结果: // * - 如果成功获取状态,返回AIStatus::StatusCode::SUCCESS。 // * - 如果推理管道名称无效,返回AIStatus::ErrorCode::INVALID_PIPELINE_NAME。 // * - 其他可能的错误码,请参考ConfigProcessor类的GetPipelineEnable函数的注释。 // */ // int get_pp_status(const std::string &pp_name, bool &is_enable); /** * @brief 获取所有推理管道名称 * * 该函数用于获取所有推理管道的名称,并返回名称数组和管道数量。 * * @param pipelineNames 存储推理管道名称的指针的指针,由调用方负责释放内存。 * @param pipelineCount 用于存储推理管道数量的指针。 * @return 返回值为整数,表示获取操作的结果: * - 如果成功获取推理管道名称,返回AIStatus::StatusCode::SUCCESS。 * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下: * - AIStatus::ErrorCode::BAD_ALLOC: 内存分配失败。 * - 其他可能的错误码,请参考ConfigProcessor类的GetAllPipelineName函数的注释。 */ // int get_pp_name(char ***pipelineNames, int *pipelineCount); // /** // * @brief 获取指定推理管道的推理结果 // * // * 该函数用于获取指定推理管道的推理结果,并返回结果数组和结果数量。 // * // * @param pp_name 推理管道名称 // * @param boundingBoxes 存储推理结果的指针的指针,由调用方负责释放内存。 // * @param size 用于存储推理结果数量的指针。 // * @return 返回值为整数,表示获取操作的结果: // * - 如果成功获取推理结果,返回AIStatus::StatusCode::SUCCESS。 // * - 如果推理管道名称无效,返回AIStatus::ErrorCode::NO_PIPELINE_ID。 // * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下: // * - AIStatus::ErrorCode::BAD_ALLOC: 内存分配失败。 // */ // int get_pp_res(const std::string &pp_name, BoundingBox_Res **boundingBoxes, int *size); // /** // * @brief 获取所有推理结果 // * // * 该函数用于获取所有推理管道的推理结果,并返回结果数组和结果数量。 // * // * @param boundingBoxes 存储推理结果的指针的指针,由调用方负责释放内存。 // * @param size 用于存储推理结果数量的指针。 // * @return 返回值为整数,表示获取操作的结果: // * - 如果成功获取推理结果,返回AIStatus::StatusCode::SUCCESS。 // * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下: // * - AIStatus::ErrorCode::BAD_ALLOC: 内存分配失败。 // */ // int get_all_res(BoundingBox_Res **boundingBoxes, int *size); // /** // * @brief 获取推理管道模型配置的置信度 // * // * 该函数用于获取指定推理管道中指定模型及对象的配置置信度。 // * // * @param pp_name 推理管道名称 // * @param model_uid 模型UID // * @param obj_name 对象名称 // * @param conf 用于存储配置置信度的引用变量 // * @return 返回值为整数,表示获取操作的结果: // * - 如果成功获取配置置信度,返回AIStatus::StatusCode::SUCCESS。 // * - 如果推理管道名称或模型UID无效,返回AIStatus::ErrorCode::INVALID_PIPELINE_NAME 或 AIStatus::ErrorCode::INVALID_MODEL_UID。 // * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下: // * - 其他可能的错误码,请参考ConfigProcessor类的GetPipelineModelConf函数的注释。 // */ // int get_pp_model_conf(const std::string &pp_name, // const int &model_uid, // const std::string &obj_name, // float &conf); // /** // * @brief 设置推理管道模型配置的置信度 // * // * 该函数用于设置指定推理管道中指定模型及对象的配置置信度,并更新AI模型资源。 // * // * 例如目前有一个pipeline名字为face_detect,其是一个级联任务,这种情况下可以通过【pp_name】和【model_uid】灵活设置每个模型的置信度。 // * @image html set_pp_model_conf.png // * // * @param pp_name 推理管道名称 // * @param model_uid 模型UID // * @param obj_name 对象名称 // * @param conf 新的配置置信度值 // * @return 返回值为整数,表示设置操作的结果: // * - 如果成功设置配置置信度,返回AIStatus::StatusCode::SUCCESS。 // * - 如果推理管道名称或模型UID无效,返回AIStatus::ErrorCode::INVALID_PIPELINE_NAME 或 AIStatus::ErrorCode::INVALID_MODEL_UID。 // * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下: // * - 其他可能的错误码,请参考ConfigProcessor类的SetPipelineModelConf函数的注释。 // */ // int set_pp_model_conf(const std::string &pp_name, // const int &model_uid, // const std::string &obj_name, // float &conf); private: bool isAsync; ConfigModule config; ResourceKit resourceKit; AsyncProcessor asyncProcessor; SyncProcessor syncProcessor; };