问题描述
这里的模型可以使用ai在线训练平台的吗?之前用的demo里的模型是正确的。后来我用了平台训出来的,没有识别到东西,却一直能执行这个if(!yolo_results.empty())
{
printf("YOLO识别到目标 数量:%zu\n", yolo_results.size());
}语句,是因为勘智用的不是yolo11吗?还是别的原因
复现步骤
int yolo_video_inference(GeneralConfig &general_config, YoloConfig &yolo_config) {
FrameSize image_wh = {general_config.AI_FRAME_WIDTH, general_config.AI_FRAME_HEIGHT};
std::vector labels = readLabelsFromTxt(yolo_config.labels_txt_filepath);
DumpRes dump_res;
std::vector yolo_results;
cv::Mat draw_frame(general_config.OSD_HEIGHT, general_config.OSD_WIDTH, CV_8UC4, cv::Scalar(0, 0, 0, 0));
dims_t in_shape { 1, general_config.AI_FRAME_CHANNEL, general_config.AI_FRAME_HEIGHT, general_config.AI_FRAME_WIDTH };
runtime_tensor input_tensor;
PipeLine pl(general_config, yolo_config.debug_mode);
pl.Create();
Yolo11 yolo11(yolo_config.task_type, yolo_config.task_mode, yolo_config.kmodel_path,
yolo_config.conf_thres, yolo_config.nms_thres, yolo_config.mask_thres,
labels, image_wh, yolo_config.debug_mode);
static int frame_counter = 0;
while(!isp_stop) {
ScopedTiming st("total time", 1);
pl.GetFrame(dump_res);
input_tensor = host_runtime_tensor::create(typecode_t::dt_uint8, in_shape,
{ (gsl::byte *)dump_res.virt_addr, compute_size(in_shape) },
false, hrt::pool_shared, dump_res.phy_addr).expect("cannot create input tensor");
hrt::sync(input_tensor, sync_op_t::sync_write_back, true).expect("sync write_back failed");
// ======== 🔴 只改这里:NV21 → BGR ========
uint8_t* ptr = (uint8_t*)dump_res.virt_addr;
int w = general_config.AI_FRAME_WIDTH;
int h = general_config.AI_FRAME_HEIGHT;
cv::Mat r(h, w, CV_8UC1, ptr + 0 * w * h);
cv::Mat g(h, w, CV_8UC1, ptr + 1 * w * h);
cv::Mat b(h, w, CV_8UC1, ptr + 2 * w * h);
std::vector ch = {b, g, r}; // OpenCV 是 BGR
cv::Mat camera_frame;
cv::merge(ch, camera_frame);
// ========================================
yolo11.pre_process(input_tensor);
yolo11.inference();
yolo11.post_process(yolo_results);
//模型标志位?????
if(!yolo_results.empty())
{
printf("YOLO识别到目标 数量:%zu\n", yolo_results.size());
}
draw_frame.setTo(cv::Scalar(0, 0, 0, 0));
yolo11.draw_results(draw_frame, yolo_results);
// 将处理后的图像放入缓冲区供二值化线程使用
{
std::lock_guard<std::mutex> lock(buffer_mutex);
if (image_buffer.size() >= MAX_BUFFER_SIZE) {
image_buffer.pop();
printf("缓冲区满,丢弃一帧\n");
}
ImageFrame img_frame;
img_frame.frame = camera_frame.clone();
img_frame.frame_id = frame_counter++;
img_frame.timestamp = std::chrono::system_clock::now();
image_buffer.push(img_frame);
// std::string filename = "binary_frame_" + std::to_string(frames_binarized) + ".jpg";
// cv::imwrite(filename, camera_frame);
// if (img_frame.frame_id<350) {
// std::string filename = "zhui" + std::to_string(frames_binarized) + ".jpg";
// cv::imwrite(filename, camera_frame);
// }
}
buffer_cv.notify_one();
pl.InsertFrame(draw_frame.data);
pl.ReleaseFrame(dump_res);
frames_processed++;
if (frames_processed % 100 == 0) {
printf("已处理帧数: %d, 缓冲区大小: %zu\n",
frames_processed.load(), image_buffer.size());
}
}
pl.Destroy();
return 0;
}这个是我主代码,这里的模型可以使用ai在线训练平台的吗?我用了平台训出来的,没有识别到东西,却一直能执行这个if(!yolo_results.empty())
{
printf("YOLO识别到目标 数量:%zu\n", yolo_results.size());
}语句,勘智用的是yolo11吗?