程序示例精选
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";}// 一次性显示到 UIfor (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();// 检查数据库中是否存在nameEdQString 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";}
}
运行结果
三、在线协助:
如需安装运行环境或远程调试,见文章底部个人 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