0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

零成本钢铁侠手套!树莓派+OpenCV 秒变手势遥控器!

上海晶珩电子科技有限公司 ? 2025-08-16 16:16 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大家好,这是一个树莓派和OpenCV的连载专题。

使用树莓派与OpenCV实现姿态估计和面部特征点追踪

使用树莓派与OpenCV实现面部和运动追踪的云台系统

使用树莓派和OpenCV实现手部识别与手势控制

使用树莓派和OpenCV实时扫描并存储二维码

使用树莓派和OpenCV实现物体与动物识别

使用树莓派、摄像头和OpenCV进行速度检测

用树莓派 + OpenCV 打造人脸识别技术!

今天的内容是:使用树莓派和OpenCV实现手部识别与手势控制

如果大家对这个专题感兴趣,记得关注树莓派开发者,这样你将会第一时间收到我们的内容更新通知。

考验你英语听力的时候到了,你可以选择观看视频演示。

[更新——在OPEN-CV与新版树莓派“Bullseye”操作系统完全兼容之前,我强烈建议现阶段将先前的树莓派“Buster”操作系统刷写到Micro-SD卡上,以配合本指南使用——官方“Buster”镜像下载链接在下方]

如何将旧的“Buster”树莓派系统刷写到Micro-SD卡上:

https://core-electronics.com.au/guides/raspberry-pi/flash-buster-os-pi/

官方“Buster”镜像:

https://downloads.raspberrypi.org/raspios_armhf/images/raspios_armhf-2021-05-28/

是时候使用人工智能计算机视觉技术,实现实时多手部识别、手指分割和手势识别了。你是否曾希望自己的树莓派4B能够实时识别你双手手指的每个关节?或者用手势发送指令?又或者进行手部关键点检测或手部姿态检测?那么,本页正是你需要的。

按照本指南操作,你将确切知道如何实现这些功能,从而在创客世界中搭建一个适合自己项目的类似系统(即使你是虚拟主播也没问题)。本指南内容如下:

所需材料

初始设置与安装流程

手部跟踪功能脚本

手指计数与手指上下识别脚本

后续方向(GPIO控制及其他应用)

在树莓派“Buster”操作系统上安装Open-CV

脚本下载

机器学习深度学习从未如此触手可及,本指南将对此进行演示。本系统将使用Open-CV,特别是CVzone。这是一个强大的资源库,有助于解决实时计算机视觉和图像处理问题。下图展示了在树莓派“Buster”操作系统上运行手部跟踪软件的情况,使用的是树莓派4B、高质量摄像头模块和镜头。

在本页底部,你可以找到将Open-CV安装到树莓派上的流程。本系统将使用MediaPipe进行实时手部识别,该工具在运行时会使用TensorFlow Lite委托进行硬件加速(本指南一应俱全!)。还有其他类型的手势识别技术也可用于树莓派4B。例如,你还可以使用Pytorch、Haar级联或YOLO/YOLOv2软件包进行手部识别或手势识别,但本指南中使用的MediaPipe数据集和系统要优越得多。本指南中探索的所有脚本都将使用Python编程语言。


所需材料

以下是让本系统快速运行起来所需的组件列表。

树莓派4B(树莓派提供的额外计算能力对这项任务非常有帮助,但此设置也适用于树莓派3B,只是速度会稍慢一些)

树莓派高质量摄像头和摄像头镜头(你也可以使用树莓派官方摄像头模块V2)

Micro SD卡

电源

显示器

HDMI线

鼠标和键盘


初始设置与安装流程

将树莓派作为台式电脑连接,接上显示器、鼠标和键盘。确保树莓派摄像头已正确安装在插槽中,且排线方向正确,然后开始下面的Open-CV安装流程。完成后,你将在全新版本的树莓派“Buster”操作系统上安装好Open-CV。然后打开树莓派配置菜单(通过左上角的菜单找到,然后滚动到偏好设置),在接口选项卡下启用摄像头。启用后,重启树莓派以使更改生效。设置位置见下图。

51eb4042-7a79-11f0-9080-92fbcf53809c.png

完成上述步骤后,下一步是使用屏幕左上角的黑色按钮打开一个新的终端。下面展示了在树莓派“Buster”桌面上打开终端的样子,图中有一个大箭头指向点击鼠标打开终端的图标。

现在,我们将在终端窗口中逐行输入以下命令,以安装必要的软件包。当需要你继续安装这些软件包时,请按键盘上的 | Y | 键。我们将在此安装的最重要的软件包是MediaPipe。它有专门适用于树莓派4和树莓派3的软件包,你可以将两者都安装到系统中。这些命令将为我们提供MediaPipe软件包。关于MediaPipe为手部识别提供的功能,请参见下文图片,该软件包能够识别、定位双手上的每个关节,并为每个关节提供一个唯一的编号。

sudopip3 install mediapipe-rpi3sudo pip3 install mediapipe-rpi4sudo pip3 install gttssudo apt install mpg321

521aec98-7a79-11f0-9080-92fbcf53809c.png

故障排除补充:如果你遇到此兼容性问题 | RuntimeError: module compiled against API version 0xe but this version of numpy is 0xd |,请在终端中输入以下命令进行修复

sudo pip install numpy--upgrade--ignore-installedsudo pip3 install numpy--upgrade--ignore-installed


手部跟踪功能脚本

完成上述步骤后,我们开始进入正题。下面是我们将用于启动手部跟踪系统的脚本。运行该脚本时,它将通过计算机视觉识别面前的任何手部,然后使用机器学习在识别出的手部上方绘制手部框架。脚本有完整的注释,因此你可以理解每个部分的作用和目的。在下面的下载部分中找到名为 | Simple-Hand-Tracker.py | 的脚本。复制、粘贴、保存并运行下面的脚本,或在Thonny IDE中运行下载的脚本。Thonny IDE只是我偏好的Python解释器软件,它默认安装在树莓派操作系统中,你可以使用任何你喜欢的软件。

#Import the necessary Packages for this software to runimportmediapipeimportcv2#Use MediaPipe to draw the hand framework over the top of hands it identifies in Real-TimedrawingModule = mediapipe.solutions.drawing_utilshandsModule = mediapipe.solutions.hands#Use CV2 Functionality to create a Video stream and add some valuescap = cv2.VideoCapture(0)fourcc = cv2.VideoWriter_fourcc('m','p','4','v')#Add confidence values and extra settings to MediaPipe hand tracking. As we are using a live video stream this is not a static#image mode, confidence values in regards to overall detection and tracking and we will only let two hands be tracked at the same time#More hands can be tracked at the same time if desired but will slow down the systemwithhandsModule.Hands(static_image_mode=False, min_detection_confidence=0.7, min_tracking_confidence=0.7, max_num_hands=2)ashands:#Create an infinite loop which will produce the live feed to our desktop and that will search for hands whileTrue: ret, frame = cap.read() #Unedit the below line if your live feed is produced upsidedown #flipped = cv2.flip(frame, flipCode = -1)
#Determines the frame size, 640 x 480 offers a nice balance between speed and accurate identification frame1 = cv2.resize(frame, (640,480))
#Produces the hand framework overlay ontop of the hand, you can choose the colour here too) results = hands.process(cv2.cvtColor(frame1, cv2.COLOR_BGR2RGB))
#In case the system sees multiple hands this if statment deals with that and produces another hand overlay ifresults.multi_hand_landmarks !=None: forhandLandmarksinresults.multi_hand_landmarks: drawingModule.draw_landmarks(frame1, handLandmarks, handsModule.HAND_CONNECTIONS)
#Below is Added Code to find and print to the shell the Location X-Y coordinates of Index Finger, Uncomment if desired #for point in handsModule.HandLandmark:
#normalizedLandmark = handLandmarks.landmark[point] #pixelCoordinatesLandmark= drawingModule._normalized_to_pixel_coordinates(normalizedLandmark.x, normalizedLandmark.y, 640, 480)
#Using the Finger Joint Identification Image we know that point 8 represents the tip of the Index Finger #if point == 8: #print(point) #print(pixelCoordinatesLandmark) #print(normalizedLandmark)
#Below shows the current frame to the desktop cv2.imshow("Frame", frame1); key = cv2.waitKey(1) &0xFF
#Below states that if the |q| is press on the keyboard it will stop the system ifkey ==ord("q"): break

因此,只要你运行该脚本(在Thonny IDE中按大的绿色运行按钮),它就会打开一个新窗口并启动手部识别。此脚本可容纳两只手,但如果你愿意,可以修改脚本以容纳更多手部。请参见下图。

5232c7dc-7a79-11f0-9080-92fbcf53809c.png


手指计数与手指上下识别脚本

接下来的自然步骤是在上述脚本中添加代码,使其能够知道我们何时有手指抬起/放下,并统计抬起/放下的手指总数。在本页底部下载此脚本。解压下载的脚本到桌面后,你将看到有完整注释的脚本 | Are Fingers Up or Down.py | 和 | module.py |。运行第一个主脚本时,请确保 | module.py | 在同一目录中。此 | Are Fingers Up or Down.py | 脚本与上面的脚本非常相似,但还将提供手指总数(抬起和放下)以及每个手指是抬起还是放下的具体细节。此信息将打印到外壳中。请参见下图,右键单击并将其在新窗口中打开以查看全尺寸图像(如果需要)。注意,已识别出食指和小指是抬起的。另外,有2根手指是抬起的,3根手指是放下的。

52512a1a-7a79-11f0-9080-92fbcf53809c.png

这非常有用,因为我们可以据此扩展功能,使用抬起/放下的手指或手势(如摇滚手势)来控制GPIO引脚。就目前而言,此计数适用于单只手,但可以修改代码以适用于多只手。

另外,作为一个彩蛋,我添加了一个小型文本转语音功能。每当你在脚本运行时按键盘上的 | q | 键,一个悦耳的机器人女士声音就会告诉你抬起和放下的手指数量。所有代码都有完整注释,以帮助理解。


后续方向(GPIO控制及其他应用)

自然,接下来的步骤是使用此代码控制GPIO引脚。我之前曾使用有趣的输入(如面部识别、速度识别或NFC标签)进行过伺服控制、LED灯控制和LED矩阵控制,但这次让我们从控制一组伺服开始。本节中讨论的所有脚本均可在本文底部下载。

包含的代码 | Are Fingers Up Servo Control.py | 中,我特别标注了修改之前脚本以添加此功能的位置。只需添加几行代码,你的树莓派单板计算机就可以变成一个手势激活系统。这非常令人兴奋!在我的案例中,我将其连接到了一个机械手上,该机械手由5个伺服为每个指尖提供动力。这些伺服都连接到一个直接安装在树莓派顶部的Adafruit 16通道伺服HAT上。这个HAT(硬件附加在顶部)是控制树莓派多个伺服的最简单方法。当我在树莓派摄像头前抬起手指并运行代码时,它会抬起机械手的手指。请参见下图。此外,Garry创建了一个出色的仿生乐高手,他扩展了此代码并使用了树莓派Build HAT。

528673b4-7a79-11f0-9080-92fbcf53809c.jpg

在可下载的脚本中,你还可以找到 | Glowbit-Gesture-Control.py |。如果你然后像此指南一样将一个Glowbit Matrix 4x4连接到树莓派上,你将创建一个手势控制灯光系统。请参见下面的操作。根据你向摄像头展示的手指数量,矩阵将显示不同的颜色。只需在上一个脚本中添加很少的额外代码即可实现此功能,并且已添加完整注释。

52c3b56c-7a79-11f0-9080-92fbcf53809c.png

这种手势控制不仅可以用于控制硬件,还可以用于控制软件。举个简单的例子,打开 | Computer-Gesture-Control.py |,我在其中编写了通过手势命令启动和暂停视频、控制声音以及关闭设备的功能。如果你放下1根手指,它将播放媒体。如果你放下2根手指,它将暂停媒体。然后,放下3根手指将打开声音,放下4根手指将静音。请参见下图,VLC开始播放是通过相邻的手势启动的。

52e76732-7a79-11f0-9080-92fbcf53809c.png

如果你继续朝这个方向编码,你可以轻松地根据提供的手势控制YouTube视频的播放、暂停、快进和点赞。限制只取决于你的想象力!


在树莓派“Buster”操作系统上安装Open-CV

以下是让树莓派安装Open-CV以实现上述手部识别的详细流程。很快,我将创建一个脚本/单独的教程来简化此流程。打开一台运行在Micro-SD卡上的全新树莓派“Buster”操作系统的树莓派4B,并将系统连接到互联网。

通过按下左上角的终端按钮打开终端。将每个命令复制并粘贴到树莓派的终端中,按Enter键,并等待其完成后再执行下一个命令。如果提示“你想继续吗?(y/n)”,请按Y键,然后按Enter键继续。

sudo apt-getupdate&&sudo apt-getupgrade

在运行下一组命令之前,我们必须先扩展交换文件。为此,在终端中输入以下行。

sudo nano /etc/dphys-swapfile

将 CONF_SWAPSIZE = 100 更改为 CONF_SWAPSIZE=2048。完成此操作后,按Ctrl-X、Y,然后按Enter键保存这些更改。此更改只是暂时的,完成此操作后你应该将其改回。为了使这些更改生效,我们必须通过向终端输入以下命令来重启交换文件。然后,我们将像往常一样继续输入终端命令。

sudo apt-get install build-essential cmake pkg-configsudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-devsudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-devsudo apt-get install libxvidcore-dev libx264-devsudo apt-get install libgtk2.0-dev libgtk-3-devsudo apt-get install libatlas-base-dev gfortransudo pip3 install numpywget -O opencv.zip https://github.com/opencv/opencv/archive/4.4.0.zipwget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.4.0.zipunzip opencv.zipunzip opencv_contrib.zipcd~/opencv-4.4.0/mkdirbuildcdbuildcmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.4.0/modules \ -D BUILD_EXAMPLES=ON ..make -j $(nproc)

此 | make | 命令将需要超过一个小时来安装,并且不会有任何关于还需多长时间的指示。它也可能会冻结显示器。请耐心等待,它会正常工作的。一旦完成,你就完成了大部分工作。如果它在任何时候失败,你会收到类似 | make: *** [Makefile all] Error 2 | 的消息,只需重新输入并执行上面的 | make -j $(nproc) | 行。不要害怕,它会记住已经完成的所有工作,并从停止的地方继续。一旦完成,我们将继续输入终端命令。

sudomake install && sudo ldconfigsudo reboot


脚本下载

以下是运行上述示例所需的所有代码。这些代码都有完整注释,因此你可以轻松理解并修改它们,以满足你的需求。

https://core-electronics.com.au/media/kbase/527/Code-For-Hand-Identification-Media-Pipe-new.zip

原文地址:

https://core-electronics.com.au/guides/raspberry-pi/hand-identification-raspberry-pi/

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 遥控器
    +关注

    关注

    18

    文章

    860

    浏览量

    68575
  • OpenCV
    +关注

    关注

    32

    文章

    648

    浏览量

    43275
  • 树莓派
    +关注

    关注

    122

    文章

    2059

    浏览量

    107868
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    采用树莓与L298N制作遥控小车全攻略

    本文主要描述使用树莓和L298N制作一个简单的遥控小车,遥控器使用简单的WEB来实现。
    的头像 发表于 03-31 10:11 ?5.3w次阅读

    #硬声创作季 #树莓 树莓教程-23 树莓入门套件红外遥控器实验更新-1

    遥控器红外遥控器树莓
    水管工
    发布于 :2022年10月09日 03:19:36

    #硬声创作季 #树莓 树莓教程-23 树莓入门套件红外遥控器实验更新-2

    遥控器红外遥控器树莓
    水管工
    发布于 :2022年10月09日 03:20:04

    树莓B+影音娱乐之烧写OpenELEC与红外遥控器适配

    遥控器。 首先准备好一张4GB及以上的TF卡,最后C10速度的,然后到下面网站下载OpenELEC固件 http://openelec.tv/get-openelec 树莓B+下载下面两个中一个
    发表于 06-07 16:21

    树莓红外遥控电机环境配置

    树莓红外遥控电机1、元器件淘宝网购买的红外遥控和红外接受模块,注意:只要红外接收能够接收到遥控器
    发表于 09-01 09:08

    树莓遥控视频小车的方法

    控制线程和摄像头线程运行3.使用遥控器遥控小车行走,并控制两自由度的摄像头舵机支架调整摄像头视野硬件材料树莓3B+32G及以上TF卡PS2手柄12V(或其他)电池L298N电机驱动
    发表于 02-08 06:02

    树莓3[android教程]-红外遥控器调试

    树莓 开发板android红外遥控器调试教程,感兴趣的可以看看。
    发表于 07-13 16:55 ?3次下载

    如何使用MPU6050进行手势遥控器的设计

    现在的智能电子设备的遥控器多数是按键式的,操作繁琐不直观,学习成本大,加上老年人视力普遍不好,给老年人操作带来了巨大的障碍。手势遥控器是指利用简单的
    发表于 07-23 17:25 ?27次下载

    树莓遥控视频小车(附代码)

    小车控制线程和摄像头线程运行3. 使用遥控器遥控小车行走,并控制两自由度的摄像头舵机支架调整摄像头视野硬件材料树莓3B+32G及以上TF卡PS2手柄12V(或其他)电池L298
    发表于 12-04 19:06 ?17次下载
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>遥控</b>视频小车(附代码)

    PicoBoy带有Wii遥控器树莓Pico

    电子发烧友网站提供《PicoBoy带有Wii遥控器树莓Pico.zip》资料免费下载
    发表于 11-08 11:16 ?0次下载
    PicoBoy带有Wii<b class='flag-5'>遥控器</b>的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>Pico

    TensorFlow手势识别树莓开源

    电子发烧友网站提供《TensorFlow手势识别树莓开源.zip》资料免费下载
    发表于 11-09 09:27 ?1次下载
    TensorFlow<b class='flag-5'>手势</b>识别<b class='flag-5'>树莓</b><b class='flag-5'>派</b>开源

    万能手势遥控器

    电子发烧友网站提供《万能手势遥控器.zip》资料免费下载
    发表于 12-19 10:23 ?1次下载
    万能<b class='flag-5'>手势</b><b class='flag-5'>遥控器</b>

    成本升级:把吃灰的树莓路由

    近期推出的树莓型号性能优于传统路由,因此将其用作路由可能会颇具吸引力。然而,它并非完美无缺,因为大多数路由软件并不支持
    的头像 发表于 08-10 08:04 ?86次阅读
    <b class='flag-5'>零</b><b class='flag-5'>成本</b>升级:把吃灰的<b class='flag-5'>树莓</b><b class='flag-5'>派</b>刷<b class='flag-5'>成</b>路由<b class='flag-5'>器</b>!

    如何使用树莓+OpenCV实现姿态估计和面部特征点追踪?

    大家好,这是一个树莓OpenCV的连载专题。使用树莓OpenCV实现姿态估计和面部特征点
    的头像 发表于 08-13 17:44 ?228次阅读
    如何使用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>+<b class='flag-5'>OpenCV</b>实现姿态估计和面部特征点追踪?

    如何使用树莓OpenCV实现面部和运动追踪的云台系统?

    大家好,这是一个树莓OpenCV的连载专题。使用树莓OpenCV实现姿态估计和面部特征点
    的头像 发表于 08-14 17:45 ?195次阅读
    如何使用<b class='flag-5'>树莓</b><b class='flag-5'>派</b>与<b class='flag-5'>OpenCV</b>实现面部和运动追踪的云台系统?