树莓派手势控制媒体播放器构建教程
用MediaPipe和树莓派实现手势控制媒体播放器 这次我们直接上手,用MediaPipe Python库来检测手势,然后控制树莓派上的媒体播放器。总共设计了六个手势:开合拳控制播放 暂停,手的上下移动控制音量增减,左右移动控制快进快退。听起来是不是很酷?下面一步步拆解。 构建手势控制媒体播放器所需
用MediaPipe和树莓派实现手势控制媒体播放器
这次我们直接上手,用MediaPipe Python库来检测手势,然后控制树莓派上的媒体播放器。总共设计了六个手势:开合拳控制播放/暂停,手的上下移动控制音量增减,左右移动控制快进快退。听起来是不是很酷?下面一步步拆解。
构建手势控制媒体播放器所需的组件
硬件方面只需要两样东西:树莓派4和Pi摄像头模块。软件上则需要OpenCV(负责图像处理)和MediaPipe(负责手部跟踪)。OpenCV在数字图像处理领域是标配,而MediaPipe则是一个跨平台的多模态机器学习管道框架,支持Android、iOS、Web甚至边缘设备。它预封装了很多实用模型,包括物体检测、人脸检测、手部追踪、姿势估计、多手追踪、头发分割等——我们这次用的就是手部追踪。
MediaPipe的Python包在PyPI上可以直接安装,但针对树莓派有专门版本。如果用的是Pi 4,执行:
sudo pip3 install mediapipe-rpi4
如果是Pi 3,则换成:
sudo pip3 install mediapipe-rpi3
在树莓派上安装OpenCV
安装OpenCV之前,先把树莓派系统更新到最新:
sudo apt-get update
然后安装必要的依赖:
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev -y sudo apt-get install libatlas-base-dev -y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 -y sudo apt-get install libqt4-test -y
之后安装OpenCV(这里指定了版本4.1.0.25,兼容性比较稳定):
pip3 install opencv-contrib-python==4.1.0.25
在树莓派上安装PyAutoGUI
PyAutoGUI是一个跨平台的GUI自动化模块,可以让Python脚本模拟键盘和鼠标操作。我们要用它来模拟媒体播放器的控制键。安装命令很简单:
pip3 install pyautogui
为媒体控制器编程树莓派
完整的代码在文末给出。这里挑重点解释一下关键逻辑。
首先导入三个核心库:OpenCV、MediaPipe、PyAutoGUI。然后创建两个MediaPipe的工具变量——mp_drawing用于绘图,mp_hands用于手部模型。
接着定义一个findPosition()函数,它负责返回食指、中指、无名指、小指指尖的X、Y坐标,结果存入列表lmList。注意,这里用results.multi_hand_landmarks获取检测到的手部关键点,再通过坐标映射到图像尺寸。
启动摄像头时,设置帧尺寸为720×640,然后进入主循环。每次读取图像后,先水平翻转(为了自拍视角),再转为RGB格式送入MediaPipe的手部模型进行推理。推理结果绘制在图像上,连线展示手部骨架。
得到关键点坐标后,第一个判断手势是“拳头张开还是闭合”。方法很简单:比较指尖(索引8、12、16、20)与对应中点(索引6、10、14、19)的Y坐标。如果指尖在中点下方,说明该手指弯曲(闭合),反之伸直(张开)。统计伸开的手指数量totalFingers:
- 4根手指张开 → 播放
- 0根手指张开且当前状态为“播放” → 暂停(模拟按下空格键)

对于方向控制:
- 1根手指(食指)伸出时,根据指尖X坐标判断左右:小于300为左滑,大于400为右滑,对应模拟方向键左右。
- 2根手指(食指+中指)伸出时,根据中指Y坐标判断上下:小于210为上滑,大于230为下滑,对应模拟方向键上下。
测试时,把Pi摄像头模块正确连接(参考下图),确认摄像头工作正常后运行脚本。会弹出一个实时视频窗口,就可以用手势控制播放器了。视频源可以换成任何你喜欢的视频——双手一挥,快进倒退,体验感拉满。

完整代码
import cv2
import mediapipe as mp
import pyautogui
mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
tipIds = [4, 8, 12, 16, 20]
state = None
gesture = None
wCam, hCam = 720, 640
def findPosition(image, handNo=0):
lmList = []
if results.multi_hand_landmarks:
myHand = results.multi_hand_landmarks[handNo]
for id, lm in enumerate(myHand.landmark):
h, w, c = image.shape
cx, cy = int(lm.x * w), int(lm.y * h)
lmList.append([id, cx, cy])
return lmList
cap = cv2.VideoCapture(0)
cap.set(3, wCam)
cap.set(4, hCam)
with mp_hands.Hands(
min_detection_confidence=0.8,
min_tracking_confidence=0.5) as hands:
while cap.isOpened():
success, image = cap.read()
if not success:
print("忽略空相机帧。")
continue
image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB)
image.flags.writeable = False
results = hands.process(image)
image.flags.writeable = True
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
if results.multi_hand_landmarks:
for hand_landmarks in results.multi_hand_landmarks:
mp_drawing.draw_landmarks(
image, hand_landmarks, mp_hands.HAND_CONNECTIONS)
lmList = findPosition(image)
if len(lmList) != 0:
fingers = []
for id in range(1, 5):
if lmList[tipIds[id]][2] < lmList[tipIds[id] - 2][2]:
fingers.append(1)
if lmList[tipIds[id]][2] > lmList[tipIds[id] - 2][2]:
fingers.append(0)
totalFingers = fingers.count(1)
print(totalFingers)
if totalFingers == 4:
state = "Play"
if totalFingers == 0 and state == "Play":
state = "Pause"
pyautogui.press('space')
print("space")
if totalFingers == 1:
if lmList[8][1] < 300:
print("Left")
pyautogui.press('left')
if lmList[8][1] > 400:
print("Right")
pyautogui.press('right')
if totalFingers == 2:
if lmList[9][2] < 210:
print("Up")
pyautogui.press('up')
if lmList[9][2] > 230:
print("Down")
pyautogui.press('down')
cv2.imshow("Media Controller", image)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
cv2.destroyAllWindows() 你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:树莓派手势控制媒体播放器构建教程要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。
相关热点度加剪辑是百度官方出品的剪辑工具,面向口播自媒体创作者。支持视频剪辑、智能识别字幕,并与百度网盘打通,可快速导入素材。适用于泛知识类创作者制作高质量视频,覆盖从素材导入到成品输出的完整流程。
WorkoutMaster是一款基于AI的个性化锻炼计划生成工具,能根据用户目标、偏好及历史训练记录,动态输出专属方案,并实时自适应调整负重、组次等参数。支持定制目标与器械偏好,借助机器学习持续优化,随时随地即可接入使用,确保训练高效安全。
Calorielens是一款利用AI分析餐食照片的卡路里追踪应用。用户只需拍照,AI即可自动识别食物种类和分量并估算卡路里,省去手动输入步骤。应用还提供历史记录追踪功能,帮助把握热量趋势。AI估算精度可满足日常健康管理需求。
百度旗下“简单搜索”AI搜索引擎集成语音、图像、多媒体搜索及实时翻译,支持多模态交互与智能推荐。基于大模型技术,用户可通过对话式交互直接获取精准答案,适用于学习、旅行、生活、职业发展等场景,高效满足信息需求。
- 日榜
- 周榜
- 月榜
热点快看
