【发布时间】:2021-12-29 22:00:45
【问题描述】:
我正在尝试制作一个视频播放器,它使用手势识别来进行视频播放器操作(播放、暂停、快进等)
对于视频播放器,我使用 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 方法,根据手势识别(暂停、播放、快进、快退、音量增大/减小……)返回一个关于应该执行什么操作的字符串
我想在我的 QMainWindows 中获取“动作”(do_gesture() 的值),以便将其与 VideoPlayer 连接。
但我不确定我该怎么做。
tldr:如何在不中断循环的情况下从循环中获取值?
【问题讨论】:
-
好像你想
emit一个信号? -
我只需要传回字符串值
-
你所说的“离开”是什么意思?为什么打破循环不是你想要的?当您说“在我的 QMainWindows 中执行‘操作’”时,您是什么意思? 什么 QMainWindows?请阅读How to Ask 并更清楚地传达问题。展示代码运行时应该发生的情况的示例。由于这似乎是一个图形程序,您可以上传您自己的草图模型的图像,以显示窗口的外观。另请阅读stackoverflow.com/help/minimal-reproducible-example 并尝试仅包含与导致问题相关但足以重现问题的内容。
-
“传回”到哪里?
-
@KarlKnechtel 非常感谢您的提示,我会阅读并尝试改进我的帖子。我不想打破循环,因为这是我从相机获取照片的方式,应该一直这样做,因为我可以在使用程序时提供更多说明。 QMainWindow 是一个 PyQt5 对象,我在其中显示整个程序,如帖子上的图片所示。该窗口由我的 CameraFeed、FolderView 和 VideoPlayer 组成。
标签: python gesture-recognition mediapipe