我很兴奋地告诉你,终于可以在浏览器中运行人脸识别了!这篇文章我将介绍 face-api.js ,这个类库构建于 tensorflow.js 之上。它实现了多个 CNNs(卷积神经网络)以解决人脸检测、人脸识别和人脸标识检测的问题,并进行了优化适用于网络和移动设备。
与往常一样,我们将看一个简单的代码示例,演示几行代码就可以使用该软件包。如果您想先尝试一些示例,请查看演示页面! 但不要忘了回来读这篇文章。 ;)
让我们开始吧!
注意,该项目正在积极开发中。请务必查看我的最新文章,随时了解 face-api.js的最新功能:
如何通过深度学习解决人脸识别
如果您希望尽快入门,您可以跳过这一节,直接跳到代码中。但为了更好地了解face-api.js 中用于实现人脸识别的方法,我强烈建议您继续学习,因为我经常被问到这一点。
简单来讲,我们想要实现的是,根据给定的人脸图像来识别一个人。方法是,为我们想识别的每个人提供一个(或多个)图像,并用人名标记。我们将输入图像与参考数据进行比较,找到 最相似的 参考图像。如果两个图像足够相似,输出 人名,否则输出未知。
提起来很容易!然而,还有两个问题。首先,如果我们有一多人的图像,并且我们想识别所有人,那会怎么样?其次,我们需要能够获得两个人脸图像的相似度百分比,以便对它们进行比较……
人脸检测
第一个问题的答案是人脸检测。简单地说,我们将首先定位输入图像中的所有人脸。Face-api.js 为不同的使用情况实现多个人脸检测器。
最准确的人脸检测器是 SSD(单发多框检测器 Single Shot Multibox Detector),它是基于 MobileNet V1 的CNN,在网络顶部堆叠了一些附加的框预测层。
更进一步,face-api.js 实现了优化的 Tiny Face Detector,是 Tiny Yolo v2 的甚至更小版本,它利用深度可分离卷积代替常规卷积,与之相比,速度更快,但精度略低 SSD MobileNet V1。
最后,还有一个MTCNN(多任务级联卷积神经网络)实现,但是现在主要用于实验目的。
网络会返回每个面孔的边界框,以及相应的得分,例如每个边界框显示一张脸的概率。分数用于过滤边界框,因为图像可能根本不包含任何面孔。请注意,即使只有一个