- 用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)
- 获取食指坐标
使用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]
判断人手是否在方框内
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” 即可免费获取,每日干货分享