2025-11-10 16:40:23 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
|
|
2025-11-10 17:58:05 +08:00
|
|
|
|
//
|
2025-11-10 16:40:23 +08:00
|
|
|
|
#ifdef YOLO_EXPORTS
|
|
|
|
|
|
#define YOLO_API __declspec(dllexport)
|
|
|
|
|
|
#else
|
|
|
|
|
|
#define YOLO_API __declspec(dllimport)
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
2025-11-10 17:58:05 +08:00
|
|
|
|
//
|
2025-11-10 16:40:23 +08:00
|
|
|
|
struct Detection
|
|
|
|
|
|
{
|
|
|
|
|
|
int class_id;
|
|
|
|
|
|
float score;
|
|
|
|
|
|
int x;
|
|
|
|
|
|
int y;
|
|
|
|
|
|
int width;
|
|
|
|
|
|
int height;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
extern "C" {
|
2025-11-10 17:58:05 +08:00
|
|
|
|
|
|
|
|
|
|
// ========================================================================
|
|
|
|
|
|
//
|
|
|
|
|
|
// ========================================================================
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] <EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD> (<EFBFBD><EFBFBD>״̬)
|
|
|
|
|
|
* @details <EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ONNXģ<EFBFBD>Ͳ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>Session<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param model_path ONNXģ<EFBFBD>͵ľ<EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param input_width ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 640)
|
|
|
|
|
|
* @param input_height ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD> (<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 640)
|
|
|
|
|
|
* @return void* ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> nullptr<EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
YOLO_API void* create_detector(
|
|
|
|
|
|
const wchar_t* model_path,
|
|
|
|
|
|
int input_width,
|
|
|
|
|
|
int input_height
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] <EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD> create_detector <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param detector_handle Ҫ<EFBFBD>ͷŵľ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
YOLO_API void free_detector(void* detector_handle);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] ʹ<EFBFBD><EFBFBD><EFBFBD>Ѽ<EFBFBD><EFBFBD>صļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>м<EFBFBD><EFBFBD><EFBFBD> (<EFBFBD>̰߳<EFBFBD>ȫ)
|
|
|
|
|
|
* @details
|
|
|
|
|
|
* @param detector_handle <EFBFBD><EFBFBD> create_detector <EFBFBD><EFBFBD><EFBFBD>صľ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param image_bytes ָ<EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(BGR<EFBFBD><EFBFBD>ʽ)<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param image_width ͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param image_height ͼ<EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
|
|
|
|
|
|
* @param out_detections [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] Detection<EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param out_detections_count [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param conf_threshold <EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
* @param iou_threshold NMS<EFBFBD><EFBFBD>IOU<EFBFBD><EFBFBD>ֵ
|
|
|
|
|
|
* @return int 0<EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
YOLO_API int perform_detection_on_session(
|
|
|
|
|
|
void* detector_handle,
|
|
|
|
|
|
unsigned char* image_bytes,
|
|
|
|
|
|
int image_width,
|
|
|
|
|
|
int image_height,
|
|
|
|
|
|
Detection** out_detections,
|
|
|
|
|
|
int* out_detections_count,
|
|
|
|
|
|
float conf_threshold,
|
|
|
|
|
|
float iou_threshold
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ========================================================================
|
|
|
|
|
|
//
|
|
|
|
|
|
// ========================================================================
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] ԭʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD>⺯<EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD>̰߳<EFBFBD>ȫ)
|
|
|
|
|
|
*/
|
2025-11-10 16:40:23 +08:00
|
|
|
|
YOLO_API int perform_detection(
|
|
|
|
|
|
const wchar_t* model_path,
|
|
|
|
|
|
unsigned char* image_bytes,
|
|
|
|
|
|
int image_width,
|
|
|
|
|
|
int image_height,
|
|
|
|
|
|
Detection** out_detections,
|
|
|
|
|
|
int* out_detections_count,
|
|
|
|
|
|
const char** class_names,
|
|
|
|
|
|
int class_names_count,
|
|
|
|
|
|
float conf_threshold, // <20><><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>ֵ (<28><><EFBFBD><EFBFBD> 0.5f)
|
|
|
|
|
|
float iou_threshold, // NMS<4D><53>IOU<4F><55>ֵ (<28><><EFBFBD><EFBFBD> 0.5f)
|
|
|
|
|
|
int input_width, // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> 640)
|
|
|
|
|
|
int input_height // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD> (<28><><EFBFBD><EFBFBD> 640)
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2025-11-10 17:58:05 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] <EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD> perform_detection* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
|
|
|
|
|
*/
|
2025-11-10 16:40:23 +08:00
|
|
|
|
YOLO_API void free_memory(Detection* detections);
|
|
|
|
|
|
|
2025-11-10 17:58:05 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] <EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
2025-11-10 16:40:23 +08:00
|
|
|
|
YOLO_API void draw_and_encode_image(
|
|
|
|
|
|
unsigned char* image_bytes,
|
|
|
|
|
|
int image_width,
|
|
|
|
|
|
int image_height,
|
|
|
|
|
|
const Detection* detections,
|
|
|
|
|
|
int detections_count,
|
|
|
|
|
|
const char** class_names,
|
|
|
|
|
|
int class_names_count,
|
|
|
|
|
|
unsigned char** out_image_bytes,
|
|
|
|
|
|
int* out_image_size
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2025-11-10 17:58:05 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>] <EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD> draw_and_encode_image <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
|
|
|
|
|
*/
|
2025-11-10 16:40:23 +08:00
|
|
|
|
YOLO_API void free_image_memory(unsigned char* image_bytes);
|
|
|
|
|
|
}
|