/** * Copyright (c) Hisilicon Technologies Co., Ltd.. 2020-2020. All rights reserved. * */ #ifndef __AI_CONFIG_H__ #define __AI_CONFIG_H__ #include #include #include #include #ifndef UNUSED_PARAMETER // to remove compile warning for unused parameter #define UNUSED_PARAMETER(x) (void)(x) #endif // 定义相关宏,对相关函数符号进行屏蔽 #ifndef HLAI_AP_VISIBILITY #if !(defined _WIN32) && !(defined __CYGWIN__) #define HLAI_AP_VISIBILITY __attribute__ ((visibility ("default"))) #else #define HLAI_AP_VISIBILITY #endif #endif #define HLAI_API_EXPORT HLAI_AP_VISIBILITY #define AI_DEFAULT_PRIORITY 2 #define AI_MAX_PRIORITY 3 #define AI_IMAGE_DEFAULT_WIDTH 3936 #define AI_IMAGE_DEFAULT_HEIGHT 2976 #define AI_IMAGE_MAX_WIDTH 3936 #define AI_IMAGE_MAX_HEIGHT 2976 #define AI_SPEECH_DEFAULT_SAMPLERATE 16 #define AI_SPEECH_DEFAULT_CHANNEL_NUM 2 #define AI_MAX_COMPUTING_DEV_NUM 4 #define RUN_MODEL_TIMEOUT 60000 // ms #define AI_MODEL_MNG_ID_BASE (100) #define AI_MODEL_MNG_ID_NUM (2012) #define AI_SPEECH_QUICKCALL_PATH_GRAMMAR ("/data/vendor/hlai/speech/quickcall/contact.fst") #define AI_SPEECH_QUICKCALL_PATH_VOCAB ("/data/vendor/hlai/speech/quickcall/contact.txt") #define AI_SPEECH_QUICKCALL_PATH_W2P ("/data/vendor/hlai/speech/quickcall/contact.w2p") #define AI_SPEECH_QUICKCALL_PATH_CFG ("/data/vendor/hlai/speech/quickcall/contact.cfg") namespace ai { using ::std::string; using ::std::vector; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiDataType; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiFramework; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiInputFormat; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiPixelFormat; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiImageFormat; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiModelType; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiOutputFormat; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiOutputParam; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiOutputType; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiSpeechType; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiSpeechFormat; using ::vendor::huanglong::hardware::hwhlai::V1_0::AiDevPerf; enum { AI_OK = 0, AI_EPERM, /***************** 1. Permission denied ***************************/ AI_ENOENT, /***************** 2. No such file or directory **********************/ AI_ESRCH, /***************** 3. No such process ****************************/ AI_EINTR, /***************** 4. Interrupted system call ***********************/ AI_EIO, /***************** 5. Input/output error **************************/ AI_ENXIO, /***************** 6. Device not configured ************************/ AI_E2BIG, /***************** 7. Argument list too long ************************/ AI_ENOEXEC, /***************** 8. Exec format error ****************************/ AI_EBADF, /***************** 9. Bad file descriptor ****************************/ AI_ECHILD, /***************** 10. No child processes ***************************/ AI_EAGAIN, /***************** 11. was EAGAIN ********************************/ AI_ENOMEM, /***************** 12. Cannot allocate memory ***********************/ AI_EACCES, /***************** 13. Bad address ********************************/ AI_EFAULT, /***************** 14. Block device required **************************/ AI_EBUSY, /***************** 15. Device busy *********************************/ AI_EEXIST, /***************** 16. File exists ***********************************/ AI_EXDEV, /***************** 17. Cross-device link *****************************/ AI_ENODEV, /***************** 18. Operation not supported by device ***************/ AI_ENOTDIR, /***************** 19. Not a directory *******************************/ AI_EISDIR, /***************** 20. Is a directory ********************************/ AI_EINVAL, /***************** 21. Invalid argument *****************************/ AI_ENFILE, /***************** 22. Too many open files in system ******************/ AI_EMFILE, /***************** 23. Too many open files ***************************/ AI_ENOTTY, /***************** 24. Inappropriate ioctl for device ********************/ AI_EFBIG, /***************** 25. File too large *********************************/ AI_ENOSPC, /***************** 26. No space left on device *************************/ AI_ESPIPE, /***************** 27. Illegal seek **********************************/ AI_EROFS, /***************** 28. Read-only file system **************************/ AI_EMLINK, /***************** 29. Too many links *******************************/ AI_EPIPE, /***************** 30. Broken pipe **********************************/ AI_ETIMEOUT, /***************** 31. timeout **********************************/ AI_EINITCHECK, /*****************32. graphicBuffer initCheck error****************/ AI_ECONVERT, /*****************33. convert error****************/ AI_ENOMODEL, /********************34.no model**********************/ AI_ECROP, /*************************35. crop failed**************************/ AI_ENSPT, /*************************36. not support**************************/ AI_MODEL_TENSOR_SHAPE_NO_MATCH = 500, }; typedef enum { MODEL_MANAGER_OK = 0, MODEL_NAME_LEN_ERROR = 1, MODEL_DIR_ERROR = 2, MODEL_SECRET_KEY_ERROR = 3, MODEL_PARA_SECRET_KEY_ERROR = 4, FRAMEWORK_TYPE_ERROR = 5, MODEL_TYPE_ERROR = 6, IPU_FREQUENCY_ERROR = 7, MODEL_NUM_ERROR = 8, MODEL_SIZE_ERROR = 9, TIMEOUT_ERROR = 10, INPUT_DATA_SHAPE_ERROR = 11, OUTPUT_DATA_SHAPE_ERROR = 12, INPUT_DATA_NUM_ERROR = 13, OUTPUT_DATA_NUM_ERROR = 14, MODEL_MANAGER_TOO_MANY_ERROR = 15, MDOEL_BUILD_TYPE_INCONSISTENT = 16, MDOEL_FRAMEWORK_TYPE_INCONSISTENT = 17, MODEL_NAME_DUPLICATE_ERROR = 18, HLAI_SERVER_CONNECT_ERROR = 19, HLAI_SERVER_CONNECT_IRPT = 20, DLOPEN_ERROR = 21, DLSYM_ERROR = 22, BUILD_MODEL_ERROR = 23, MODEL_MULTI_SEG_ERROR = 24, INPUT_PARA_ERROR = 25, MODEL_TENSOR_SHAPE_NO_MATCH = 500, EXPIRATION_FUCNTION = 999, INTERNAL_ERROR = 1000, } MODEL_MANAGER_ERRCODE; typedef enum { LOW_PRI = 1, NORMAL_PRI, HIGH_PRI, } AiPriority; typedef enum { AI_IMAGE_ENGINE = 0, AI_SPEECH_ENGINE, AI_MODELMNGR_ENGINE, AI_INVALID_ENGINE = 0xff } AiCategory; typedef enum { SPARSE_DISABLE = 0, SPARSE_ENABLE, } AiModelSparse; typedef enum { MODE_1BIT = 0, MODE_8BIT, MODE_16BIT, MODE_32BIT, MODE_UNKNOW } AiDataWidth; typedef enum { LAYER_MODE = 0, FUSION_MODE, INVALID_MODE } AiBuildMode; typedef enum { IPU = 1, GPU, DSP, CPU, IP_INVALID = 0xff } AiComputingDev; struct AiComputingRes { int devNum; AiComputingDev devIp[AI_MAX_COMPUTING_DEV_NUM]; }; struct AiVectorFormat { uint32_t vectorNum; }; struct AiAddrFormat { uint32_t inAddr; uint32_t inSize; uint32_t outAddr; uint32_t outSize; }; typedef struct AiModelConfig { // model config uint32_t id; AiDevPerf devPerf; string modelName; AiModelType modelType; AiModelSparse modelSparse = SPARSE_DISABLE; AiDataType modelDataType; AiDataWidth modelDataWidth = MODE_UNKNOW; uint32_t modelSize; AiInputFormat modelInFmt; AiOutputParam modelOutFmt; int32_t ModelRatio; int32_t currentRatio; bool isFromFile = true; // from file string modelNetPath; bool isModelNetEncrypted = false; string modelNetKey; string modelNetParamPath; bool isModelNetParamEncrypted = false; string modelNetParamKey; int32_t maxUsedMemory; // from memory void *modelBuffer = nullptr; uint32_t modelBufSize = 0; string modelMeanPath; string modelResultPath; // execute config AiBuildMode buildMode = INVALID_MODE; } AiModelConfig; typedef struct AiConfig { // category config string name; bool isValid = false; AiCategory category = AI_INVALID_ENGINE; uint32_t priority; AiFramework frameworkType; AiModelType modelType; // model config vector modelConfig; AiComputingRes cmpRes; bool subMeanEnable = true; // TFLite indicator for tensorflow framework bool isTFLite = false; } AiConfig; typedef struct ModelIOStruct { uint32_t n; uint32_t c; uint32_t h; uint32_t w; } ModelIOStruct; enum AI_IMAGE_FORMAT : int32_t { AI_IMG_FMT_NV21 = 0, // YUV420: yyyy....vuvuvu... AI_IMG_FMT_NV12 = 1, // YUV420: yyyy....uvuvuv.... AI_IMG_FMT_YUV420 = 2, // YUV420: yyyy....uuuu....vvvv.... AI_IMG_FMT_Y8 = 3, // Y: yyyy, for uv cut AI_IMG_FMT_YUV422 = 4, // YUV422:UYVY AI_IMG_FMT_RAW10_COMPACT = 5, AI_IMG_FMT_RAW16 = 6, // no compress AI_IMG_FMT_Y16 = 7, AI_IMG_FMT_RGBA_8888 = 8, AI_IMG_FMT_RGBX_8888 = 9, AI_IMG_FMT_RGB_888 = 10, AI_IMG_FMT_BGR_888 = 11, AI_IMG_FMT_UNKOWN, }; }; #endif // __AI_CONFIG_H__