This repository has been archived on 2025-11-17. You can view files and clone it, but cannot push or open issues or pull requests.
bonus-yolo-sdk-sourcecode/Yolo11_ONNX/Yolo_ONNX.h

120 lines
3.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
//
#ifdef YOLO_EXPORTS
#define YOLO_API __declspec(dllexport)
#else
#define YOLO_API __declspec(dllimport)
#endif
#include <vector>
//
struct Detection
{
int class_id;
float score;
int x;
int y;
int width;
int height;
};
extern "C" {
// ========================================================================
//
// ========================================================================
/**
* @brief [新增] 创建一个检测器实例 (有状态)
* @details 此函数加载ONNX模型并初始化Session返回一个句柄。
* @param model_path ONNX模型的绝对路径
* @param input_width 模型输入宽度 (例如 640)
* @param input_height 模型输入高度 (例如 640)
* @return void* 指向检测器实例的句柄。如果失败则返回 nullptr。
*/
YOLO_API void* create_detector(
const wchar_t* model_path,
int input_width,
int input_height
);
/**
* @brief [新增] 释放由 create_detector 创建的检测器实例
* @param detector_handle 要释放的句柄
*/
YOLO_API void free_detector(void* detector_handle);
/**
* @brief [新增] 使用已加载的检测器执行检测 (线程安全)
* @details
* @param detector_handle 由 create_detector 返回的句柄
* @param image_bytes 指向图像数据(BGR格式)的指针
* @param image_width 图像宽度
* @param image_height 图像高度
* @param out_detections [输出] Detection结构体数组指针
* @param out_detections_count [输出] 检测到的物体数量
* @param conf_threshold 置信度阈值
* @param iou_threshold NMS的IOU阈值
* @return int 0表示成功
*/
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 [保留] 原始的无状态检测函数 (非线程安全)
*/
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, // ( 0.5f)
float iou_threshold, // NMS的IOU阈值 (例如 0.5f)
int input_width, // 模型输入宽度 (例如 640)
int input_height // 模型输入高度 (例如 640)
);
/**
* @brief [保留] 释放由 perform_detection* 分配的内存
*/
YOLO_API void free_memory(Detection* detections);
/**
* @brief [保留] 绘制函数
*/
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
);
/**
* @brief [保留] 释放由 draw_and_encode_image 分配的内存
*/
YOLO_API void free_image_memory(unsigned char* image_bytes);
}