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, "警告", "无法

最低0.47元/天 解锁文章
3903

被折叠的 条评论
为什么被折叠?



