一、项目说明

MediaPipe 是 Google 的一个开源项目,可以提供开源的、跨平台的常用机器学习 (machine learning) 方案。MediaPipe 实际上是一个集成的机器学习视觉算法的工具库,包含了人脸检测、人脸关键点、手势识别、头像分割和姿态识别等各种模型。
项目主页:https://google.github.io/mediapipe/

mediapipe_ros 是一个增加了 ROS 接口的开源功能包,可以直接调用 MediaPipe。
开源地址:mediapipe_ros: mediapipe in ros

二、使用前准备

注意:使用冰达提供的嵌入式板卡镜像已经预装相关的软件,不需要执行以下的安装步骤,可直接跳到测试运行章节。

  1. 安装 pip3
    确保系统中已经安装了 pip3,它是 Python 3 的包管理工具,用于安装 MediaPipe 等 Python 库。
  2. 安装 mediapipe
    使用 pip3 安装 MediaPipe 库,命令如下:

    bash

    pip3 install mediapipe
    

  3. 安装其他依赖软件
    根据实际需求,可能还需要安装一些其他依赖软件,例如与 ROS 相关的依赖包等。具体依赖请参考项目相关文档。
  4. 克隆 mediapipe_ros 源码到工作空间
    假设工作空间名为 mediapipe_ws,进入该工作空间的 src 目录,执行以下命令克隆源码:

    bash

    cd ~/mediapipe_ws/src
    git clone https://gitee.com/bingda-robot/mediapipe_ros.git
    

    然后回到工作空间根目录,编译工作空间:

    bash

    cd ~/mediapipe_ws
    catkin_make
    

三、测试运行

(一)启动摄像头

根据实际使用的摄像头设备号填写 device 值,例如:

bash

roslaunch mediapipe_ros rgb_camera.launch device:=video0

(二)打开一个 rqt 窗口

(三)手部骨骼检测

可以识别标出手部 21 个关键点的 3D 坐标。
在 rqt 终端中选择图像话题显示图像。
操作步骤:

bash

rosrun mediapipe_ros hands_gesture.py

(四)手势识别

根据识别出的手部 21 个关键点的 3D 坐标判断当前手势,支持 1~6 的数字,竖大拇指,以及一个国际友好手势。
在 rqt 终端中选择图像话题显示图像。
操作步骤:

bash

rosrun mediapipe_ros hands_gesture.py

(五)人像抠图

运行代码:

bash

rosrun mediapipe_ros selfie_segmentation.py

将人像从当前画面中除人像部分以外的背景消除掉,在 rqt 终端中选择图像话题显示图像。

(六)人脸检测

运行代码:

bash

rosrun mediapipe_ros face_detection.py

MediaPipe 将会捕捉人脸的眼睛、鼻子、嘴巴和耳朵的六个关键点位置,在 rqt 终端中选择图像话题显示图像。

(七)人脸网格

运行代码:

bash

rosrun mediapipe_ros face_mesh.py

提取出人脸的 3D 网格特征,在 rqt 终端中选择图像话题显示图像。

(八)人体骨架检测

运行代码:

bash

rosrun mediapipe_ros pose.py

可以识别标出人体 33 个关键点的 3D 坐标,在 rqt 终端中选择图像话题显示图像。

(九)综合检测

运行代码:

bash

rosrun mediapipe_ros holistic.py

同时实现骨架检测,脸部关键点和手部动作检测。这个 Demo 检测运算量较大,嵌入式板卡检测帧率会比较低。在 rqt 终端中选择图像话题显示图像。

四、可能遇到的问题及解决办法

(一)roslaunch mediapipe_ros rgb_camera.launch device:=video0 报错:

plaintext

RLException: [rgb_camera.launch] is neither a launch file in package [mediapipe_ros] nor is [mediapipe_ros] a launch file name
The traceback for the exception was written to the log file

原因:可能是 mediapipe_ros 包未正确安装或编译,或者 ROS_PACKAGE_PATH 环境变量没有正确设置,导致 ROS 找不到 mediapipe_ros 包中的 rgb_camera.launch 文件。
解决办法

  1. 确认 mediapipe_ros 包已正确克隆到工作空间 ~/mediapipe_ws/src 目录下,并且已经在工作空间根目录执行了 catkin_make 命令进行编译。
  2. 检查 ROS_PACKAGE_PATH 环境变量,在终端中输入 echo $ROS_PACKAGE_PATH,确保 ~/mediapipe_ws/src 已经包含在该路径中。如果没有,打开 ~/.bashrc 文件(使用 nano ~/.bashrc 命令),在文件末尾添加以下两行:

bash

source ~/mediapipe_ws/devel/setup.bash
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/mediapipe_ws/src

保存并退出 nano 编辑器(按 Ctrl + X,然后按 Y,最后按 Enter),再执行 source ~/.bashrc 使设置生效。

(二)rosrun mediapipe_ros hands_gesture.py 报错:

plaintext

Traceback (most recent call last):
  File "/home/orangepi/mediapipe_ws/src/mediapipe_ros/script/hands_gesture.py", line 17, in <module>
    import mediapipe as mp  
  File "/home/orangepi/.local/lib/python3.8/site-packages/mediapipe/__init__.py", line 16, in <module>
    import mediapipe.python.solutions as solutions 
  File "/home/orangepi/.local/lib/python3.8/site-packages/mediapipe/python/solutions/__init__.py", line 17, in <module>
    import mediapipe.python.solutions.drawing_styles
  File "/home/orangepi/.local/lib/python3.8/site-packages/mediapipe/python/solutions/drawing_styles.py", line 20, in <module>
    from mediapipe.python.solutions.drawing_utils import DrawingSpec
  File "/home/orangepi/.local/lib/python3.8/site-packages/mediapipe/python/solutions/drawing_utils.py", line 21, in <module>
    import matplotlib.pyplot as plt
  File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 2349, in <module>
    switch_backend(rcParams["backend"])
  File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 221, in switch_backend
    backend_mod = importlib.import_module(backend_name)
  File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 1, in <module>
    from . import _backend_tk
  File "/usr/lib/python3/dist-packages/matplotlib/backends/_backend_tk.py", line 6, in <module>
    import tkinter as tk
ModuleNotFoundError: No module named 'tkinter'

原因:缺少 tkinter 模块,tkinter 是 Python 的标准图形用户界面(GUI)库,matplotlib 依赖它来显示图形。
解决办法:在基于 Debian 或 Ubuntu 的系统上,可以通过以下命令安装 tkinter

bash

sudo apt-get update
sudo apt-get install python3-tk

安装完成后,再次运行 rosrun mediapipe_ros hands_gesture.py 即可。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐