Android开发正在经历快速变革,每天都有新的东西冒出来。昨天Android Studio刚刚取代了Eclipse,今天Android O就发布了。还有RxJava,kotlin语言,机器学习…码农们追的不亦乐乎。今天谈的是机器学习在Android上的一个实例:人脸检测功能。

移动视觉接口(Mobile Vision API)。

谷歌为Android提供的这套移动视觉接口,主要有三大功能:条码二维码检测和识别,文本检测和识别,最后就是人脸检测

关于人脸检测,多说一句

很多业余选手,容易混淆人脸检测和人脸识别的概念。说的通俗一点,检测回答的是“脸在哪里”,而识别则是“哪个是张三”。目前谷歌的移动视觉接口里,提供的是检测功能,还没有识别功能。

书要简短,直接开始

第1步,在Android Studio上建立一个项目,名字就叫Mobile Vision API demo吧。

第2步,因为移动视觉接口不是Android原生功能,而是谷歌Play Service的一部分。所以要在项目的build.gradle文件里添加play service sdk的编译依赖。这里提一句,如果引用整个的谷歌play service,很容易让工程出现65k method上限问题。所以,这里只引用Play Service的移动视觉接口。

第3步,在项目的manifest.xml里,添加meta data标签,启用人脸检测功能。

第4步,写一个简单界面,在layout文件里添加一个ImageView,用于展示图片和检测结果。

第5步,在layout里再添加一个Button,用于选图或是拍照。这步很简单就略啦。

第6步,用Canvas和Paint结合,实现画脸框和标记点的功能。

第7步,主角FaceDetector API要上场啦。例子代码中把tracking功能禁掉了,因为我们的app只有一张Bitmap,如果数据源是摄像头里的连续视频,就需要打开tracking。

第8步,FaceDetector对象创建之后,不要着急使用。先得检查一下能不能用。那位说了,这编译都通过了,怎么还有不能用的情况?

答案也很简单,还记得前面提到的移动视觉功能依赖谷歌Play Service吗?手机在首次使用人脸检测功能时,会下载对应的库文件。网络下载这事有快有慢。所以为了确保检测功能正常可用,使用前请先检查一下。

第9步,选一张有脸的Bitmap,传给detector,就可以得到一组人脸信息。

第10步,根据第9步的人脸信息,使用第6步的绘制功能,把脸框和标记画出来

第11步,展示到界面上,释放检测资源

好啦,到这里就完成了一个简单的人脸检测demo。