diff --git a/dependency/nnsdk/include/nn_sdk.h b/dependency/nnsdk/include/nn_sdk.h new file mode 100755 index 0000000..0f350a3 --- /dev/null +++ b/dependency/nnsdk/include/nn_sdk.h @@ -0,0 +1,1103 @@ +/* + * Copyright (C) 2024–2025 Amlogic, Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _NN_SDK_H +#define _NN_SDK_H + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*============================================================= + Macro Definitions +==============================================================*/ +#define AML_NN_SDK_VERSION "2.8.5" + +#define MAX_NAME_LENGTH 64 +#define INPUT_MAX_NUM 64 +#define OUTPUT_MAX_NUM 64 +#define INPUT_CHANNEL 3 +#define MAX_DETECT_NUM 230 +#define SUPPORT_NET_NUM 60 +#define ADDRESS_MAX_NUM 64 +#define MAX_TENSOR_NUM_DIMS 6 +#define INPUT_META_NUM 1 +#define DELEGATE_MAX_INPUT_NUM 128 +#define DELEGATE_MAX_OUTPUT_NUM 128 + +/*===================================================== +the common type for sdk api +======================================================*/ +typedef enum { + AML_IN_PICTURE = 0, + AML_IN_VIDEO = 1, + AML_IN_CAMERA = 2 +} amlnn_input_mode_t; + +typedef enum _amlnn_model_ { + CAFFE = 0, + TENSORFLOW, + TENSORFLOWLITE, + DARKNET, + ONNX, + KERAS, + PYTORCH, + ADLA_LOADABLE, + MEDEL_MAX +} amlnn_model_type; + +/*================================================================================= +load adla type +==================================================================================*/ +typedef enum _amlnn_nbg_type_ { + NN_NBG_FILE = 0, + NN_NBG_MEMORY = 1, + NN_RUNTIME_FILE = 2, + NN_RUNTIME_MEMORY = 3, + NN_ADLA_FILE = 4, + NN_ADLA_MEMORY = 5 +} amlnn_nbg_type; + +typedef enum _amlnn_input_ { + RGB24_RAW_DATA = 0, + TENSOR_RAW_DATA, + QTENSOR_RAW_DATA, + BINARY_RAW_DATA, + INPUT_DMA_DATA, + INPUT_DMA_SECURE_DATA, + NV12_RAW_DATA, + RAW_DATA_MAX +} amlnn_input_type; + +typedef enum _nn_buffer_format_e +{ + /*! \brief A float type of buffer data */ + NN_BUFFER_FORMAT_FP32 = 0, + /*! \brief A half float type of buffer data */ + NN_BUFFER_FORMAT_FP16 = 1, + /*! \brief A 8 bit unsigned integer type of buffer data */ + NN_BUFFER_FORMAT_UINT8 = 2, + /*! \brief A 8 bit signed integer type of buffer data */ + NN_BUFFER_FORMAT_INT8 = 3, + /*! \brief A 16 bit unsigned integer type of buffer data */ + NN_BUFFER_FORMAT_UINT16 = 4, + /*! \brief A 16 signed integer type of buffer data */ + NN_BUFFER_FORMAT_INT16 = 5, + /*! \brief A 32 signed integer type of buffer data */ + NN_BUFFER_FORMAT_INT32 = 8, + /*! \brief A 64 signed integer type of buffer data */ + NN_BUFFER_FORMAT_INT64 = 10, + /*! \brief A bool type of buffer data */ + NN_BUFFER_FORMAT_BOOL = 11, +} nn_buffer_format_e; + +typedef enum _nn_buffer_quantize_format_e +{ + /*! \brief Not quantized format */ + NN_BUFFER_QUANTIZE_NONE = 0, + /*! \brief The data is quantized with dynamic fixed point */ + NN_BUFFER_QUANTIZE_DYNAMIC_FIXED_POINT = 1, + /*! \brief The data is quantized with TF asymmetric format */ + NN_BUFFER_QUANTIZE_TF_ASYMM = 2 +} nn_buffer_quantize_format_e; + +typedef enum { + IMAGE_CLASSIFY = 0, + OBJECT_DETECT = 1, /// object_detection + FACE_DETECTION = 2, /// + FACE_LANDMARK_5 = 3, /// landmark 5 points + FACE_LANDMARK_68 = 4, ///< Face Landmark (68 KeyPoints) + FACE_RECOGNIZE = 5, ///< Face Recognition + FACE_COMPARISON = 6, ///< Face compare,whether same person + FACE_AGE = 7, ///< Face age + FACE_GENDER = 8, ///< Face gender + FACE_EMOTION = 9, ///< Face emotion + BODY_POSE = 10, ///< Body Pose + FINGER_POSE = 11, ///< Finger Landmark(21 KeyPoint) + HEAD_DETECTION = 12, ///< Head Detection + CARPLATE_DETECTION = 13, ///< Car Plate Detection + CARPLATE_RECOG = 14, ///< Car Plate Recognition + TEXT_DETECTION = 15, ///< text region detect + IMAGE_SR = 16, ///< image SR + IMAGE_SEGMENTATION = 17, ///< image segment, based on icnet + PERSON_DETECT = 18, ///< person detect + YOLOFACE_V2 = 19, + YOLO_V2 = 20, + YOLO_V3 = 21, + FACE_NET = 22, + FACE_RECOG_U = 23, + FACE_RFB_DETECTION = 24, + AML_PERSON_DETECT = 25, + AML_BODY_POSE = 26, + mobilenetv2 = 30, + centerface = 31, + ALPD = 32, + ALPR = 33, + face_blur_v2 = 34, + face_recog_small = 35, + face_reid_v2 = 36, + landmark2d_106 = 37, + new_car = 38, + old_person = 39, + CUSTOM_NETWORK = 99, ///< custom network, for user development + MODEL_MAX = 100 ///< max model number +} aml_module_t; + +typedef enum { + AML_OUTDATA_FLOAT32 = 0, + AML_OUTDATA_RAW = 1, + AML_OUTDATA_DMA = 2, + AML_OUTDATA_DMA_SECURE = 3 +} aml_output_format_t; + +typedef enum { + AML_NO_PERF = 0, + AML_PERF_INFERENCE = 1, + AML_PERF_OUTPUT_GET = 2, + AML_PERF_OUTPUT_SET = 3, + AML_PERF_RESET_TRANSFORMER = 4, + AML_PERF_BREAK_TRANSFORMER = 5 +} aml_perf_mode_t; + +typedef enum { + AML_PROFILE_NONE = 0, + AML_PROFILE_PERFORMANCE = 1, + AML_PROFILE_BANDWIDTH = 2, + AML_PROFILE_MEMORY = 3, + AML_PERLAYER_RUNTIME = 4, + AML_PERLAYER_BANDWIDTH = 5, + AML_PERLAYER_OUTPUT = 6, + AML_PERLAYER_INPUT = 7 +} aml_profile_type_t; + +typedef enum { + AML_PERFORMANCE_MODE = 1, + AML_POWER_SAVE_MODE = 2, + AML_MINIMUM_POWER_MODE = 3 +} aml_policy_type_t; + +typedef enum { + AML_IO_VIRTUAL = 0, + AML_IO_PHYS = 1, + AML_IO_VIRTUAL_SECURE = 2, + AML_IO_PHYS_SECURE = 3 +} aml_io_format_t; + +typedef enum { + AML_OUTPUT_ORDER_DEFAULT = 0, //output format: nhwc for adla, nchw for galcore + AML_OUTPUT_ORDER_NHWC = 1, //output format: nhwc + AML_OUTPUT_ORDER_NCHW = 2, //output format: nchw +} aml_output_order_t; + +typedef struct __aml_kvcache_dynamic_val_t +{ + int32_t current_mask; +} aml_kvcache_dynamic_val_t; + +typedef struct __kvCacheDynamicInfo_t +{ + bool update_kvcache_info_flag; + aml_kvcache_dynamic_val_t kvcache_dynamic_val; +} kvCacheDynamicInfo_t; + +typedef struct __aml_transformer_model_info +{ + uint64_t eos_token; + int32_t max_sequence_length; +} aml_transformer_model_info; + +typedef struct __aml_invoke_info_t +{ + int typeSize; + int invoke_type; // 1: invoke_no_wait, 2: waitwithid + int32_t timeout; //ms + int64_t invoke_id; + kvCacheDynamicInfo_t kvcache_dynamic_info; +} aml_invoke_info_t; + +typedef struct __amlnn_module_out_data_t +{ + int typeSize; + aml_module_t mdType; + aml_perf_mode_t perfMode; + aml_output_format_t format; + aml_output_order_t order; + aml_invoke_info_t invoke; +} aml_output_config_t; + +typedef struct _nn_buffer_create_params_t +{ + unsigned int num_of_dims; /*!< \brief The number of dimensions specified in *sizes*/ + unsigned int sizes[4]; /*!< \brief The pointer to an array of dimension */ + nn_buffer_format_e data_format; /*!< \brief Data format for the tensor, see \ref nn_buffer_format_e */ + nn_buffer_quantize_format_e quant_format; /*!< \brief Quantized format see \ref nn_buffer_quantize_format_e . */ + union { + struct { + unsigned char fixed_point_pos; /*!< \brief Specifies the fixed point position when the input element type is int16, if 0 calculations are performed in integer math */ + } dfp; + + struct { + float scale; /*!< \brief Scale value for the quantized value */ + unsigned int zeroPoint; /*!< \brief A 32 bit integer, in range [0, 255] */ + } affine; + } + quant_data; /*