给我一个用线程调用bytetrack做追踪的且检测使用的是yolov5模型的C++代码
以下是一个基本的用线程调用bytetrack做追踪且检测使用的是yolov5模型的C++代码:
#include <iostream>
#include <thread>
#include <opencv2/opencv.hpp>
#include "bytetrack.h"
using namespace std;
using namespace cv;
// 定义全局变量
bool g_bExit = false;
// 定义线程函数
void ThreadFunc() {
// 加载模型
bytetrack::ByteTrackConfig config;
config.detect_model_path = "yolov5s.onnx";
config.track_model_path = "byte_track.onnx";
bytetrack::ByteTrack byteTrack(config);
// 打开摄像头
VideoCapture cap(0);
if (!cap.isOpened()) {
cout << "Failed to open camera!" << endl;
return;
}
// 循环读取摄像头数据
while (!g_bExit) {
Mat frame;
cap >> frame;
// 进行检测和追踪
vector<bytetrack::ObjectInfo> objects;
byteTrack.DetectAndTrack(frame, objects);
// 在图像中绘制检测框和追踪ID
for (const auto& obj : objects) {
rectangle(frame, obj.rect, Scalar(0, 0, 255), 2);
putText(frame, to_string(obj.track_id), obj.rect.tl(), FONT_HERSHEY_SIMPLEX, 1, Scalar(0, 255, 0), 2);
}
// 显示图像
imshow("frame", frame);
waitKey(1);
}
}
int main() {
// 创建线程
thread t(ThreadFunc);
// 等待用户按下任意键退出
waitKey(0);
// 通知线程退出
g_bExit = true;
// 等待线程退出
t.join();
return 0;
}
原文地址: https://www.cveoy.top/t/topic/bS35 著作权归作者所有。请勿转载和采集!