首页-达尔闻    全部    【项目分享】自己DIY手势识别模块

【项目分享】自己DIY手势识别模块

今天要教大家用无源红外传感器PIR(passive infrared sensor)结合特殊算法搭建属于你自己的手势识别模块。
收藏
  • 达尔闻专属星级判定

    实用系数:★★★☆☆

    难度系数:★★★☆☆

    创新系数:★★★★☆


    我们曾推出过一个手势识别模块的项目分享,仅79行代码完成创意无限的手势识别,利用的是手势识别模块APDS-9960来完成的对电脑控制。今天要教大家用无源红外传感器PIR(passive infrared sensor)结合特殊算法搭建属于你自己的手势识别模块。

    有小伙伴可能会困惑,都是手势识别有什么区别吗?

    先来看一下本期项目的演示效果:

    简单普及一下目前市面上主流的手势识别方法及其原理:

    第一大类最常用的肯定是摄像头检测,其识别流程一般分为手势图像抓取、手势分割、手势特征提取,手势检测四大部分,其识别的灵敏度和准确度由摄像头和处理算法决定。

    另外一大类是利用传感器来检测手势变化,常见的有APDS-9960模块。模块实际上是环境光传感器,通过芯片上的红外发光二极管发射红外光后再利用光电二极管检测四个方向反射过来的红外能量,即检测挡光的状态,所以能检测手左右以及上下移动。但是缺点也十分明显,因为发射的红外线受室外光强影响较大,所以模块的识别距离只有20厘米左右。

    APDS-9960实现的手势控制鼠标与利用光反射原理的模块不同,本次要分享的项目是利用热源位置检测实现的。PIR传感器是无源的,即PIR设备不会为了检测而产生或辐射能量,是完全通过检测物体发射或反射的红外线(热辐射)来工作的。那什么是热辐射呢?一切温度高于绝对零度的物体均会以辐射形式散发热能,但是通常这种辐射对于人眼是不可见的,因为它以红外波的形式向外辐射即热辐射,但是我们可以设计检测红外辐射的电子设备。(PS:疫情期间的额温计,以及车站里的热成像仪就是利用此原理)

    讲完以上,跟大家总结一下各种手势识别方法的优缺点

    接下来跟大家分享今天的手势识别项目:

    本次分享的项目要使用的芯片TPA81,也是防盗报警器中常用的热释电传感器(检测到人体后打开外部照明灯以及拉响警报)。当前很多PIR传感器都配有外壳和透镜来获得更宽的检测视野(约100°)。同样的TPA81内置透镜,能够同时检测相邻的8个点的温度,最远可以检测到两米范围内的蜡烛火焰而不受环境光的干扰。

    TPA81热释电传感器PIR传感器相当于一个只能看到物体温度的摄像机,那么TPA81就是一款具有8像素分辨率的热像仪,我们可以按照对摄像头手势识别的图像处理算法来对PIR传感器使用。硬件上的搭建十分简单,TPA81支持IIC协议并且与Arduino兼容,只需要按照下图连接即可。

    小伙伴们可以用TPA64来取代有点过时的TPA81,嫌传感器贵(TPA81约一百元)的可以用8个甚至多个单像素点的PIR传感器来代替它形成传感器阵列,如下图所示:

    准备好以上,就开始进入到这个项目的重点也是难点,软件算法部分。在连接Arduino并下载好TPA81库后运行下段代码:

    代码很简单,运行后我们便可以在串口监视器中看到如下结果:

    这是8阵列传感器TPA81检测到的温度结果,每行的第一个数是总温度。因为要做手势识别,所以我们将手放在传感器面前得到手部温度是29°并将此设为标准值。随后通过下段代码将检测到的大于29°的数值用“#”打印,小于的用“.”来表示,变可以得到如下数据图,即手势运动的粗略图像:

    现在我们已经得到手势运动的粗略轨迹了,接下来便是运用图像处理的算法来检测手势。本项目采用了一种简单的识别方法,即判断8像素阵列中温度大于29°的像素点的个数和位置的变化。在音量增加和减少两种手势中,传感器得到的数值变化趋势大致如下图所示:

    然后通过将左四列和右四列的 * 个数分布加和比较,即可判断是音量增加还是减少哪种手势。然后再将指令传递给OLED屏幕即可实现。感兴趣的小伙伴可以在“达尔闻说”微信回复:DIY手势识别,获取相关代码。

    本文只是一篇抛砖引玉的文章,算法看起来并不复杂,你可以按照这个思路构建传感器阵列,并打造属于自己的手势。这样的私人订制款手势识别模块可识别的手势多且范围远,且可自由定义!这是与直接购买的手势识别模块APDS-9960最大的区别,也是分享此项目的初衷。