编辑:OAK中国
来源:oakchina.cn
版权说明:转载请注明出处
前言
Hello,大家好,这里是OAK中国,我是助手君。
本期内容将为大家介绍使用depthai实现手势识别,这个示例是由geaxgx实现。示例代码在GitHub上可以找到。超级容易上手,快来试试吧!
分析项目
- 此项目检测手部在图像中的位置并画出手部特征点。
- 利用手部特征点之间的相对位置,实现手势识别。
模型介绍
此示例使用Google推出的MediaPipe中的Hand解决方案。
MediaPipe Hands是一种高保真手和手指跟踪解决方案。它采用机器学习来从单个帧中推断出手的21个3D界标。
该ML管道由多个相互配合的模型组成:一种手掌检测模型,可在完整图像上运行并返回定向的手部边界框。一个手部特征点模型,该模型在由手掌检测器定义的裁剪图像区域上运行并返回高保真3D手部特征点。
手掌检测模型
这是一个手掌检测器,而不是一个手形检测器,因为估计刚性物体(如手掌和拳头)的边界框比用关节手指检测手要简单得多。
模型将检测手部在图像中的位置,并返回边界框四点的坐标。
手部特征点模型
在整个图像上进行手掌检测之后,我们随后的手部特征点模型将通过回归(即直接坐标预测)对检测到的手部区域内的21个3D手关节坐标进行精确的关键点定位。
模型剖析
-
手掌检测模型
输入:
输出:
-
手部特征点模型
输入:
输出:
转换模型
我们手中的神经网络模型千奇百怪,但我们depthai需要使用blob文件,不能直接使用各大神经网络框架生成的模型。因此可以先使用OpenVINO将各种模型转换为IR,再将IR转换为blob文件。
- 首先下载并安装OpenVINO
- 然后使用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技术和产品新动态
戳「+关注」获取最新资讯↗↗