qt5可能不支持我们的cuda版本,改用qt6

YOLO11+QT6+Opencv+C++训练加载模型全过程讲解_yolov11 模型转换成opencv c++模型-CSDN博客


下面是qt5版本的案例,和yolo及cuda有冲突

安装qt

切换到虚拟环境,例如pyqt,conda activate pyqt

pip install PyQt5

验证安装结果

写一个简单程序

import sys
from PyQt5.QtWidgets import QApplication, QLabelapp = QApplication([])
label = QLabel('Hello PyQt5!')
label.show()
sys.exit(app.exec_())

可以直接在虚拟环境中命令行输入:python,输入上面代码,按回车。 

弹出一个小窗口是安装成功。

复杂的

import sys
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QWidget, QPushButton, QHBoxLayout, \QMessageBox, QFileDialog
from PyQt5.QtGui import QImage, QPixmap, QIcon
import cv2
from ultralytics import YOLOclass Worker:def __init__(self):self.model = Nonedef load_model(self):model_path, _ = QFileDialog.getOpenFileName(None, "选择模型文件", "", "模型文件 (*.pt)")if model_path:self.model = YOLO(model_path)return self.model is not Nonereturn Falsedef detect_image(self, image):results = self.model.predict(image)return resultsclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("@author:笑脸惹桃花")# self.setWindowIcon(QIcon("icon.png"))self.setGeometry(300, 150, 800, 400)# 创建两个 QLabel 分别显示左右图像self.label1 = QLabel()self.label1.setAlignment(Qt.AlignCenter)self.label1.setMinimumSize(580, 450)  # 设置大小self.label1.setStyleSheet('border:3px solid #6950a1; background-color: black;')  # 添加边框并设置背景颜色为黑色self.label2 = QLabel()self.label2.setAlignment(Qt.AlignCenter)self.label2.setMinimumSize(580, 450)  # 设置大小self.label2.setStyleSheet('border:3px solid #6950a1; background-color: black;')  # 添加边框并设置背景颜色为黑色# 水平布局,用于放置左右两个 QLabellayout = QVBoxLayout()# layout.addWidget(self.label1)hbox_video = QHBoxLayout()hbox_video.addWidget(self.label1)  # 左侧显示原始图像hbox_video.addWidget(self.label2)  # 右侧显示检测后的图像layout.addLayout(hbox_video)self.worker = Worker()# 创建按钮布局hbox_buttons = QHBoxLayout()# 添加模型选择按钮self.load_model_button = QPushButton("📁模型选择")self.load_model_button.clicked.connect(self.load_model)self.load_model_button.setFixedSize(120, 30)hbox_buttons.addWidget(self.load_model_button)# 添加图片检测按钮self.image_detect_button = QPushButton("💾图片检测")self.image_detect_button.clicked.connect(self.detect_image)self.image_detect_button.setEnabled(False)self.image_detect_button.setFixedSize(120, 30)hbox_buttons.addWidget(self.image_detect_button)# 添加显示检测物体按钮self.display_objects_button = QPushButton("🔍显示检测物体")self.display_objects_button.clicked.connect(self.show_detected_objects)self.display_objects_button.setEnabled(False)self.display_objects_button.setFixedSize(120, 30)hbox_buttons.addWidget(self.display_objects_button)# 添加退出按钮self.exit_button = QPushButton("❌退出")self.exit_button.clicked.connect(self.exit_application)self.exit_button.setFixedSize(120, 30)hbox_buttons.addWidget(self.exit_button)layout.addLayout(hbox_buttons)central_widget = QWidget()central_widget.setLayout(layout)self.setCentralWidget(central_widget)self.current_results = Nonedef detect_image(self):image_path, _ = QFileDialog.getOpenFileName(None, "选择图片文件", "", "图片文件 (*.jpg *.jpeg *.png)")if image_path:image = cv2.imread(image_path)if image is not None:self.current_results = self.worker.detect_image(image)if self.current_results:annotated_image = self.current_results[0].plot()image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)  # 转换为 RGBheight1, width1, channel1 = image_rgb.shapebytesPerLine1 = 3 * width1qimage1 = QImage(image_rgb.data, width1, height1, bytesPerLine1, QImage.Format_RGB888)pixmap1 = QPixmap.fromImage(qimage1)self.label1.setPixmap(pixmap1.scaled(self.label1.size(), Qt.KeepAspectRatio))annotated_image = cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB)  # 转换为 RGBheight2, width2, channel2 = annotated_image.shapebytesPerLine2 = 3 * width2qimage2 = QImage(annotated_image.data, width2, height2, bytesPerLine2, QImage.Format_RGB888)pixmap2 = QPixmap.fromImage(qimage2)self.label2.setPixmap(pixmap2.scaled(self.label2.size(), Qt.KeepAspectRatio))def show_detected_objects(self):if self.current_results:det_info = self.current_results[0].boxes.clsobject_count = len(det_info)object_info = f"识别到的物体总个数:{object_count}\n"object_dict = {}class_names_dict = self.current_results[0].namesfor class_id in det_info:class_name = class_names_dict[int(class_id)]if class_name in object_dict:object_dict[class_name] += 1else:object_dict[class_name] = 1sorted_objects = sorted(object_dict.items(), key=lambda x: x[1], reverse=True)for obj_name, obj_count in sorted_objects:object_info += f"{obj_name}: {obj_count}\n"self.show_message_box("识别结果", object_info)else:self.show_message_box("识别结果", "未检测到物体")def show_message_box(self, title, message):msg_box = QMessageBox(self)msg_box.setWindowTitle(title)msg_box.setText(message)msg_box.exec_()def load_model(self):if self.worker.load_model():self.image_detect_button.setEnabled(True)self.display_objects_button.setEnabled(True)def exit_application(self):# 终止程序运行sys.exit()if __name__ == '__main__':app = QApplication(sys.argv)window = MainWindow()window.show()sys.exit(app.exec_())

报错:

安装opencv

conda install -c conda-forge opencv

安装训练库 

在虚拟环境安装

pip install -i https://mirrors.aliyun.com/pypi/simple/ ultralytics torch torchvision

检查yolo

yolo checks

export QT_PLUGIN_PATH=~/miniconda3/envs/yoloenv/lib/python3.13/site-packages/cv2/qt/plugins
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_PLUGIN_PATH/platforms

检查插件文件状态

  • 确认libqxcb.so文件存在于$QT_PLUGIN_PATH/platforms/目录
  • 赋予执行权限:
chmod +x ~/miniconda3/envs/yoloenv/lib/python3.13/site-packages/cv2/qt/plugins/platforms/libqxcb.so

PyQt5+Anaconda+PyCharm安装、配置和使用_anaconda pyqt5 pycharm-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL性能优化

show [session|global] status : 查看服务器状态 show global status like Com_ : 查看各种语句的执行次数 开启慢查询: 在 MySQL 配置文件(/etc/my.cnf)配置: #开启MySQL慢日志查询开关 slow_query_log1 #设置慢日志的时间为2秒,SQL语句执…

ctfshow pwn40

目录 1. 分析程序 2. 漏洞编写 3. 漏洞验证 1. 分析程序 首先检查程序相关保护,发现程序为32位且只开启了一个NX保护 checksec pwn 使用IDA进行逆向分析代码,查看漏洞触发点: 在main函数中,有一个ctfshow函数,这里…

SQL173 店铺901国庆期间的7日动销率和滞销率

SQL173 店铺901国庆期间的7日动销率和滞销率 SQL题解:店铺动销率与滞销率计算 关键:只要当天任一店铺有任何商品的销量就输出该天的结果,即使店铺901当天的动销率为0。 潜台词:​输出逻辑与店铺901的销售情况无关,只取…

PytorchLightning最佳实践基础篇

PyTorch Lightning(简称 PL)是一个建立在 PyTorch 之上的高层框架,核心目标是剥离工程代码与研究逻辑,让研究者专注于模型设计和实验思路,而非训练循环、分布式配置、日志管理等重复性工程工作。本文从基础到进阶&…

Apache Flink 实时流处理性能优化实践指南

Apache Flink 实时流处理性能优化实践指南 随着大数据和实时计算需求不断增长,Apache Flink 已经成为主流的流处理引擎。然而,在生产环境中,高并发、大吞吐量和低延迟的业务场景对 Flink 作业的性能提出了更高要求。本文将从原理层面深入解析…

ubuntu上将TempMonitor加入开机自动运行的方法

1.新建一个TempMonitor.sh文件,内容如下:#!/bin/bashcd /fjrobot/ ./TempMonitor &2.执行以下命令chmod x TempMonitor chmod x TempMonitor.sh rm -rf /etc/rc2.d/S56TempMonitor rm -rf /etc/init.d/TempMonitor cp /fjrobot/TempMonitor.sh /etc/…

速卖通自养号测评技术解析:IP、浏览器与风控规避的实战方案

一、速卖通的“春天”来了,卖家如何抓住机会?2025年的夏天,速卖通的风头正劲。从沙特市场跃升为第二大电商平台,到8月大促返佣力度升级,平台对优质商家的扶持政策越来越清晰。但与此同时,竞争也愈发激烈——…

adb: CreateProcessW failed: 系统找不到指定的文件

具体错误 adb devices * daemon not running; starting now at tcp:5037 adb: CreateProcessW failed: 系统找不到指定的文件。 (2) * failed to start daemon adb.exe: failed to check server version: cannot connect to daemon 下载最新的platform-tools-windows 下载最新…

Centos安装HAProxy搭建Mysql高可用集群负载均衡

接上文MYSQL高可用集群搭建–docker https://blog.csdn.net/weixin_43914685/article/details/149647589?spm1001.2014.3001.5501 连接到你搭建的 Percona XtraDB Cluster (PXC) 数据库集群,实现高可用性和负载均衡,建议使用一个中间件来管理这些连接。…

Sql server开挂的OPENJSON

以前一直用sql server2008,自从升级成sql server2019后,用OPENJSON的感觉像开挂,想想以前表作为参数传输时的痛苦,不堪回首。一》不堪回首 为了执行效率,很多时候希望将表作为参数传给数据库的存储过程。存储过程支持自…

【数据结构】队列和栈练习

1.用队列实现栈 225. 用队列实现栈 - 力扣(LeetCode) typedef int QDatatype; typedef struct QueueNode {struct QueueNode *next;QDatatype data; }QNode;typedef struct Queue {QNode* head;QNode* tail;QDatatype size; }Que;typedef struct {Que…

LabVIEW二维码实时识别

​LabVIEW通过机器视觉技术,集成适配硬件构建二维码实时识别系统。通过图像采集、预处理、定位及识别全流程自动化,解决复杂环境下二维码识别效率低、准确率不足问题,满足工业产线追溯、物流分拣等实时识别需求。应用场景适用于工业产线追溯&…

微服务-springcloud-springboot-Skywalking详解(下载安装)

一、SkyWalking核心介绍 1. 什么是SkyWalking? Apache SkyWalking是一款国人主导开发的开源APM(应用性能管理)系统,2015年由吴晟创建,2017年进入Apache孵化器,2019年毕业成为Apache顶级项目。它通过分布式…

Elasticsearch 字段值过长导致索引报错问题排查与解决经验总结

在最近使用 Elasticsearch 的过程中,我遇到了一个 字段值过长导致索引失败 的问题。经过排查和多次尝试,最终通过设置字段 "index": false 方式解决。本文将从问题现象、排查过程、问题分析、解决方案和建议等方面,详细记录这次踩坑…

使用idea 将一个git分支的部分记录合并到git另一个分支

场景: 有多个版本分支,需要将其中一个分支的某一两次提交合并到指定分支上 eg: 将v1.0.0分支中指定提交记录 合并到 v1.0.1分支中 操作: 步骤一 idea切换项目分支到v1.0.1(需要合并到哪个分支就先站到哪个分支上) 步骤二 在ide…

基于深度学习的图像分类:使用ShuffleNet实现高效分类

前言 图像分类是计算机视觉领域中的一个基础任务,其目标是将输入的图像分配到预定义的类别中。近年来,深度学习技术,尤其是卷积神经网络(CNN),在图像分类任务中取得了显著的进展。ShuffleNet是一种轻量级的…

OpenGL里相机的运动控制

相机的核心构造一个是glm::lookAt函数,一个是glm::perspective函数,本文相机的一切运动都在于如何构建相应的参数传入上述两个函数里。glm::mat4 glm::lookAt(glm::vec3 const &eye,//相机所在位置glm::vec3 const &center,//要凝视的点glm::vec…

java设计模式 -【策略模式】

策略模式定义 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。它将算法封装成独立的类,使得它们可以相互替换,而不影响客户端代码。 核心组成 Context(上下文)&…

项目重新发布更新缓存问题,Nginx清除缓存更新网页

server {listen 80;server_name your.domain.com; # 替换为你的域名root /usr/share/nginx/html; # 替换为你的项目根目录# 规则1:HTML 文件 - 永不缓存# 这是最关键的一步,确保浏览器总是获取最新的入口文件。location /index.html {add_header Cache-…

系统架构师:系统安全与分析-思维导图

系统安全与分析的定义​​系统安全与分析是系统架构师在系统全生命周期中贯穿的核心职责,其本质是通过​​识别、评估、防控安全风险,并基于数据与威胁情报进行动态分析​​,构建从技术到管理的多层次防护体系,确保系统的保密性&a…