请问这个代码怎么加上开始和暂停功能
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'Bodybuilding.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QPixmap
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QDir,QUrl
import A as a
import pushUp as pu
import mediapipe as mp
import math
import cv2
import numpy as np
import time
import PoseModule as pm
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(778, 794)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.layoutWidget = QtWidgets.QWidget(self.centralwidget)
self.layoutWidget.setGeometry(QtCore.QRect(10, 10, 761, 751))
self.layoutWidget.setObjectName("layoutWidget")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.layoutWidget)
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.label_2 = QtWidgets.QLabel(self.layoutWidget)
self.label_2.setText("")
self.label_2.setPixmap(QtGui.QPixmap(":/LOGO/LOGO.png"))
self.label_2.setScaledContents(True)
self.label_2.setObjectName("label_2")
self.horizontalLayout.addWidget(self.label_2)
self.label = QtWidgets.QLabel(self.layoutWidget)
self.label.setStyleSheet("font: 25pt \"华文行楷\";")
self.label.setObjectName("label")
self.horizontalLayout.addWidget(self.label)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.pushButton = QtWidgets.QPushButton(self.layoutWidget)
self.pushButton.setObjectName("pushButton")
self.horizontalLayout_2.addWidget(self.pushButton)
self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget)
self.pushButton_2.setObjectName("pushButton_2")
self.horizontalLayout_2.addWidget(self.pushButton_2)
self.pushButton_3 = QtWidgets.QPushButton(self.layoutWidget)
self.pushButton_3.setObjectName("pushButton_3")
self.horizontalLayout_2.addWidget(self.pushButton_3)
self.pushButton_4 = QtWidgets.QPushButton(self.layoutWidget)
self.pushButton_4.setObjectName("pushButton_4")
self.horizontalLayout_2.addWidget(self.pushButton_4)
self.verticalLayout.addLayout(self.horizontalLayout_2)
self.verticalLayout_3.addLayout(self.verticalLayout)
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.line = QtWidgets.QFrame(self.layoutWidget)
self.line.setFrameShape(QtWidgets.QFrame.HLine)
self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
self.line.setObjectName("line")
self.verticalLayout_2.addWidget(self.line)
self.label_3 = QtWidgets.QLabel(self.layoutWidget)
self.label_3.setText("")
self.label_3.setObjectName("label_3")
self.verticalLayout_2.addWidget(self.label_3)
self.verticalLayout_3.addLayout(self.verticalLayout_2)
self.verticalLayout_3.setStretch(0, 1)
self.verticalLayout_3.setStretch(1, 8)
# MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
# MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "健身"))
self.label.setText(_translate("MainWindow", "人体姿态识别健身辅助系统"))
self.pushButton.setText(_translate("MainWindow", "实时检测"))
self.pushButton_2.setText(_translate("MainWindow", "加载视频"))
self.pushButton_3.setText(_translate("MainWindow", "开始"))
self.pushButton_4.setText(_translate("MainWindow", "暂停"))
self.pushButton.clicked.connect(self.click1)#实时检测
self.pushButton_2.clicked.connect(self.click2)#加载视频
# self.pushButton_3.clicked.connect(self.click3)#开始
# self.pushButton_4.clicked.connect(self.click4)#暂停
# def __init__(self):
# self.timer_camera = QtCore.QTimer() # 创建定时器
def click1(self):
self.push(0)
def click2(self):
self.videoPath, _ = QFileDialog.getOpenFileName(self.centralwidget, "Open Video", "../images/", "*.mp4 *.avi *.flv")
print("Open Video: ", self.videoPath)
var1 = self.videoPath
self.push(var1)
def push(self,var1):
cap = cv2.VideoCapture(var1)
detector = pm.poseDetector()
count = 0
dir = 0
pTime = 0
while True:
success, img = cap.read()
img = cv2.resize(img, (1280, 720))
# img = cv2.imread("AiTrainer/test.jpg")
img = detector.findPose(img, False)
lmList = detector.findPosition(img, False)
# print(lmList)
if len(lmList) != 0:
# 右臂
# angle = detector.findAngle(img, 12, 14, 16)
# # 左臂
angle = detector.findAngle(img, 11, 13, 15)
per = np.interp(angle, (185, 300), (100, 0))
bar = np.interp(angle, (185, 300), (100, 650))
# print(angle, per)
# Check for the dumbbell curls
color = (255, 0, 255)
if per == 100: # 百分比
color = (0, 255, 0)
if dir == 0:
count += 0.5
dir = 1
if per == 0:
color = (0, 255, 0)
if dir == 1:
count += 0.5
dir = 0
print(count)
# Draw Bar
cv2.rectangle(img, (1100, 100), (1175, 650), color, 3)
cv2.rectangle(img, (1100, int(bar)), (1175, 650), color, cv2.FILLED)
cv2.putText(img, f'{int(per)} %', (1100, 75), cv2.FONT_HERSHEY_PLAIN, 4,
color, 4)
# 计数
cv2.rectangle(img, (0, 500), (300, 720), (0, 255, 0), cv2.FILLED) # 计数框调节
cv2.putText(img, str(int(count)), (45, 670), cv2.FONT_HERSHEY_PLAIN, 10,
(255, 0, 0), 20)
cTime = time.time()
fps = 1 / (cTime - pTime)
pTime = cTime
cv2.putText(img, str(int(fps)), (50, 100), cv2.FONT_HERSHEY_PLAIN, 5,
(255, 0, 0), 5)
# cv2.imshow("Image", img)
# 将openCV获取的帧图片格式进行转换,openCV读取帧图片的格式是BGR
QtImgBuf = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
# 把转换格式后的帧图片,实例化QImage对象
QtImg = QtGui.QImage(QtImgBuf.data, QtImgBuf.shape[1], QtImgBuf.shape[0], QtGui.QImage.Format_RGB32)
# VideoPlayer是UI界面中的label对象。先用QtImg实例和QPixmap对象,然后将其传给label
self.label_3.setPixmap(QPixmap.fromImage(QtImg))
# 使用QLabel的setScaledContents方法,是图片自适应QLabel的大小
self.label_3.setScaledContents(True)
cv2.waitKey(1)
import Bodybuilding_rc
import LOGO_rc
import test_rc
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
widget = QtWidgets.QWidget()
ui = Ui_MainWindow()
ui.setupUi(widget)
widget.show()
sys.exit(app.exec_())
要实现视频的开始和暂停功能,可以使用 QMediaPlayer
和 QMediaPlaylist
类来播放视频,并通过 QPushButton
控件来控制播放状态。
下面是一个简单的示例代码,演示了如何在 PyQT 和 OpenCV 中实现视频播放和暂停功能:
from PyQt5.QtCore import QSize, QUrl
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QLabel, QFileDialog
from PyQt5.QtMultimedia import QMediaPlayer, QMediaPlaylist, QMediaContent
import sys
import cv2
class VideoPlayer(QMainWindow):
def __init__(self):
super().__init__()
# 创建播放器和播放列表
self.player = QMediaPlayer(self)
self.playlist = QMediaPlaylist(self.player)
self.player.setPlaylist(self.playlist)
# 创建视频显示控件和控制按钮
self.label = QLabel()
self.play_button = QPushButton("Play")
self.pause_button = QPushButton("Pause")
# 设置按钮大小
button_size = QSize(100, 50)
self.play_button.setFixedSize(button_size)
self.pause_button.setFixedSize(button_size)
# 设置界面布局
layout = QVBoxLayout()
layout.addWidget(self.label)
layout.addWidget(self.play_button)
layout.addWidget(self.pause_button)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
# 连接按钮的信号槽函数
self.play_button.clicked.connect(self.playVideo)
self.pause_button.clicked.connect(self.pauseVideo)
# 显示窗口
self.setGeometry(100, 100, 640, 480)
self.show()
def playVideo(self):
# 打开文件选择对话框,获取视频文件路径
file_path, _ = QFileDialog.getOpenFileName(self, "Open Video", QDir.homePath(), "Video Files (*.mp4 *.avi)")
if file_path:
# 将视频文件添加到播放列表
self.playlist.clear()
url = QUrl.fromLocalFile(file_path)
content = QMediaContent(url)
self.playlist.addMedia(content)
# 开始播放视频
self.player.setVideoOutput(self.label)
self.player.play()
def pauseVideo(self):
# 暂停视频播放
self.player.pause()
if __name__ == "__main__":
app = QApplication(sys.argv)
player = VideoPlayer()
sys.exit(app.exec_())
注意,在此示例代码中,我们使用了 QMediaPlayer
和 QMediaPlaylist
类来播放视频,并使用 QLabel
控件来显示视频画面。在 playVideo
函数中,我们通过调用 getOpenFileName
函数打开一个文件选择对话框,让用户选择要播放的视频文件。然后,我们将所选文件添加到播放列表中,并开始播放视频。同时,我们还添加了一个 Pause
按钮,当用户点击该按钮时,我们将暂停视频播放。
你可以根据自己的需求修改和扩展这个示例代码,例如,如果需要使用 OpenCV 库来处理视频,可以在 playVideo
函数中添加相应的代码。