什么是手势识别?

手势是人类表达信息的重要途径之一,通过手势识别,我们可以获得表达者所要表达信息(例如对方竖起大拇指,表达了对方的表扬之意)。本项目将基于PaddleVideo来训练一个手势识别模型,利用模型对七种手势进行识别,分别是点击、放大、向下滑动、向上滑动、缩小、旋转以及抓取。

还可以将手势识别模型的能力植入到电脑控制系统中,具体演示详见b站视频:

https://www.bilibili.com/video/BV1dh411U7SC

什么是PaddleVideo?

PaddleVideo是飞桨官方出品的视频模型开发套件,旨在帮助开发者更好的进行视频领域的学术研究和产业实践。可以简单的将其理解成一套帮助开发者快速完成开发的工具,避免重复造轮子,也会获得更好的精度。

同时PaddleVideo已包含多种模型,包括不限于PP-TSM、PP-TSN、AGCN、ST-GCN、Slowfast等等,本文采用PP-TSN模型对数据进行训练,感兴趣的同学可以自己更换模型进行尝试。

TSN

TSN全称Temporal Segment Network ,是视频分类领域非常经典的模型。其主要思想是将一整段长视频分解为K个片段,每个片段随机抽取一帧,同时将RGB图像与光流分别放入两个神经网络中提取特征。通过片段共识函数,分别融合两个不同分支的结果,最后再将两类共识融合。

同时该网络主要采取稀疏采样的方式,只在K个片段中随机抽取,因此既能捕获视频全局信息,也能去除冗余,降低计算量。

图引用于论文[1]

图引用于论文[1]

同时TSN还采取了多模态数据增强的方式,解决样本数据偏少的情况。上图中的RGB image和RGB difference分别代表了视频中某一帧以及某一帧相邻帧的差。Optical flow 和warped optical flow fields 为视频中的光流信息。

基于以上两种数据则正好对应了网络图中的两种输入,一种RGB image,一种光流。

如何准备训练数据?

PaddleVideo PP-TSN的训练数据集使用的是由DeepMind 公布的Kinetics-400动作识别数据集。我们可以以其数据集格式作为规范进行数据准备,下面以手势识别训练数据集为例子:

数据集总共有七种动作,我们训练的模型也是用于识别这七种动作之一,其中开头的四个文件分别存放了对应的准备测试的视频或准备训练的视频名字以及分类。例如:

再更换自己的数据集训练时也要以这个作为参考,准备完成后即可开始训练。

基于PaddleVideo

开始训练模型

大道至简,基于PaddleVideo训练的动作分类任务时基本可以做到0代码完成训练,

在训练开始前需要先下载Backbone,具体代码为:

!wget https://videotag.bj.bcebos.com/PaddleVideo/PretrainModel/ResNet50_vd_ssld_v2_pretrained.pdparams

完成后仅需找到对应的网络训练配置文件进行修改即可,这里以PP-TSN为例:进入:PaddleVideo-develop/configs/recognition/pptsn/pptsn_k400_videos.yaml文件

根据项目情况对num_classes(预测类别数),pretrained(backbone模型位置),num_workers(多卡训练),以及train,vaild,test的file_path(数据集文件位置)进行修改,即可开始训练。

开始训练命令:

!python main.py  --validate -c configs/recognition/pptsn/pptsn_k400_videos.yaml

本项目经过100个epoch的训练已经达到了极好的效果:

[11/22 17:00:15] epoch:[100/100] val step:0    loss: 0.09835 top1: 1.00000 top5: 1.00000 batch_cost: 0.40634 sec, reader_cost: 0.00000 sec, ips: 39.37611 instance/sec.
[11/22 17:00:16] END epoch:100 val loss_avg: 0.09812 top1_avg: 1.00000 top5_avg: 1.00000 avg_batch_cost: 0.08464 sec, avg_reader_cost: 0.00000 sec, batch_cost_sum: 1.50070 sec, avg_ips: 53.30851 instance/sec.
[11/22 17:00:16] training ppTSN finished

预测及模型导出

训练完成后,即可对模型进行测试,可直接执行下列命令:

!python main.py  --test -c configs/recognition/pptsn/pptsn_k400_videos.yaml -w "output/ppTSN/ppTSN_best.pdparams"

最后也是收获了百分百的精度(因为数据集较少原因 可能存在过拟合情况):

测试完成后,我们利用下列命令对导出预测模型:

!python tools/export_model.py -c configs/recognition/pptsn/pptsn_k400_videos.yaml -p output/ppTSN/ppTSN_best.pdparams -o inference/ppTSN

利用预测模型再次对动作进行分类(这里使用的是放大的手势视频):

!python tools/predict.py --input_file ../mydata/val/fangda40.avi \
--config configs/recognition/pptsn/pptsn_k400_videos.yaml \
--model_file inference/ppTSN/ppTSN.pdmodel \
--params_file inference/ppTSN/ppTSN.pdiparams \
--use_gpu=True \
--use_tensorrt=False

预测结果:

预测的结果为标号1的类别。

正好对应为我们数据集标注中的放大动作,模型训练成功

手势识别原来还可以这样控制电脑,你知道怎么做到的吗?相关推荐

  1. 【机器视觉案例】(8) AI视觉,手势控制电脑鼠标,附python完整代码

    各位同学好,今天和大家分享一下如何使用 MediaPipe+Opencv 通过手势识别来控制电脑鼠标的移动和点击,如果有兴趣的话,可以代替鼠标去打游戏.先放图看效果.用画图板来测试 黄框代表电脑屏幕的 ...

  2. 手机控制电脑之手机端模拟鼠标移动

    最近做了一个手机通过wifi控制电脑的小demo,其中进行鼠标移动控制的时候,出现了一些小bug,这里记录一下正确的移动方法,第一个方法也是最容易想到的,就是自己通过记忆上一次鼠标位置,计算距离偏差, ...

  3. 手机控制电脑之手机端模拟鼠标滑动处理

    最近做了一个手机通过wifi控制电脑的小demo,其中进行鼠标移动控制的时候,出现了一些小bug,这里记录一下正确的移动方法,第一个方法也是最容易想到的,就是自己通过记忆上一次鼠标位置,计算距离偏差, ...

  4. python操作微信电脑版_Python使用itchat模块实现简单的微信控制电脑功能示例

    本文实例讲述了Python使用itchat模块实现简单的微信控制电脑功能.分享给大家供大家参考,具体如下: #!/usr/bin/python #coding=UTF-8 import request ...

  5. python 微信模块_Python使用itchat模块实现简单的微信控制电脑功能示例

    本文实例讲述了python使用itchat模块实现简单的微信控制电脑功能.分享给大家供大家参考,具体如下: #!/usr/bin/python #coding=UTF-8 import request ...

  6. 微信有电脑客户端吗_一个小程序,就能让你用手机控制电脑~

    Hello大家好,这里是TopOne软件管家! 现在基本每人必备一个手机和一台电脑,电脑是我们办公所需,但有时候经电脑处理的文件总是忘了转移到U盘或网盘中,人在外想想就难受,那有什么软件可以实现手机控 ...

  7. 控制电脑_用小程序远程控制电脑

    远程控制软件,大家已经见过很多了,比如说我们之前介绍过的 Remote Utilities.AnyDesk 等等,但是我今天介绍的这款与其他的有点与众不同. 今天登场的是一款名叫 HiPC 移动助手的 ...

  8. android控制电脑,android-remote-control-computer

    安卓控制电脑 项目是2012年4月份在校时候做的一个比赛项目 也是学习android后自己唯一做过的东西 以后就再没和android打过交道了 下载地址:http://download.csdn.ne ...

  9. teamviewer企业版 添加计算机,teamviewer添加常用控制电脑列表的操作步骤

    最近有不少的teamviewer用户们,会询问小编怎么teamviewer今日在这篇文章内小编就为你们带来了teamviewer添加常用控制电脑列表的操作步骤. teamviewer添加常用控制电脑列 ...

最新文章

  1. VS2013 编译使用 stlport
  2. SQL与NoSQL区别
  3. hibernate对象管理
  4. http 400错误
  5. pip和conda 换清华源
  6. python中的逻辑量有什么_python逻辑运算符有哪些
  7. Java实现xml与map互转
  8. 【转】深入理解JavaScript闭包(closure)
  9. Linux学习笔记017---文件解压命令的使用_压缩解压
  10. python情感分析算法_Python 情感分析
  11. matlab矩阵作分钟平均,提高matlab运行速度和节省空间的心得合集(ZT)
  12. YOLO系列专题——YOLOv2实践篇
  13. 莫烦python进化算法_使用遗传算法解决TSP问题(莫烦python 学习笔记)
  14. 使用Syncthing文件同步工具在两台Windows server服务器实现文件同步(实战)
  15. 爬虫学习笔记1:爬虫基本概念
  16. 小窍门:简历邮箱格式的正确写法,个人简历怎么发送到邮箱?
  17. android手机内存使用情况分析
  18. 【Web技术】前端水印实现方案
  19. [PMP]作业题(一)模拟题错题整理
  20. 5、迪米特法则(Law of Demeter)

热门文章

  1. 【Python】【C语言】P3353 在你窗外闪耀的星星
  2. 隔壁小王的shell命令1
  3. 【JSP】JSP简单介绍
  4. 【PCB Layout】信号抗干扰经验总结
  5. Houdini粒子随机大小每帧变化问题
  6. 哪里有日语50音图的发音啊?
  7. 还在用Evernote或印象笔记吗?来看看笔记神器Notion吧!
  8. 网易考拉API开发系列:item_get-根据ID取商品详情 API 返回值说明
  9. 完美解决Xmind打开乱码的问题
  10. 浙传计算机二级成绩查询,浙江传媒学院艺考成绩查询