如何在不破坏循环的情况下从循环中获取价值
How to get value out of loop, without breaking the loop
我正在尝试制作一个视频播放器,它对视频播放器操作(播放、暂停、快进等)使用手势识别
对于视频播放器,我使用 PyQt5,对于手势识别,我使用 MediaPipe。
Here's what my program looks like
现在这是我用于 运行 相机并在 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方法,returns根据手势识别(暂停、播放、快进、倒回、音量up/down, ...)
我想在我的 QMainWindows 中获取 'action'(do_gesture() 的值),以便我可以将它与 VideoPlayer 连接。
但我不确定我该怎么做。
tldr:如何在不中断循环的情况下从循环中获取值?
你可能想要发出信号。
将 action
的信号添加到您的 Camera
class,就在您的 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
.
时,该插槽可以执行您想要执行的任何操作
我正在尝试制作一个视频播放器,它对视频播放器操作(播放、暂停、快进等)使用手势识别
对于视频播放器,我使用 PyQt5,对于手势识别,我使用 MediaPipe。 Here's what my program looks like
现在这是我用于 运行 相机并在 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方法,returns根据手势识别(暂停、播放、快进、倒回、音量up/down, ...)
我想在我的 QMainWindows 中获取 'action'(do_gesture() 的值),以便我可以将它与 VideoPlayer 连接。
但我不确定我该怎么做。
tldr:如何在不中断循环的情况下从循环中获取值?
你可能想要发出信号。
将 action
的信号添加到您的 Camera
class,就在您的 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
.