delphi Pascal yolov5 deepsort 目标检测 目标跟踪,支持onnxruntime、dnn、openvino和tensorrt推理yolov5,使用c++封装成dll,delphi调用封装好的dll,实现目标检测和跟踪

最近在折腾一个挺有意思的项目,用Delphi搞目标检测和跟踪。核心思路是把YOLOv5和DeepSORT用C++封装成DLL,再用Pascal老将Delphi调起来。整个过程踩了不少坑,给大家唠唠真实开发中的关键点。

技术栈选择

YOLOv5的推理部分支持了onnxruntime、OpenCV DNN、OpenVINO和TensorRT四种引擎,这个设计主要是为了应对不同硬件环境。比如在Intel CPU上用OpenVINO能榨干最后一点性能,而TensorRT在N卡上的加速效果是真的香。

C++封装核心

DLL接口设计直接决定Delphi调用是否顺畅。这里用extern "C"强制使用C风格导出,防止名称粉碎问题:

extern "C" __declspec(dllexport)
int __stdcall InitDetector(const char* engine_type, 
                          const char* model_path, 
                          int gpu_id) {
    // 引擎类型判断逻辑
    if(strcmp(engine_type, "openvino") == 0) {
        detector = new YOLOv5_OpenVINO();
    }
    // 其他引擎初始化...
}

结构体传参要注意内存对齐,Delphi那边得用packed record严格对应:

#pragma pack(push, 1)
struct DetectionResult {
    int track_id;
    float confidence;
    int x1, y1, x2, y2;
};
#pragma pack(pop)

Delphi调用实战

接口函数声明要带好调用约定,字符串用PAnsiChar对应C的char*:

type
  TDetectionResult = packed record
    TrackID: Integer;
    Confidence: Single;
    X1, Y1, X2, Y2: Integer;
  end;

function InitDetector(engine_type, model_path: PAnsiChar;
                     gpu_id: Integer): Integer; stdcall; external 'YoloDLL.dll';

图像数据传递用了指针直接传递,避免多次复制:

var
  imgPtr: Pointer;
begin
  imgPtr := Bitmap.ScanLine[Bitmap.Height-1]; // 获取图像底层数据
  ProcessFrame(imgPtr, Bitmap.Width, Bitmap.Height);
end;

跟踪逻辑处理

DeepSORT的集成主要在C++侧完成,每次检测完成后立即进行跟踪:

vector<DetectionResult> ProcessFrame(unsigned char* image_data, 
                                    int width, int height) {
    auto detections = detector->detect(image_data);
    tracker->update(detections); // DeepSORT跟踪
    // 转换数据结构返回给Delphi
}

性能优化坑位

  1. 图像色彩空间转换:发现Delphi的TBitmap默认是BGR格式,省去了转换步骤
  2. 内存池管理:预分配DetectionResult数组避免频繁new/delete
  3. 异步处理:单独开推理线程防止界面卡顿

实测效果

在i7-12700H + RTX3060笔记本上,TensorRT引擎能跑到76FPS,OpenVINO也有52FPS。跟踪部分用DeepSORT的cosine距离度量,对遮挡处理比纯Kalman滤波稳得多。

完整项目里还加了跟踪轨迹绘制、越界报警这些实用功能。这种C++和Delphi的混编方案,既利用了现代AI框架的性能,又保留了Delphi在工业上位机开发中的优势。老树开新花,真香!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐