国内开源网站,电商网站运营流程,房产网签合同平台,wordpress标签小工具本教程使用的是Pyside6
1、安装PySide6模块
pip install pyside6
安装完成之后#xff0c;会有一个designer.exe可执行文件#xff0c;打开之后#xff0c;我们可以通过拖拉拽的方式来布局我们的界面。
designer.exe文件位置#xff0c;一般位于当前虚拟环境下面的路径…
本教程使用的是Pyside6
1、安装PySide6模块
pip install pyside6
安装完成之后会有一个designer.exe可执行文件打开之后我们可以通过拖拉拽的方式来布局我们的界面。
designer.exe文件位置一般位于当前虚拟环境下面的路径。
虚拟环境---Lib---site-packages--PySide6---designer.exe文件 建议发送桌面快捷方式便于下次查找起来更方便 2、界面布局
主要使用的控件是
QTabWiget 容器布局
Qlabel 图片和视频显示区域
QPushButton 按钮
Line 画线 使用背景色主要是好区分哪一个组件功能完成之后可以再做调整
3、图片检测功能
需要用到的技术就是插槽和信号
将ui文件转换为python文件这是第一步
将生成好ui文件导入到项目中执行以下命令。 pyside6-uic project_ui.ui -o main.py
基础UI界面封装好的大家可以使用第二步这里面调用上面生成好的main.py模块注意命名和引入第四行代码
# -*- coding: utf-8 -*-
# Auther : qiutiejun
# Date : 2024/6/2 13:35
# File : main_project_ui.py
# 主界面基础ui
import torch
import sys
from PySide6.QtWidgets import QApplication,QMainWindow,QFileDialog
from main import Ui_MainWindow
from PySide6.QtGui import QPixmap,QImageclass MainWindow(QMainWindow,Ui_MainWindow):def __init__(self):super(MainWindow, self).__init__()self.setupUi(self)if __name__ __main__:app QApplication(sys.argv)window MainWindow()window.show()app.exec()
运行次模块你会看到以下界面 需要注意的几个地方
1、控价摆放好之后一定要给控件进行重命名操作
2、对于显示图片的lable来说需要勾选自适应的标识。 编码
可参考官网
https://docs.ultralytics.com/modes/predict/#__tabbed_1_2
ps:需要大家有一点QT编码知识点也不要求太多。只需要掌握插槽和信号这两个概念就行。
简单来讲就是信号就是当有什么事件发生时会触发的。比如常见的点击事件。插槽就是信号接收器当某一个信号发出后我们需要做什么的应对处理。
代码如下
1、信号处理(点击选择图片是触发)
self.select_img.clicked.connect(self.detect_img_methods)
我是把图片按钮和视频按钮的信号放置在一个方法中在初始化的过程中就会调用 def btn_slot(self):print(按钮触发事件)self.select_img.clicked.connect(self.detect_img_methods)self.select_video.clicked.connect(self.detect_video_methods)
接下来就是处理信号信息的插槽自己也是通过方法来处理的。
第一种方式 # 检测图片按钮的功能def detect_img_methods(self):print(图片检测)files QFileDialog.getOpenFileName(dirui_information,filter*.jpg)print(路径,files)if files[0]:# 显示图片self.old_img.setPixmap(QPixmap(files[0]))# 获取文件名file_info QFileInfo(files[0])# 获取文件名file_name_only file_info.fileName()change_img self.make_detect_image_name(files[0],file_name_only)self.detect_img.setPixmap(QPixmap(change_img)) def make_detect_image_name(self,filepath,filename):results self.model.predict(sourcefilepath, showFalse, saveTrue)curr_path os.getcwd()result_path for result in results:result_path result.save_dirreturn os.path.join(curr_path, result_path, filename)
思路分析
1、原始图片显示
QFileDialog.getOpenFileName() 方法可以获取文件的路径返回值是一个元组我们可以获取第一个元素就是flies[0],通过setPixmap将原始图片显示处理。
2、识别图片结果显示
思路分析。通过调用model.predict()方法每次运行成功之后就会在runs/detect-----目录下面
predict存放识别结果的图片。 有了这个思路之后我们只需要获取对应的路径就能拿到识别图片。然后同样的方式显示处理。这里通过result.save_dir获取识别的结果路径通过os来拼接完成的路径最终图片就会显示处理。结果如下
样式大家下去可以自行调整 弊端需要准确到找到路径位置
第二种实现思路
我们可以通过调用model(frame)来训练模型会生成识别图像的向量数据然后我们通过该方法将对应的向量转换为图像也可以做到以下效果。
核心代码如下 4、下一张图片功能
思路分析
获取当前目录的所有文件图片列表格式获取选取到的图片对应的下标下标1往后移动一个下标-1往前移动对应的就是下一张或者上一张需要增加最小值和最大的值判断。
代码如下下
初始化的代码 # 批量识别图片的下标self.current_image_index -1# 存放所有的图片self.all_images[] def next_img_methods(self):if self.current_image_index -1:print(请先选择图片)QMessageBox.critical(None,error,请先选择图片)returnprint(下一张图片)# 识别结果complox_path os.path.join(self.root_path,self.all_images[self.current_image_index1])# 显示self.old_img.setPixmap(QPixmap(complox_path))results self.model(complox_path)[0].plot()# for result in results:# print(result.orig_img)change_img conver2Qimage(results)self.detect_img.setPixmap(QPixmap.fromImage(change_img))# 增加1self.current_image_index 1print(最大下标,self.current_image_index,len(self.all_images))# 最大值if self.current_image_index len(self.all_images)-1:self.current_image_index len(self.all_images)-2
5、上一张图片功能
思路分析主要是想办法知道当前显示图片的下标上一页减少下标上一页增加下标。注意控制边界就行代码和下一张图片功能类似。 6、视频检测功能
思路分析其实视频的每一帧就是一张图片所以其实跟检测图片的功能类似可以使用opencv解析视频获取每一张图片然后就跟图片的检测逻辑差不多。
思路二视频解析如果放在主线程中会影响其他业务的操作可以考虑放到线程中去检测视频。
放入主要代码作为参考 # 开启视频处理独立线程Thread(targetself.video_detail,daemonTrue).start()
# 视频处理流程def video_detail(self):while True:if not self.frameToAnalyze:time.sleep(0.01)continueframe self.frameToAnalyze.pop(0)result self.model(frame)[0].plot()qimage conver2Qimage(result)if self.stop_flagFalse:self.detect_video.setPixmap(QPixmap.fromImage(qimage))# 写入表格数据self.detect_video_jianche_result(frame)# 获取检测结果self.show_table_data()# 休眠0.3秒time.sleep(0.3) def display_origin_video_image(self,frame):frame cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)qImage conver2Qimage(frame)# 往显示视频的Label里 显示QImageself.old_video.setPixmap(QPixmap.fromImage(qImage))# 如果当前没有处理任务if not self.frameToAnalyze:self.frameToAnalyze.append(frame)
7、效果展示
程序没什么难度对于视频检测来说不仅是实现功能还需要考虑性能的问题 补充知识
修改TabWidget的选项样式字体大小放大选项 参考代码 self.tabWidget.setStyleSheet(QTabBar::tab { font-size: 12px;width:100px;height:50px;})