opencv手势识别_通过 ML.NET 使用预训练残差网络 ResNet 模型实现手势识别

之前我写过的一篇《基于 ONNX 在 ML.NET 中使用 Pytorch 训练的垃圾分类模型》,介绍到了 ML.NET 是如何实现图像分类的,此后我收到好多留言提出了更多的场景,比如某个在线学习应用,希望学生按照视频的要求做一个指定的动作,完成形体训练,又比如某个内部调度系统,希望通过某种肢体动作执行特定的命令,例如比个“OK”确认Job触发,又或者是想实现一个猜拳的人机游戏等等。不难发现这些场景相似性很高,从技术上我们可以分解为几个过程,首先是通过opencv一类的工具捕获图像,然后通过与目标图像的比对得到是否一致的分析结果,最后根据这个分析结果对场景的实际意义进行反馈,机器学习模型能够解决第二个过程的需求。本文就摘取跟手势有关的场景,介绍如何通过 ML.NET 使用预训练残差网络 ResNet 模型实现手势识别。

为了展现 ML.NET 在普通机器上的 GPU 训练能力,我准备的软、硬件环境如下:

  • Windows 10

  • cuDNN 7.6 以及 CUDA10

  • CPU Intel(R) Core(TM) i7-6700HQ 

  • GPU NVIDIA GeForce 940MX

准备阶段

从https://aka.ms/mlnet-resources/meta/resnet_v2_101_299.meta下载 ResNet 模型文件,然后放置到 C:\Users\<Your Name>\AppData\Local\Temp\MLNET 下,否则项目运行时会出现如下图的异常。

604648b9ee441343d35c391886410a5f.png

 从https://cloud.tsinghua.edu.cn/f/787490e187714336aae2/?dl=1下载训练数据集,里面是分类好的 0-5 的手势图片。

创建项目

使用 Visual Studio 2017/2019 创建一个 .NET Core 控制台应用项目,创建 assets 和 workspace 目录,将数据集文件 hand_dataset.tar 解压到 assets 目录中。

添加如下 Nuget 包的引用:

  • Microsoft.ML

  • Microsoft.ML.ImageAnalytics

  • Microsoft.ML.Vision

  • SciSharp.TensorFlow.Redist-Windows-GPU

代码部分

在预处理数据阶段,使用了 mlContext.Data.ShuffleRows 混淆了顺序,参数 shufflePoolSize 的大小由数据集的大小决定,过小的值会导致管道的异步线程抛异常

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值