我是靠谱客的博主 缓慢蜻蜓,这篇文章主要介绍初级选手实战 | Python 实现虚拟世界物品拖拽,现在分享给大家,希望可以做个参考。

哈喽,大家好。

今天给大家用 Python 实现虚拟物品拖拽,先预告一下下次的主题:跟大家分享了用手势控制电脑音量~记得先关注我

下面,讲解下实现思路,并附上核心代码

1. 用opencv读取人手

需要大家安装opencv-python,安装后执行以下代码,启动摄像头

复制代码
1
2
cap = cv2.VideoCapture(0)

0代表系统默认摄像头。

用 opencv 在视频流中创建方块

复制代码
1
2
cv2.rectangle(overlay, (x, y), (x + self.rect_width, y + self.rect_width), (255, 0, 0), -1)

2. 获取食指坐标

使用medialpipe识别人手

复制代码
1
2
3
4
5
6
7
8
9
10
11
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])

获取食指xyz坐标。

复制代码
1
2
3
4
5
6
# 食指坐标 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]

3. 判断人手是否在方框内

复制代码
1
2
3
4
5
6
7
8
9
10
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 实现虚拟世界物品拖拽的全部内容,更多相关初级选手实战内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部