VS+Qt+C++ Yolov8物体识别窗体程序onnx模型

程序示例精选
VS+Qt+C++ Yolov8物体识别窗体程序onnx模型
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对《VS+Qt+C++ Yolov8物体识别窗体程序onnx模型》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


运行结果

VS+Qt+C++ Yolov8物体识别窗体程序onnx模型_第1张图片


文章目录

一、所需工具软件
二、使用步骤
       1. 主要代码
       2. 运行结果
三、在线协助

一、所需工具软件

       1. VS2019, Qt
       2. C++,Yolov8

二、使用步骤

代码如下(示例):

#include
#include "yolov8_onnx.h"
#include
using namespace dnn;

template<typename _Tp>

int yolov8_onnx(_Tp& cls, Mat& img, string& model_path)
{
    //cout << "test00" << endl;

    if (cls.ReadModel(model_path, false)) {
        cout << "read net ok!" << endl;
    }
    else {
        return -1;
    }

    vector<Scalar> color;
    srand(time(0));
    for (int i = 0; i < 80; i++) {
        int b = rand() % 256;
        int g = rand() % 256;
        int r = rand() % 256;
        //color.push_back(Scalar(b, g, r));
        color.push_back(Scalar(255, 0, 255));
    }
    if (cls.OnnxDetect(img, result)) {
        //cout << "test5" << endl;
        DrawPred(img,cls._className, color);
    }
    else {
        cout << "Detect Failed!" << endl;
    }
    //system("pause");
    //return 0;
}

mainWindow::mainWindow(QWidget *parent)
	: QMainWindow(parent)
{
	ui.setupUi(this);
    QObject::connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(onCamera()));
    QObject::connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(onVideo()));

static void sleep(int msec)
{
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while (QTime::currentTime() < dieTime)
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
void mainWindow::onCamera()
{
    std::cout << "test_ " << std::endl;
    cout << "aa" << endl;

    VideoCapture capture(0);
    while (1) {
        Mat frame;
        capture >> frame;
        if (frame.empty()) break;
        ui.label->clear();
        cvtColor(frame, frame, COLOR_RGB2BGR);
        QImage img = QImage((const unsigned char*)(frame.data), 
        ui.label->setPixmap(QPixmap::fromImage(img));
        ui.label->update();
    }
}
void mainWindow::onVideo()
{
    std::cout << "test_ " << std::endl;
    cout << "aa" << endl;
    QString filePath = QFileDialog::getOpenFileName(this, tr("Open"));
    if (filePath.isEmpty()) {
        qDebug() << "Select nothing";
        return;
    }
    QTextCodec* codec = QTextCodec::codecForName("UTF-8");
    std::string imagePath = codec->fromUnicode(filePath).data();
    std::cout << imagePath << std::endl;

    VideoCapture capture(imagePath);
    capture.open(imagePath);
    if (!capture.isOpened())
    {
        cout << "could not load video..." << endl;
    }
    while (1) {
        Mat frame;
        capture >> frame;
        if (frame.empty()) break;
        ui.label->clear();
        cvtColor(frame, frame, COLOR_RGB2BGR);
        QImage img = QImage((const unsigned char*)(frame.data), 
        ui.label->setPixmap(QPixmap::fromImage(img));
        ui.label->update();
        sleep(30); 
    }
}
void mainWindow::onRecogn()
{
    //string img_path = "./data/image/aa.png";
    //string detect_model_path = "yolov8n.onnx";
    //Mat img = imread(img_path);

    //Yolov8Onnx task_detect_onnx;
    //yolov8_onnx(task_detect_onnx, img, detect_model_path);  //onnxruntime detect

    //return 0;
    Mat img;
    img = capture.open("aa.mp4");

    QStringList nameList;
    QStringList countList;

    while (capture.read(img))
  
        //cout << "test" << endl;
        Yolov8Onnx task_detect_onnx;
        yolov8_onnx(task_detect_onnx, img, detect_model_path);  //onnxruntime detect

        //imshow("output", img);
        //waitKey(10);

        extern Mat imgT;
        //cout << "imgT" << imgT << endl;
        ui.label->clear();
        cvtColor(imgT, imgT, COLOR_RGB2BGR);
        QImage img = QImage((const unsigned char*)(imgT.data), imgT.cols, imgT.rows, imgT.cols * imgT.channels(), QImage::Format_RGB888);
        img = img.scaled(600, 500, Qt::KeepAspectRatio); 
        ui.label->setPixmap(QPixmap::fromImage(img));
        ui.label->update();
        QSqlDatabase db;
        db = QSqlDatabase::addDatabase("QSQLITE");
        db.setDatabaseName("information.db");
        if (!db.open()) {
            qDebug() << "";
            //qDebug() << "open error" << db.lastError();
        }

        QSqlQuery query;
        QString sqlSelect = "SELECT name, count FROM informationTable";

        if (query.exec(sqlSelect)) {
            while (query.next()) {
                QString name = query.value(0).toString();
                QString count = query.value(1).toString();
                nameList.append(name);
                countList.append(count);
            }

        }
        else {
            qDebug() << "Query failed";
        }
        // 一次性显示到 UI
        for (int i = 0; i < nameList.size(); i++) {
            ui.textEdit->append(nameList[i] + ": " + countList[i]);
        }
        db.close();
        sleep(30);  
    //nameList.clear();
    //countList.clear();
    capture.release();
}
void mainWindow::testT() {

    QString nameEd = QString::fromStdString("person");


    //将信息写入数据库
    QSqlDatabase db;
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("information.db");

    // 2. 打开数据库
    if (!db.open()) {
        qDebug() << "";
        //qDebug() << "open error" << db.lastError();
    }

    QSqlQuery query;

    //QString sqlInert = QString("insert into informationTable(name,count)" "values('%1', '%2')").arg(nameEd).arg(countEd);
    //if (!query.exec(sqlInert))
    //	qDebug() << "insert data error" << db.lastError();
    // 检查数据库中是否存在nameEd
    QString checkExistQuery = QString("SELECT COUNT(*) FROM informationTable WHERE name = '%1'").arg(nameEd);

    QSqlQuery existQuery(checkExistQuery);
    if (existQuery.exec() && existQuery.next()) {
        int count = existQuery.value(0).toInt();
        if (count > 0) {
            qDebug() << "count" << count;
            // 如果存在,则执行更新操作
        }
        else {
            qDebug() << "no exists";
            // 如果不存在,则执行插入操作
        }
    }
    else {
        qDebug() << "Check existence query failed";
    }
}



运行结果

VS+Qt+C++ Yolov8物体识别窗体程序onnx模型_第2张图片

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!

1)远程安装运行环境,代码调试
2)Visual Studio, Qt, C++, Python编程语言入门指导
3)界面美化
4)软件制作
5)云服务器申请
6)网站制作

当前文章连接:https://blog.csdn.net/alicema1111/article/details/132666851
个人博客主页:https://blog.csdn.net/alicema1111?type=blog
博主所有文章点这里:https://blog.csdn.net/alicema1111?type=blog

博主推荐:
Python人脸识别考勤打卡系统:
https://blog.csdn.net/alicema1111/article/details/133434445
Python果树水果识别:https://blog.csdn.net/alicema1111/article/details/130862842
Python+Yolov8+Deepsort入口人流量统计:https://blog.csdn.net/alicema1111/article/details/130454430
Python+Qt人脸识别门禁管理系统:https://blog.csdn.net/alicema1111/article/details/130353433
Python+Qt指纹录入识别考勤系统:https://blog.csdn.net/alicema1111/article/details/129338432
Python Yolov5火焰烟雾识别源码分享:https://blog.csdn.net/alicema1111/article/details/128420453
Python+Yolov8路面桥梁墙体裂缝识别:https://blog.csdn.net/alicema1111/article/details/133434445

你可能感兴趣的:(C++,qt,c++,YOLO,开发语言)