前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >石头、剪子、布!这些手势都是怎么被计算机识别的?

石头、剪子、布!这些手势都是怎么被计算机识别的?

作者头像
博文视点Broadview
发布2022-08-26 18:20:45
1.2K0
发布2022-08-26 18:20:45
举报

👆点击“博文视点Broadview”,获取更多书讯

随着人工智能的不断发展,计算机视觉技术被应用到越来越多的场景之中,甚至连我们儿时最爱的“石头、剪子、布”游戏,也被它“搞定了”。那么,计算机是如何进行数字手势识别的呢?

在进行数字手势识别时,将手势图中“凹陷区域”(该区域被称为凸缺陷)的个数作为识别的重要依据,如图 1所示:

  • 表示数值0、数值1的手势具有0个凹陷区域(不存在凹陷区域)。
  • 表示数值2的手势具有1个凹陷区域。
  • 表示数值3的手势具有2个凹陷区域。
  • 表示数值4的手势具有3个凹陷区域。
  • 表示数值5的手势具有4个凹陷区域。

图1 手势

从上述分析可以看出,在对表示数字的手势进行识别时,直接计算其中的凹陷区域个数即可识别数字2到数字5。

但是,在凹陷个数为0时,既可能表示数值0也可能表示数值1。因此,此时无法通过凹陷区域的个数来识别手势所表示的数字。这种情况下,就需要应用到凸包的概念。

逼近多边形是轮廓的高度近似,但是有时候,我们希望使用一个多边形的凸包来简化它。凸包跟逼近多边形很像,只不过它是物体最外层的“凸”多边形。凸包指的是完全包含原有轮廓,并且仅由轮廓上的点所构成的多边形。凸包的每一处都是凸的,即在凸包内连接任意两点的直线都在凸包的内部。在凸包内,任意连续三个点所构成的面向内部的角,其角度小于180°。例如,在图 2中,最外层的多边形为机械手的凸包,使用它可以处理手势识别等问题。

图2  凸包示意图

应用凸包与轮廓的关系即可判断手势0和手势1的差别。如图 3所示,手势0与手势1在以下方面存在着差别:

  • 手势0的凸包,与其轮廓基本一致。
  • 手势1的凸包,要大于其轮廓值。在手势1的轮廓与凸包之间存在着相对较大的凹陷区域(凸缺陷),凹陷区域面积占比在10%以上。当然,这个10%是个大概值,它因人而异,不是固定值。不同的人手指长度一样,因此该值有一定的波动范围。

图3 手势0与手势1

根据以上分析,可以简单理解如下:

  • 凸包面积 = 凹陷面积 + 轮廓面积。
  • 针对手势0:轮廓/凹陷面积 > 0.9 (二者基本一致)。
  • 针对手势1:轮廓/凹陷面积 ≤ 0.9 (凹陷面积较大,占比超过0.1)。

利用二者在上述特征上的区别可以进行手势0和手势1的识别。

当然,其他过程就是简单的图像处理流程了,手势识别的基本流程如图4所示。

图4 流程图

手势识别过程如图5所示,能够识别在屏幕内的固定区域的数字手势。

图5 手势识别

在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》中,我们使用大概10页的篇幅,从理论基础(获取凸包、凸缺陷、凸缺陷与凸包面积比)、识别过程(识别流程、代码实现)等角度系统深入介绍了数字手势识别的具体算法和实现流程,并对代码实现进行了细致的解释。同时,书中还介绍了石头剪刀布手势识别的基本原理和实现过程。

这本书在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论入门的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。

这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面(表情识别、驾驶员疲劳监测、识别性别与年龄等)案例。在内容的安排、组织、设计上秉承了如下思路:

01. 适合入门

第1部分对计算机视觉的基础知识点进行了全面的梳理,主要包括图像处理基础、Python基础、OpenCV基础。重点对计算机视觉中用到的基础理论、算法、数字图像的应用,Python程序设计基础语法,OpenCV核心函数进行了介绍。该部分内容能够帮助没有计算机视觉基础的读者快速入门,也能够帮助有一定计算机视觉基础的读者对核心知识点进行快速梳理。

02. 以案例为载体

按照知识点安排的教材,其特点在于“相互独立,完全穷尽”(MECE,Mutually Exclusive Collectively Exhaustive),能够保证介绍的知识点“不重叠,不遗漏”。但是,采用这种方式学习后有可能会导致一个问题:“我了解了每一个知识点,可是在遇到问题时,感觉无从下手,不知道该把哪些知识点拿出来组合以解决当前的问题”。

知识点是一个个的小石子,解决问题的思路是能够把许多石子串成一条漂亮项链的绳子。绳子可以赋予石子更大的意义和价值,解决问题能够让我们的知识点得以闪光。

本书采用案例的方式来介绍相关知识点。同时,尽量避免将案例作为一个孤立的问题来看待,而是更多地考虑知识点之间的衔接、组合、应用场景等。例如,我们采用了多种不同的方式实现手写数字识别,帮助大家更好地从不同的角度去理解和分析问题。

本书从案例实战的角度来展开,将案例作为一根线,将所有的知识点串起来,帮助大家理解知识点间的关系及组合运用,做到融会贯通,提高对知识点的理解和运用能力。

03. 轻量级实现

将一个问题以尽量简单明了的方式实现,能够更好地帮我们搞清楚问题的核心和算法。用最简化的方式实现系统(MVP,minimum viable product),用最小的成本和代价快速验证和迭代一个算法,更有利于理解问题、解决问题。使用现有的资源、最低的成本、最快的速度行动起来才是最关键的。所以,在本书中,我们尽可能让每一个案例简化,尽量将代码控制在100行左右。希望通过这样的设计,能够让我们更好地关注算法核心。

04. 专注算法

抽象,帮我们屏蔽了无关细节,让我们能够专注于工具的使用,极大地提高了工作效率。OpenCV及很多其他库提供给我们的函数都是封装好的,我们直接把输入传递给函数,函数就能够把需要的结果返回给我们。因此,在本书中没有对函数再做过多的介绍,而将注意力放在了实现案例所使用的核心算法上。

05. 图解

一图胜千言。当描述关系、流程等一些相对比较复杂的知识点时,单纯使用语言描述可能会让我们一时难以理解。当面对复杂的知识点时,有经验的学习者在学习时会根据知识点自己脑补出一幅关于该知识点的图,甚至会手动绘制出一幅图,来进一步理解知识点。这是因为图像能够更加清晰、直观、细致地将知识点的全局、结构、关系、流程、脉络等信息体现出来。

本书中,我们精心制作了大量的图表,希望借此能够更好地帮助大家理解相关知识点。

06. 案例全面

本书涉及案例40余个,都是在相关领域中比较典型的案例,涵盖了计算机视觉领域的核心应用和关键知识点。案例主要有:

  • 基础部分:图像安全(加密、解密、信息隐藏、隐身)、图像识别(答题卡、手势、车牌、指纹、数字)、物体计数、图像检索、次品排查等。
  • 机器学习:KNN字符识别(数字、字母)、数独求解(KNN)、SVM数字识别、行人检测、艺术画(K均值聚类)等。
  • 深度学习:图像分类、目标检测(YOLO、SSD方法)、语义分割、实例分割、风格迁移、姿势识别等。
  • 人脸相关:人脸检测、人脸识别、勾勒五官、人脸对齐、表情识别、疲劳驾驶检测、易容术、性别与年龄识别等。

扫码了解本书详情

代码语言:javascript
复制
发布:刘恩惠
审核:陈歆懿
代码语言:javascript
复制
如果喜欢本文欢迎 在看丨留言丨分享至朋友圈 三连
 热文推荐  
少儿编程是智商税吗?不花钱让孩子赢在起跑线!
35岁程序员危机,有何破解之法?
PyTorch 与 TensorFlow 怎么选?
书单 | “实战派”系列图书再添新成员!学完即知如何实战

▼点击阅读原文,了解本书详情~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 博文视点Broadview 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档