#ifndef _SSNN_H #define _SSNN_H #ifdef __cplusplus extern "C" { #endif // ================================================================================================== // Structure Definition // ================================================================================================== typedef struct { // == Model-dependent settings == // int target_height; int target_width; // == General settings == // float prob_thresh; float nms_thresh; int num_threads; int max_detection; int init_network_index; }network_config; typedef struct { short int x_min, y_min; // top-left corner short int x_max, y_max; // bottom-right corner short int class_idx; float prob; }BBox; typedef struct { network_config *cfg; void *net; BBox *boxes; // Only for detector float *probs; // Only for classifier float *feature; // Only for feature extractor int num_detection; }NetworkHandle; // ================================================================================================== // Enumerations // ================================================================================================== enum E_NETWORK_TYPE { CLASSIFIER, DETECTOR, FEATURE }; // ================================================================================================== // API // ================================================================================================== int Init_Network(NetworkHandle **phandle, network_config *cfg); void Release_Network(NetworkHandle **phandle); int Forward_Network(NetworkHandle *handle, unsigned char *data, int height, int width, int color); int Get_Detection(NetworkHandle *handle, int img_height, int img_width); // Only for detector int Get_Prob(NetworkHandle *handle); // Only for classifier int Get_Feature(NetworkHandle *handle); // Only for feature extractor int Change_Model(NetworkHandle *handle, int network_index); int Get_Num_Classes(NetworkHandle *handle); int Get_Network_Type(NetworkHandle *handle); int Get_Size_Alignment(NetworkHandle *handle); int Get_Feature_Size(NetworkHandle *handle); // -- For automatically adjusting target size based on area constraints -- // int Set_Input_Min_Max_Area(NetworkHandle *handle, int min_area, int max_area); // -- For advanced usage -- // int Forward_Network_Stride(NetworkHandle *handle, unsigned char *data, int height, int width, int color, int stride); #ifdef __cplusplus } #endif #endif