我正在嘗試制作一個視頻播放器,它對視頻播放器操作(播放、暫停、快進等)使用手勢識別
對于視頻播放器,我使用 PyQt5,對于手勢識別,我使用MediaPipe。 這是我的程式的樣子
現在這是我用于運行相機并在 QMainWindow 中發出它的代碼:
class Camera(QThread):
image_update = pyqtSignal(QImage)
video_capture = cv2.VideoCapture(0)
action = ""
def run(self):
self.active_thread = True
video_capture = cv2.VideoCapture(0)
tracker = htm.HandTrackingModule()
recognize = grm.GestureRecognitionModule()
while self.active_thread:
ret, frame = video_capture.read()
h, w, c = frame.shape
if ret:
image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
landmarks = tracker.detect_hand(image, True)
fingers = get_position(landmarks)
action = recognize.do_gesture(position=fingers, landmarks=landmarks, img=image)
convert_to_qt_format = QImage(image.data, image.shape[1], image.shape[0], QImage.Format_RGB888)
pic = convert_to_qt_format.scaled(640, 480, Qt.KeepAspectRatio)
self.image_update.emit(pic)
GestureRecognitionModule 的 do_gesture 方法,根據手勢識別(暫停、播放、快進、倒帶、音量增大/減小等)回傳一個關于應該執行什么動作的字串
我想在我的 QMainWindows 中獲得“動作”(do_gesture() 的值),以便我可以將它與 VideoPlayer 連接。
但我不確定我該怎么做。
tldr:如何在不破壞回圈的情況下從回圈中獲取值?
uj5u.com熱心網友回復:
您可能想要發出信號。
在你的信號旁邊action為你的Camera班級添加一個image_update信號:
class Camera(QThread):
image_update = pyqtSignal(QImage)
gesture_action = pyqtSignal(str)
然后在您的回圈中,您可以執行以下操作:
action = recognize.do_gesture(position=fingers, landmarks=landmarks, img=image)
self.gesture_action.emit(action)
這不會打破回圈。
將該信號連接到一個插槽(大概在您的MainWindow或它的一個子小部件中),當有action.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/397232.html
下一篇:py混淆請幫忙
