#pragma once #include #include #include #include #include "nlohmann/json.hpp" #include "ConfigModule.h" #ifdef EEASY_CHIP #include "EeasyModel.h" #define Model EeasyModel #elif AXERA_CHIP #include "AxeraModel.h" #define Model AxeraModel #endif /** * @struct pipeline_t * @brief 推理管道结构体 * * 该结构体用于存储推理管道的业务配置项目。 */ typedef struct { /** * @brief 类别属性映射 * * 用于存储类别属性及其对应的值,与模型结构体中的 class_attributes的key和vlue 一一对应。 */ std::unordered_map classAttributes; }PipelineConfig; /** * @brief AIMODEL模型类 * * 该类包含了用于管理和操作AI模型的各种成员变量和方法。 */ class ResourceKit { public: /** * @brief 初始化AI模型资源 * * 该函数用于初始化AI模型所需的资源,包括创建指定UID的资源,并根据配置文件初始化推理管道。 * * @param cfg AI模型配置参数 * @return 返回值为整数,表示初始化结果: * - 如果初始化成功,返回AIStatus::StatusCode::SUCCESS。 * - 如果发生错误,返回错误码,可能的错误码及其含义如下: * - AIStatus::ErrorCode::MODEL_INIT_UID_START: 模型初始化错误,错误码起始值。 * - AIStatus::ErrorCode::MODEL_INIT_UID_START - 1: 最后一个初始化资源失败。 * - AIStatus::ErrorCode::MODEL_INIT_UID_START - 2: 最后两个个初始化资源失败。 * - 以此类推 */ int initializeResources(const ConfigModule cfg); /** * @brief 更新AI模型资源 * * 该函数用于更新AI模型所需的资源,删除所有已创建的资源,然后重新初始化资源。 * * @param cfg AI模型配置参数 * @return 返回值为整数,表示更新结果: * - 如果更新成功,返回AIStatus::StatusCode::SUCCESS。 * - 如果删除资源或初始化资源过程中发生错误,返回相应的错误码,具体错误码含义请参考 init_resource 函数的注释。 */ int updateResources(const ConfigModule cfg,bool isEnabled,const std::vector &needCreateResource,const std::vector &needDeleteResource); /** * @brief update_resource之后执行 * * 该函数用于更新推理管道的配置信息,根据给定的配置参数重新初始化推理管道。 * * @param cfg AI模型配置参数 * @return 返回值为整数,表示更新操作的结果: * - 如果更新成功,返回AIStatus::StatusCode::SUCCESS。 * - 如果发生错误,返回相应的错误码,一般情况下不会出现错误。 */ int parsePipelineConfig(const ConfigModule cfg); int getRuntimeCacheConfig(const ConfigModule cfg, unsigned long &maxPreprocessDstImageSize, unsigned long &maxInferedTensorTotalSize); /** * @brief 预处理资源初始化映射 * * 用于存储各个步骤的预处理资源初始化信息,其中包括UID和NPU厂家的预处理结构体。 */ std::unordered_map uidPreprocessInitMap; /** * @brief 预处理资源资源最大dstImageSize * */ long unsigned int maxPreprocessDstImageSize; long unsigned int maxInferedTensorTotalSize; /** * @brief 模型运行资源初始化映射 * * 用于存储各个步骤的模型运行资源初始化信息,其中包括UID和NPU厂家的模型结构。 */ std::unordered_mapuidModelInitMap; /** * @brief 后处理资源初始化映射 * * 用于存储各个步骤的后处理运行资源初始化信息,其中包括UID和NPU厂家的模型结构。 */ std::unordered_mapuidPostprocessInitMap; /** * @brief 推理管道资源初始化映射 * * 用于存储各个推理管道的资源初始化信息,其中包括UID和推理管道的业务配置项目。 */ std::unordered_map uidPipelineCfgMap; /** * @brief 模型厂家的类对象 * * 用于处理底层AI模型操作的EZModel对象,实现了与NPU厂家的交互。 */ Model model; int deleteAllResource(const ConfigModule cfg); private: /** * @brief 创建AI模型资源 * * 该函数根据给定的配置和步骤(step),创建AI模型所需的资源。 * * @param cfg AI模型配置参数 * @param step 模型创建的步骤编号 * @return 返回值为整数,表示创建结果: * - 如果创建成功,返回AIStatus::StatusCode::SUCCESS。 * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下: * - AIStatus::ErrorCode::INVALID_STEP_TYPE: 无效的步骤类型。 * - AIStatus::ErrorCode::INVALID_PREPROCESS_CONFIG: 无效的预处理配置。 * - AIStatus::ErrorCode::INVALID_MODEL_CONFIG: 无效的模型配置。 * - 其他可能的错误码,请参考具体模块的初始化函数的注释。 */ int createResource(const ConfigModule cfg, int step); /** * @brief 创建AI模型资源PipeLine * * 该函数根据给定的配置和pipeline,创建AI模型所需的资源。 * * @param cfg AI模型配置参数 * @param pipeline 模型创建的步骤pipeline * @return 返回值为整数,表示创建结果: * - 如果创建成功,返回AIStatus::StatusCode::SUCCESS。 * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下: * - AIStatus::ErrorCode::INVALID_STEP_TYPE: 无效的步骤类型。 * - AIStatus::ErrorCode::INVALID_PREPROCESS_CONFIG: 无效的预处理配置。 * - AIStatus::ErrorCode::INVALID_MODEL_CONFIG: 无效的模型配置。 * - 其他可能的错误码,请参考具体模块的初始化函数的注释。 */ int createPipelineResource(const ConfigModule cfg, std::vector pipeline); /** * @brief 删除AI模型资源 * * 该函数根据给定的配置和步骤(step),删除AI模型所占用的资源。 * * @param cfg AI模型配置参数 * @param step 模型删除的步骤编号 * @return 返回值为整数,表示删除结果: * - 如果删除成功,返回AIStatus::StatusCode::SUCCESS。 * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下: * - AIStatus::ErrorCode::INVALID_STEP_TYPE: 无效的步骤类型。 * - AIStatus::ErrorCode::RESOURCE_RELEASE_FAILURE: 资源释放失败。 * - 其他可能的错误码,请参考具体模块的释放资源函数的注释。 */ int deleteResource(const ConfigModule cfg, int step); };