QT+Yolov8 推理部署,ONNX模型 ,实例分割+目标检测

QT+Yolov8 实例分割、目标检测推理。QT源码。

程序准备/版本:QT creator QT6.8 编译器:MSVC2022 opencv:4.7 onnxruntime:1.16.0 cpu版本

QT+yolo推理部署

程序部分源码:

#include "aitoolinterface.h"
#include "ui_aitoolinterface.h"
#include <QDebug>
#include <QDateTime>
#include <QFileInfo>

AIToolInterface::AIToolInterface(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::AIToolInterface)
    , m_yoloModel(nullptr)
    , m_modelLoaded(false)
    , m_yoloModel2(nullptr)
    , m_modelLoaded2(false)
{
   
   
    ui->setupUi(this);

    // 初始化状态
    ui->label_status->setText("状态: 未加载模型");
    ui->label_status->setStyleSheet("color: red;");

    // 禁用测试按钮,直到模型加载
    ui->pushButton_test->setEnabled(false);
    ui->pushButton_test_2->setEnabled(false);
    logMessage("AI分割检测工具已启动");
}

AIToolInterface::~AIToolInterface()
{
   
   
    if (m_yoloModel) {
   
   
        delete m_yoloModel;
        m_yoloModel = nullptr;
    }
    if (m_yoloModel2) {
   
   
        delete m_yoloModel2;
        m_yoloModel2 = nullptr;
    }
    delete ui;
}

void AIToolInterface::on_pushButton_browseModel_clicked()
{
   
   
    QString modelPath = QFileDialog::getOpenFileName(this,
                                                     "选择ONNX模型文件",
                                                     "./Bin/x64/Models/",
                                                     "ONNX Files (*.onnx);;All Files (*)");

    if (!modelPath.isEmpty()) {
   
   
        ui->lineEdit_modelPath->setText(modelPath);
        logMessage("已选择模型文件: " + modelPath);
    }
}

void AIToolInterface::on_pushButton_loadModel_clicked()
{
   
   
    QString modelPath = ui->lineEdit_modelPath->text();
    if (modelPath.isEmpty()) {
   
   
        QMessageBox::warning(this, "警告", "请先选择模型文件路径");
        return;
    }

    // 检查文件是否存在
    QFileInfo fileInfo(modelPath);
    if (!fileInfo.exists()) {
   
   
        QMessageBox::critical(this, "错误", "模型文件不存在: " + modelPath);
        return;
    }

    try {
   
   
        // 创建YOLO模型实例
        if (m_yoloModel) {
   
   
            delete m_yoloModel;
        }

        m_yoloModel = new Yolov8SegOnnx();

        // 加载模型
        logMessage("正在加载模型...");
        bool success = m_yoloModel->ReadModel(modelPath.toStdString(), false, 0, false);

        if (success) {
   
   
            m_modelLoaded = true;
            ui->label_status->setText("状态: 模型已加载");
            ui->label_status->setStyleSheet("color: green;");
            ui->pushButton_test->setEnabled(true);
            logMessage("模型加载成功!");
        } else {
   
   
            m_modelLoaded = false;
            ui->label_status->setText("状态: 模型加载失败");
            ui->label_status->setStyleSheet("color: red;");
            ui->pushButton_test->setEnabled(false);
            logMessage("模型加载失败!");
            delete m_yoloModel;
            m_yoloModel = nullptr;
        }
    } catch (const std::exception& e) {
   
   
        m_modelLoaded = false;
        ui->label_status->setText("状态: 模型加载异常");
        ui->label_status->setStyleSheet("color: red;");
        ui->pushButton_test->setEnabled(false);
        logMessage("模型加载异常: " + QString(e.what()));
        if (m_yoloModel) {
   
   
            delete m_yoloModel;
            m_yoloModel = nullptr;
        }
    }
}

void AIToolInterface::on_pushButton_browseImage_clicked()
{
   
   
    QString imagePath = QFileDialog::getOpenFileName(this,
                                                     "选择图片文件",
                                                     "./Bin/x64/Pic/",
                                                     "Image Files (*.jpg *.jpeg *.png *.bmp);;All Files (*)");

    if (!imagePath.isEmpty()) {
   
   
        ui->lineEdit_imagePath->setText(imagePath);
        m_currentImagePath = imagePath;

        // 加载并显示图片
        m_currentImage = cv::imread(imagePath.toStdString());
        if (m_currentImage.empty()) {
   
   
            QMessageBox::warning(this, "警告", "无法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值