手势识别实践 DIY应用到剪刀石头布机器人(附代码)

时间: 2024-01-04 13:44:45 |   作者: 光电sensor

工作地点:首页 > 爱游戏最新官网 > 光电sensor

  回家看到小外甥存了很多零用钱,作为舅舅,最近手头有点紧。于是经过几天的筹划,决定制作一个剪刀石头布机器人,向小外甥挑战。以小外甥好胜的性格,一定会欣然应答。然后凭借神经网络出色的性能,赢光他的零花钱不是问题。。。嘿嘿,想想还有点美呢。

  上面这个是做好的成品,效果不错,小外甥被忽悠的一愣一愣,轻松拿下他的存钱罐。

  主要就是一个图像分类的神经网络。通过摄像头,判断小外甥出拳一瞬间的手型,然后根据规则显示克制他的手型即可。例如摄像头检测到小外甥出了剪刀,那么机器人就出一个布,只要模型训练的好,妥妥的百战****。

  用过深度学习的人都知道,这货需要训练数据,而且越多越好,各种背景,光照,远近最好都能撸一些图片,这样模型的鲁棒性就会很好。我编写了一个python代码,配合opencv调用摄像头来获取手势图片。将剪刀的标签设为0,石头的标签设为1,布的标签设为2,每种采集1000张图片左右。如下图所示:

  由于只需要判断三种手势,所以一个分类网络就足够了,考虑到电脑的CPU能力有限,为实现实时的检测,需要一个轻量级的分类网络。开源的mobilent系列,shufflenet系列,efficeentlite等都是很好的选择。这里我选择了shufflenetV2版本。通过实际测试,这个网络的效果最好。shufflenetv2的结构图如下图所示:

  shufflenetv2提供了一个通道系数来平衡速度和精度。如上面表格中的0.5X,1X,1.5X,2X所示。这里我选择使用0.5X的通道系数,参数量只有1.4M,计算量只有41M,在笔记本的CPU上面足够实现实时的检测。

  下图a展示了基本ResNet轻量级结构,这是一个包含3层的残差单元:首先是1x1卷积,然后是3x3的depthwise convolution(DWConv,主要是为降低计算量),这里的3x3卷积是瓶颈层(bottleneck),紧接着是1x1卷积,最后是一个短路连接,将输入直接加到输出上。

  下图c展示了其他改进,对原输入采用stride=2的3x3 avg pool,在depthwise convolution卷积处取stride=2保证两个通路shape相同,然后将得到特征图与输出进行连接(concat,借鉴了DenseNet?),而不是相加。极致的降低计算量与参数大小。

  训练选择使用pytorch框架,因为pytorch基于动态图机制,调试简单,而且训练速度也比较快,在我的笔记本上面,训练了半个小时,就能达到0.99的top1精度。下图是训练的loss和top1曲线图。

  其实直接用pytorch进行推理也能的,知识pytorch的推理速度一般,因为网络没有做优化(量化以及层的融合),所以这里采用一种更为普遍的方式来进行推理。转换成ncnn模型,使用腾讯开源的ncnn库进行推理。ncnn库的官方地址为:

  腾讯优图ncnn是腾讯社交网络事业群公布的首个AI开源项目,也是腾讯优图实验室第一次对外公开深度学习的研究成果。ncnn于2017年7月正式开源,作为一个为手机端极致优化的高性能神经网络前向计算框架,在设计之初便将手机端的特殊场景融入核心理念,是业界首个为移动端优化的开源神经网络推断库。ncnn无第三方依赖,跨平台,在手机端cpu运算速度在开源框架中处于领先水平。基于该平台,开发者能够轻松将深度学习算法移植到手机端,输出高效的执行,进而产出人工智能APP,将AI技术带到用户指尖。

  不同框架间的模型转换是目前AI项目应用落地的一大痛点。ONNX是Facebook主推的开放文件格式,pytorch/caffe2原生支持。作为目前已知同类框架中CPU运算最快的ncnn,不仅仅具备最小的安装包体积,还拥有最佳的跨平台兼容性。在ncnn支持ONNX格式转换后,pytorch/caffe2训练的模型便能通过平台轻松部署到手机端。与此同时,ncnn也能借助ONNX良好的项目生态,对众多框架和运行库的高兼容性,及结构定义清晰的ONNX格式,逐步降低各框架间的转换成本,促进AI移动端生态的创新和部署。

  据统计,目前Googleplay商店已有QQ、微信、微视、京东、支付宝、爱奇艺、美颜相机、快手短视频、LIKE短视频、玩美彩妆等超过30款APP,选用ncnn作为手机CNN推断库,实现包括人脸检测跟踪、人脸配准、人脸识别、人体检测跟踪、人体姿态估计、图像分类、图像美化、目标分割、风格画生成、物体检测、文本检测和识别等AI场景应用。

  腾讯一直以来秉承“开放”战略,不断推动技术研发向共享、复用和开源迈进。截至目前,腾讯正式对外发布的开源项目共计58个。今年3月,凭借在AI开源领域卓越的技术影响,腾讯受邀成为LF深度学习基金会初始白金会员,与基金会共同维护、支持和推动AI领域的技术开源和革新。

  腾讯优图ncnn()作为腾讯代表性的AI开源项目之一,将持续为AI发展助力,促进深度学习研究成果的落地应用。

  将ncnn模型封装成一个动态库,这样做才能够使用python直接调用。然后结合pyqt,opencv来实现最终的剪刀石头布机器人。opencv负责读取摄像头并解码,ncnn库负责对解码后的摄像头画面进行图像分类,然后根据分类结果,找到克制手势,例如检测到“剪刀”,就出“石头”,然后将图像展示在pyqt上面。

  *博客内容为网友个人发布,仅代表博主个人自己的观点,如有侵权请联系工作人员删除。

下一条:中瓷电子:3D光传感器模块外壳应用于消费类电子设备上的3D光传感器以完成面部辨认、增强实践、手势操控等作用