2026/4/18 7:30:24
网站建设
项目流程
六安门户网站建设哪家好,佛山网站建设机构,网站广告位代码,旅游营销推广方式 向左挥动: 后退 向左挥动: 后退 向左挥动: 后退 向右挥动: 前进 向左挥动: 后退 向左挥动: 后退 向左挥动: 后退 向左挥动: 后退 向左挥动: 后退 向右挥动: 前进 向… 向左挥动: 后退 向左挥动: 后退 向左挥动: 后退向右挥动: 前进 向左挥动: 后退 向左挥动: 后退 向左挥动: 后退 向左挥动: 后退 向左挥动: 后退向右挥动: 前进向右挥动: 前进向右挥动: 前进向右挥动: 前进向右挥动: 前进向右挥动: 前进向右挥动: 前进 向左挥动: 后退向右挥动: 前进向右挥动: 前进向右挥动: 前进向右挥动: 前进向右挥动: 前进 向左挥动: 后退 向左挥动: 后退importcv2importmediapipeasmpimportpyautoguiimporttimeimportmath# 配置区域 # 动作灵敏度 (0.05 - 0.2 之间越小越灵敏)SWIPE_THRESHOLD0.10# 两次动作之间的冷却时间 (秒)防止一次挥动触发多次翻页COOLDOWN_TIME1.0# 浏览器快捷键映射KEY_BACK[alt,left]# Chrome 后退 (上一页)KEY_FORWARD[alt,right]# Chrome 前进 (下一页)# classHandController:def__init__(self):# 初始化 MediaPipe Handsself.mp_handsmp.solutions.hands self.handsself.mp_hands.Hands(max_num_hands1,min_detection_confidence0.7,min_tracking_confidence0.7)self.mp_drawmp.solutions.drawing_utils# 状态变量self.prev_xNone# 上一帧的食指尖 X 坐标self.last_action_time0# 上次触发动作的时间self.action_text# 屏幕上显示的提示文字self.action_display_timer0# 文字显示计时器defdetect_gesture(self,landmarks): 检测挥动手势 landmarks: 手部关键点列表 current_timetime.time()# 获取食指指尖 (关键点 8) 的 X 坐标 (范围 0.0 - 1.0)# 0.0 是屏幕左侧1.0 是屏幕右侧index_finger_tiplandmarks.landmark[8]curr_xindex_finger_tip.x# 如果还在冷却时间内只更新坐标不触发动作ifcurrent_time-self.last_action_timeCOOLDOWN_TIME:self.prev_xcurr_xreturnifself.prev_xisnotNone:# 计算移动距离diff_xcurr_x-self.prev_x# 判断移动幅度和方向# 向右挥动 (diff_x 0) - 前进ifdiff_xSWIPE_THRESHOLD:print( 向右挥动: 前进)pyautogui.hotkey(*KEY_FORWARD)self.last_action_timecurrent_time self.action_textNext Page self.action_display_timer30# 显示约1秒(30帧)# 向左挥动 (diff_x 0) - 后退elifdiff_x-SWIPE_THRESHOLD:print( 向左挥动: 后退)pyautogui.hotkey(*KEY_BACK)self.last_action_timecurrent_time self.action_text Previous Pageself.action_display_timer30# 更新上一帧坐标self.prev_xcurr_xdefstart(self):# 打开摄像头capcv2.VideoCapture(0)# 设置分辨率 (降低分辨率可以提高处理速度)cap.set(3,640)cap.set(4,480)print(程序已启动请将焦点切换到 Google Chrome 浏览器。)print(操作说明: 食指快速向左挥动 - 后退向右挥动 - 前进)print(按 q 键退出程序)whileTrue:success,imgcap.read()ifnotsuccess:break# 1. 镜像翻转图像 (让画面看起来像照镜子符合直觉)imgcv2.flip(img,1)# 2. 转换颜色空间 BGR - RGBimg_rgbcv2.cvtColor(img,cv2.COLOR_BGR2RGB)# 3. 处理手部检测resultsself.hands.process(img_rgb)ifresults.multi_hand_landmarks:forhand_lmsinresults.multi_hand_landmarks:# 绘制手部骨架self.mp_draw.draw_landmarks(img,hand_lms,self.mp_hands.HAND_CONNECTIONS)# 检测手势self.detect_gesture(hand_lms)else:# 如果没检测到手重置位置防止手重新出现时误判self.prev_xNone# 4. 在屏幕上显示反馈文字ifself.action_display_timer0:cv2.putText(img,self.action_text,(50,50),cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),3)self.action_display_timer-1# 显示冷却状态iftime.time()-self.last_action_timeCOOLDOWN_TIME:cv2.circle(img,(30,30),10,(0,0,255),-1)# 红点表示冷却中else:cv2.circle(img,(30,30),10,(0,255,0),-1)# 绿点表示就绪# 显示图像cv2.imshow(Chrome Hand Controller,img)# 按 q 退出ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()if__name____main__:controllerHandController()controller.start()