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

程序示例精选
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";
    }
}



运行结果

在这里插入图片描述

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/157628.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分布式事务seata的使用

分布式事务介绍 在微服务架构中&#xff0c;完成某一个业务功能可能需要横跨多个服务&#xff0c;操作多个数据库。这就涉及到到了分布式事务&#xff0c;需要操作的资源位于多个资源服务器上&#xff0c;而应用需要保证对于多个资源服务器的数据操作&#xff0c;要么全部成功&…

37 关于 undo 日志

前言 undo 和 redo 是在 mysql 中 事务, 或者 异常恢复 的场景下面 经常会看到的两个概念 这里 来看一下 undo, undo 主要是用于 事务回滚 的场景下面 测试表结构如下 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(128) DEFAULT NUL…

【容器化】Kubernetes(k8s)

文章目录 概述Docker 的管理痛点什么是 K8s云架构 & 云原生 架构核心组件K8s 的服务注册与发现组件调用流程部署单机版部署主从版本Operator来源拓展阅读 概述 Docker 虽好用&#xff0c;但面对强大的集群&#xff0c;成千上万的容器&#xff0c;突然感觉不香了。 这时候就…

介绍一款 SaaS 服务器监控工具: CloudStats

导读CloudStats 是一个简单而强大的服务器监控和网络监控工具。使用 CloudStats&#xff0c;你可以监控来自世界上任何地方的服务器和网络的所有指标。 最棒的是你不需要有任何特殊的技术技能 - CloudStats 很容易安装在任何数据中心的任何服务器上。 CloudStats 允许你使用任…

一文了解ChatGPT Plus如何完成论文写作和AI绘图

2023年我们进入了AI2.0时代。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车&#xff0c;就有可能被淘汰在这个数字化时代&#xff0c;如何能高效地处理文本、文献查阅、PPT…

大势所趋!机器视觉替换传统人工,深眸科技以工业AI视觉赋能生产

如今&#xff0c;在工业4.0的浪潮下&#xff0c;人工智能技术凭借着优化生产流程、实现个性化定制、保障产品安全、促进产业变革等优势&#xff0c;逐渐成为制造业数智化转型的“利器”之一&#xff0c;其在工业生产中的广泛应用使传统制造业焕发生机。 机器视觉作为人工智能快…

vue + antd 动态增加表单并进行表单校验

<template><a-modalv-model:visible="visible":title="formData.id ? 编辑渠道 : 添加渠道":width="850":mask-closable="false":destroy-on-close="true"@ok="onSubmit"@cancel="onClose"&g…

Android SmartTable根据int状态格式化文字及颜色

private void initData() {List<UserInfo> list new ArrayList<>();list.add(new UserInfo("一年级", "李同学", 6, 1, 120, 1100, 450, 0));list.add(new UserInfo("一年级", "张同学", 6, 2, 120, 1100, 450, 1));list…

高转化率的软文都有哪些要素?媒介盒子分享

信息爆炸的时代下用户注意力成为稀缺资源&#xff0c;网络上的各个平台充斥着信息流广告的痕迹&#xff0c;在海量信息内容中&#xff0c;企业想要吸引用户注意力&#xff0c;提高转化率&#xff0c;就需要不断更新文案创意&#xff0c;今天媒介盒子就来分享&#xff1a;高转化…

关于漏洞怎么挖/SRC刷分技巧

Google谷歌爬虫WebRobot自动化SQL检测 这里先用之前的谷歌爬虫爬取足够多的url链接 我这里爬了差不多600条 再打开WebRobot工具,这个会发给大家 它的UI是这样的&#xff0c;里面集成了许多其它小工具&#xff0c;都可以使用 点击注入检测 右键导入URL文件即可 这四个选项…

SOLIDWORKS Electrical工程属性配置与图框

导读 很多工程师都是直接使用现有的图框&#xff0c;但是现有图框会遇到一些问题&#xff0c;自己想显示的内容不知道怎么设置出来&#xff0c;或者是图纸显示的内容太繁杂&#xff0c;行列号不符合自己的习惯。这些问题都是关于图框模板的设计。 一、关于工程属性设计的问题…

井盖位移监测,智能井盖智慧监测方式

在推动城市向智能化和高效化方向发展的过程中&#xff0c;科学技术发挥着至关重要的作用。智能井盖传感器作为科学技术进步的产物&#xff0c;正逐渐在城市管理过程之中崭露头角。这些看似不起眼的设备&#xff0c;虽然隐藏在井盖下方不被人们看到&#xff0c;但实实在在为人民…

html书本翻页效果,浪漫表白日记本(附源码)

文章目录 1.设计来源1.1 书本正面1.2 界面1-21.3 界面3-41.4 界面5-61.5 界面7-81.6 界面9-101.7 界面11-121.8 书本结尾 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/1…

基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制(11.16)

电路板原理图 触摸脚选择&#xff1a;PB1、PB2、PB3、PB4、PB5 这里我感觉触摸脚PB5应该是PB0。 程序结构 程序逻辑 其实就是在HS16F3211_TkLib.c中存在与触摸相关的函数&#xff0c;然后在 每个按键封装一个专门对这个按键按下或者松开不同的状态执行不同的操作。 在main.c里…

Michael.W基于Foundry精读Openzeppelin第38期——AccessControlEnumerable.sol

Michael.W基于Foundry精读Openzeppelin第38期——AccessControlEnumerable.sol 0. 版本0.1 AccessControlEnumerable.sol 1. 目标合约2. 代码精读2.1 supportsInterface(bytes4 interfaceId)2.2 _grantRole(bytes32 role, address account)2.3 _revokeRole(bytes32 role, addre…

ERP智能管理系统:智能化的未来之路

ERP智能管理系统&#xff1a;智能化的未来之路 科技飞速发展&#xff0c;人工智能(AI)和大数据等先进技术的应用正在改变着企业的运营模式。其中&#xff0c;ERP智能管理系统在帮助企业实现智能化运营、提高效率、降低成本等方面发挥着越来越重要的作用。本文将为您详细介绍ERP…

有什么好用的后勤管理软件?学校后勤服务要怎么提升满意度?

后勤服务是院校管理中的重要一环&#xff0c;直接影响到师生的工作、学习和生活质量。师生作为学校的核心用户&#xff0c;对后勤服务的质量和满意度有着深刻的体验和感受。因此&#xff0c;他们的评价对于提升学校品牌形象、提高服务质量以及改进学校管理具有至关重要的作用。…

《rPPG》——(1)PyTorch——Windows环境配置

《rPPG》——&#xff08;1&#xff09;PyTorch——Windows环境配置 如何查看电脑是否已安装Python环境以及Python版本 anaconda对应python3.8的版本号是多少? 截止到我的知识截止日期&#xff08;2022年1月&#xff09;&#xff0c;Anaconda支持Python 3.8的版本号是Anacond…

易点易动固定资产管理系统场景应用二:集成本地OA/BPM系统

在企业的日常运营中&#xff0c;固定资产管理是一项重要的任务。为了实现高效的工作流程和准确的审批流程&#xff0c;易点易动固定资产管理系统提供了与本地OA/BPM系统的集成功能。本文将重点介绍易点易动固定资产管理系统在集成本地OA/BPM系统方面的应用场景&#xff0c;以帮…

html实现图片裁剪处理(附源码)

文章目录 1.设计来源1.1 主界面1.2 裁剪界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134455169 html实现图片裁剪处理(附源码)&#xff0c;支持图片放大缩小&#…