乐趣区

关于python:Python-实现虚拟世界物品拖拽

  1. 用 opencv 读取人手
    须要大家装置 opencv-python,装置后执行以下代码,启动摄像头

cap = cv2.VideoCapture(0)

0 代表零碎默认摄像头。

用 opencv 在视频流中创立方块

cv2.rectangle(overlay, (x, y), (x + self.rect_width, y + self.rect_width), (255, 0, 0), -1)
  1. 获取食指坐标
    应用 medialpipe 辨认人手
import mediapipe as mp
self.mp_drawing = mp.solutions.drawing_utils

# 辨认手掌
results = hands.process(self.image)
for hand_landmarks in results.multi_hand_landmarks:
  landmark_list = []
  # 存储手掌关键点坐标
  for landmark_id, finger_axis in enumerate(hand_landmarks.landmark):
    landmark_list.append([landmark_id, finger_axis.x, finger_axis.y,finger_axis.z])

获取食指 x、y、z 坐标。

# 食指坐标
index_finger_tip = landmark_list[8]
index_finger_tip_x = ratio_x_to_pixel(index_finger_tip[1])
index_finger_tip_y = ratio_y_to_pixel(index_finger_tip[2])
index_finger_tip_z = index_finger_tip[3]
  1. 判断人手是否在方框内

    def check_overlay(self, check_x, check_y, check_z):
      x = self.rect_left_x  # 方框的左上角 x 坐标
      y = self.rect_left_y  # 方框的左上角 y 坐标
    
      if (x < check_x < (x + self.rect_width)) and (y < check_y < (y + self.rect_width))\
         and check_z < -0.10:
         return True
    
      return False

    如果手指位于方框内,并且间隔摄像头的间隔小于 -0.1,则代表手指按下方框,此时手指挪动后,更新方框的坐标,就能够实现方框追随手指挪动。

如果方框间隔摄像头大于 -0.1,则代表手指开释方框,此时手指挪动,方框不再追随挪动。

以上就是本次分享的所有内容,想要理解更多 python 常识欢送返回公众号:Python 编程学习圈,发送“J”即可收费获取,每日干货分享

退出移动版