从0到1学习使用OAK——手势识别示例

编辑:OAK中国
来源:oakchina.cn
版权说明:转载请注明出处

前言

Hello,大家好,这里是OAK中国,我是助手君。

本期内容将为大家介绍使用depthai实现手势识别,这个示例是由geaxgx实现。示例代码在GitHub上可以找到。超级容易上手,快来试试吧!

分析项目

  1. 此项目检测手部在图像中的位置并画出手部特征点。
  2. 利用手部特征点之间的相对位置,实现手势识别。

模型介绍

此示例使用Google推出的MediaPipe中的Hand解决方案。

MediaPipe Hands是一种高保真手和手指跟踪解决方案。它采用机器学习来从单个帧中推断出手的21个3D界标。

该ML管道由多个相互配合的模型组成:一种手掌检测模型,可在完整图像上运行并返回定向的手部边界框。一个手部特征点模型,该模型在由手掌检测器定义的裁剪图像区域上运行并返回高保真3D手部特征点。

手掌检测模型

这是一个手掌检测器,而不是一个手形检测器,因为估计刚性物体(如手掌和拳头)的边界框比用关节手指检测手要简单得多。
模型将检测手部在图像中的位置,并返回边界框四点的坐标。

手部特征点模型

在整个图像上进行手掌检测之后,我们随后的手部特征点模型将通过回归(即直接坐标预测)对检测到的手部区域内的21个3D手关节坐标进行精确的关键点定位。
在这里插入图片描述

模型剖析

  1. 手掌检测模型
    输入:
    在这里插入图片描述

    输出:
    在这里插入图片描述

  2. 手部特征点模型
    输入:
    在这里插入图片描述
    输出:
    在这里插入图片描述

转换模型

我们手中的神经网络模型千奇百怪,但我们depthai需要使用blob文件,不能直接使用各大神经网络框架生成的模型。因此可以先使用OpenVINO将各种模型转换为IR,再将IR转换为blob文件。

  1. 首先下载并安装OpenVINO
  2. 然后使用OpenVINO的模型下载脚本工具下载模型。
    例如:
python ~/intel/openvino/deployment_tools/open_model_zoo/tools/downloader/downloader.py --name face-detection-retail-0004 --output_dir ~/open_model_zoo_downloads/

此时得到的模型是OpenVINO IR,也就是.bin和.xml文件。我们还需要将IR转换为DepthAI所需要的blob文件。
将OpenVINO IR编译为blob文件:

export MYRIAD_COMPILE=$(find /opt/intel/ -iname myriad_compile)
$MYRIAD_COMPILE -m sbd_mask.xml -ip U8 -VPU_MYRIAD_PLATFORM VPU_MYRIAD_2480 -VPU_NUMBER_OF_SHAVES 4 -VPU_NUMBER_OF_CMX_SLICES 4

注:使用模型转换工具需要安装openvino,安装时要注意DepthAI对OpenVINO版本有要求。 详情请参照openvino安装。

另外:在此项目中作者贴心的为我们提供了模型转换脚本。
tflite模型转IR-convert_models.sh

cd resources/models
./convert_models.sh

IR转blob-gen_blob_shave.sh。

# Example: to generate blobs for 6 shaves
./gen_blob_shave.sh -m pd -n 6   # will generate palm_detection_sh6.blob
./gen_blob_shave.sh -m lm -n 6   # will generate hand_landmark_sh6.blob

最终效果

在这里插入图片描述

参考资料

https://docs.oakchina.cn/en/latest/
https://www.oakchina.cn/selection-guide/


OAK中国
| OpenCV AI Kit在中国区的官方代理商和技术服务商
| 追踪AI技术和产品新动态

戳「+关注」获取最新资讯↗↗

猜你喜欢

转载自blog.csdn.net/oakchina/article/details/123924716#comments_21221336