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

news2024/11/18 10:31:16

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Hello Go】Go语言工程管理

工程管理 工作区工作区介绍GOPATH设置 包自定义包main包main函数和init函数导入包点操作别名操作_操作 测试案例GOPATH配置go install使用 在我们实际的工作中 直接运用到编译器进行编译链接的场景少之又少 这是因为 在工程中不会只有一个源文件 并且源文件之间也有着相互依赖…

java学习part05

43-流程控制-使用Scanner类从键盘获取数据_哔哩哔哩_bilibili 1.接收输入 步骤 例子 2.生成随机数 3.switch-case 4.for 5.while

IDEA插件下载到本地

IDEA插件下载到本地 官网下载【点击跳转】

基于DE10-Standard Cyclone V SoC FPGA学习---开发板简介

基于DE10-Standard Cyclone V SoC FPGA学习---开发板简介 简介产品规格基于 ARM 的 HPS配置与调试存储器件通讯连接头显示器音频视频输入模数转换器开关、按钮、指示器传感器电源 DE10-Standard 开发板系统框图Connect HTG 组件配置设计资源其他资源 简介 开发板资料 见 DE10-…

rv1126-rv1109-openssh

这是一个工具&#xff0c;可以通过ssh远程登录来操作&#xff0c;非常逆天&#xff01; 于是rv1109代码自身自带有openssh 所以只需要打开config即可 diff --git a/buildroot/configs/rockchip_rv1126_rv1109_spi_nand_defconfig b/buildroot/configs/rockchip_rv1126_rv1109…

Pytorch plt.scatter()函数用法

一.scatter&#xff08;&#xff09;函数的定义 matplotlib.pyplot.scatter(x, y, sNone, cNone, markerNone, cmapNone, normNone, vminNone, vmaxNone, alphaNone, linewidthsNone, vertsNone, edgecolorsNone, *, dataNone, **kwargs) 特征值作用x&#xff0c;y绘制散点图…

MAC电脑连接外接显示屏,颜色显示有问题,又粉、紫色蒙版,问题处理(1)

问题描述 买了一个显示器&#xff0c;想给mac做分屏使用&#xff0c;结果连上之后发现&#xff0c;整个屏幕像是被蒙上了一层紫色的蒙版。 就像下面展示的一样&#xff1a; 解决 将显示器颜色空间改为RGB颜色空间即可。 打开显示器菜单&#xff0c;找到颜色空间选项&#…

(六)什么是Vite——热更新时vite、webpack做了什么

vite分享ppt&#xff0c;感兴趣的可以下载&#xff1a; ​​​​​​​Vite分享、原理介绍ppt 什么是vite系列目录&#xff1a; &#xff08;一&#xff09;什么是Vite——vite介绍与使用-CSDN博客 &#xff08;二&#xff09;什么是Vite——Vite 和 Webpack 区别&#xff0…

2023数维杯数学建模C题完整版本

已经完成全部版本&#xff0c;获取请查看文末下方名片 摘要 随着人工智能在多个领域的快速发展&#xff0c;其在文本生成上的应用引起了广泛关注。本研究聚焦于辨识人工智能&#xff08;AI&#xff09;生成文本的基本规则&#xff0c;并探究AI文本的检测及其与人类文本的区分…

Boolean源码解剖学

原创/朱季谦 有天突发其想&#xff0c;想看一下Boolean底层都做了些什么&#xff0c;故而去看了一番Boolean的源码&#xff0c;基于一些思考的基础上&#xff0c;输出了这篇文章。 一.类继承 Boolean的源码类定义部分如下&#xff1a; 1 public final class Boolean implemen…

Cascade-MVSNet论文笔记

Cascade-MVSNet论文笔记 摘要1 立体匹配&#xff08;Stereo Matching&#xff09;2 多视图立体视觉&#xff08;Multi-View Stereo&#xff09;3 立体视觉和立体视觉的高分辨率输出4 代价体表达方式&#xff08;Cost volume Formulation&#xff09;4.1 多视图立体视觉的3D代价…

农户建档管理系统的设计与实现-计算机毕业设计源码20835

摘 要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设农户建档管理系统。 本…

keepalived离线安装

上传离线安装包 将离线安装包拖动到服务器上 进入到离线安装包路径&#xff0c;执行下面脚本进行安装 rpm -Uvh --force --nodeps *.rpm

免费!IDEA插件推荐:Apipost-Helper

今天给大家推荐一款IDEA插件&#xff1a;Apipost-Helper-2.0&#xff0c;写完代码IDEA内一键生成API文档&#xff0c;无需安装、打开任何其他软件&#xff1b;写完代码IDEA内一键调试&#xff0c;无需安装、打开任何其他软件&#xff1b;生成API目录树&#xff0c;双击即可快速…

pythom导出mysql指定binlog文件

要求 要求本地有py环境和全局环境变量 先测试直接执行binlog命令执行命令 Windows 本地直接执行命令 # E:\output>E:\phpstudy_pro\Extensions\MySQL5.7.26\bin\mysqlbinlog binglog文件地址 # --no-defaults 不限制编码 # -h mysql链接地址 # -u mysql 链接名称 # -p m…

数据库学习 02-01 关系数据模型详细学习(数据库模式中的一种)

关系型数据模型的相关概念介绍&#xff1a; 01.关系&#xff08;Relation&#xff09; 一个关系对应通常说的一张表 02.元组&#xff08;Tuple&#xff09; 表中的一行即为一个元组&#xff0c;也就是一个对象 03.属性&#xff08;Attribute&#xff09; 表中的一列即为一个属性…

C语言日记——调试篇

一、调试调试的基本步骤 发现程序错误的存在 以隔离、消除等方式对错误进行定位 确定错误产生的原因 提出纠正错误的解决办法 对程序错误予以改正&#xff0c;重新测试 二、Debug和Release Debug通常称为调试版本&#xff0c;它包含调试信息&#xff0c;并且不作任何优化…

Android开发中集合之Collection和Collections集合

概要 提示&#xff1a;Android开发中有很多时候使用到集合&#xff0c;今天我们就来详细的了解一下Android开发中集合的种类 Collection接口 //返回这个集合是否为空 boolean isEmpty(); //添加一个单例到集合中 boolean add(E e); //将指定集合中的所有元素都添加到当前…

本周Github有趣项目:draw-a-ui等

有趣的项目、工具和库 gpt-crawler 抓取网站以生成知识文件&#xff0c;从而从 URL 创建您自己的自定义 GPT。 需要步骤&#xff1a; 配置运行爬虫、 将您的数据上传到 OpenAI&#xff1a;使用此选项通过 UI 访问您生成的知识&#xff0c;您可以轻松与他人共享 创建自定义助…

nginx学习(1)

一、下载安装NGINX&#xff1a; 先安装gcc-c编译器 yum install gcc-c yum install -y openssl openssl-devel&#xff08;1&#xff09;下载pcre-8.3.7.tar.gz 直接访问&#xff1a;http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz&#xff0c;就…