“颜艺Boy”是一个实时捕捉人脸姿态和表情的Android APP,提供Arduino库函数支持,可以跟硬件配合起来实现一些有趣的项目
最近撸机器学习有点感觉,遂想趁热来一发小应用。。正好工作室目前有一个高仿真机器人的项目,到时候会使用硅胶制作机器人皮肤(参考机器人“佳佳” ),而面部也会布置一些驱动系统,这样就可以
制作表情包对客人微笑了😊。于是我大眼一转,决定先搞个表情捕捉APP😆
效果先看看视频演示
简单介绍一下原理
程序主要分为5个功能模块:
- OpenCV基于PCA的人脸识别
- 基于SDM的人脸关键点回归
- 基于SVM的人脸训练集表情分类识别
- 3D GUI显示
- 蓝牙通信用于连接硬件
其中关键点的检测效果还不错,而表情分类由于样本量的原因稍有些许不稳定(各种表情只用了25个训练样本)
由于训练样本运算量较大,所以先通过手机采集图像数据,然后加好标签在PC端读取数据进行训练,APP中则直接加载训练好的XML文件。值得一提的是,在表情分类模块中,对人脸关键点数据的归一化操作十分重要,在网上看到一些案例是直接将点的像素坐标归一化,然而这样无法保证对所有头部姿态都进行正确分类。所以程序里我使用了一个坐标转换,将点的像素坐标转换为以人眉心为原点的坐标系,这样再归一化之后泛化效果就好了很多。
跟Arduino联动
和之前的迹APP一样,我给颜艺Boy也提供了Arduino的库函数支持,可以让Arduino通过蓝牙读取人脸的表情、姿态、位置信息,库的使用非常简单,看示例代码就知道了。(库地址见文末)
依然是通过这样的蓝牙模块连接,连接线如图:
注意的是只需要接蓝牙的Tx,不需要接Rx,这样是为了让Arduino的print函数依然可以往控制台打印数据,另外下载程序的时候不要连接蓝牙不然会数据冲突无法下载。还需要注意初始化的波特率必须跟蓝牙模块一致(默认是9600,想要延迟更低的话可以改成115200)。
其实用软串口的话就没有这些问题了,但是我好懒。。没时间完善库😥,要是有同学加上了软串口功能可以找我把代码整合进去。
更新:已经改用软件串口,可以自定义端口了
APP兼容性
由于这个东西后面是要应用到机器人上面的,所以一直在我的老开发机RAZR M上跑(没有更多的手机做测试😪),目前只适配了高通系的CPU,其他的某些手机可能由于CPU架构区别会出现闪退的情况,这个情况比较少但是不排除有,有问题的可以在下载页面留言机型和系统,我会尽快适配。
APP下载:腾讯应用宝搜索“i颜艺Boy”下载
Arduino库的地址:https://github.com/david-pzh/FaceAPP-Arduino