You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在OpenCV视频循环中使用time.sleep且不暂停画面?

解决OpenCV手势检测中打印提示时画面暂停的问题

time.sleep(2)会阻塞整个主线程,而OpenCV的视频帧读取、处理和显示都运行在这个主线程中,因此会导致画面暂停,不能用这种方式限制打印频率。

可以通过记录上次触发打印的时间戳来实现需求,每次循环时计算当前时间与上次打印时间的差值,只有当差值大于等于2秒时才执行打印操作,这样不会阻塞主线程,视频画面能正常刷新。

修改后的完整代码如下:

import time
import cv2
import mediapipe as mp

# 初始化MediaPipe手部检测和OpenCV视频捕获
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(static_image_mode=False, max_num_hands=2, min_detection_confidence=0.5)
mp_drawing = mp.solutions.drawing_utils
cap = cv2.VideoCapture(0)

last_print_time = 0  # 记录上次打印"hi"的时间戳

while True:
    ret, frame = cap.read()
    if not ret:
        break
    
    # 转换为MediaPipe需要的RGB格式并处理
    frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    results = hands.process(frame_rgb)
    
    INDEX_UP = False
    # 判断食指是否抬起(根据手部关键点坐标判断)
    if results.multi_hand_landmarks:
        for hand_landmarks in results.multi_hand_landmarks:
            # 食指指尖(INDEX_FINGER_TIP)的y坐标小于指根(INDEX_FINGER_MCP)表示抬起
            index_tip = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP]
            index_mcp = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_MCP]
            if index_tip.y < index_mcp.y:
                INDEX_UP = True
            # 绘制手部关键点连线
            mp_drawing.draw_landmarks(frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)
    
    current_time = time.time()
    # 满足食指抬起且距离上次打印超过2秒时执行打印
    if INDEX_UP and (current_time - last_print_time) >= 2:
        print("hi")
        last_print_time = current_time  # 更新时间戳
    
    cv2.imshow("Frame", frame)
    # 按ESC键退出循环
    if cv2.waitKey(1) & 0xFF == 27:
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

核心逻辑说明

  • last_print_time变量存储上次打印的时间戳,初始值设为0
  • 每次循环获取当前时间current_time,计算与上次打印时间的差值
  • 只有当食指抬起且时间差≥2秒两个条件同时满足时,才打印"hi"并更新last_print_time
  • 整个流程不会阻塞主线程,视频帧能持续读取、处理和显示,画面保持流畅

内容的提问来源于stack exchange,提问作者Alan Richter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:16:31