赞
踩
程序示例精选
VS+Qt+C++ Yolov8物体识别窗体程序onnx模型
如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!
这篇博客针对《VS+Qt+C++ Yolov8物体识别窗体程序onnx模型》编写代码,代码整洁,规则,易读。 学习与应用推荐首选。
一、所需工具软件
二、使用步骤
1. 主要代码
2. 运行结果
三、在线协助
1. VS2019, Qt
2. C++,Yolov8
#include<math.h> #include "yolov8_onnx.h" #include<time.h> 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"; } }
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。