在WebRTC上实现ML Kit笑容检测

简介: ...

640?wx_fmt=jpeg


本文来自Houseparty的WebRTC视频专家Gustavo Garcia Bernardo和TokBox的WebRTC移动端专家Roberto Perez,他们通过Google的ML Kit在WebRTC通话中实现了简单的笑容检测,期间考虑到了检测准确率、延时以及检测频度与CPU占用率的平衡等,实际结果表明ML Kit的检测结果令人满意。LiveVideoStack对本文进行了摘译。


文 / Roberto Perez, Gustavo Garcia

译 / 元宝

原文 : https://webrtchacks.com/ml-kit-smile-detection/


现在,在大部分时间里建立视频通话变得相对简单,我们可以继续使用视频流做一些有趣的事情。随着机器学习(ML)的新进展以及越来越多的API和库的出现,计算机视觉也变得越来越容易。Google的ML Kit是最近提出的一个新的基于机器学习的库,可以快速访问计算机视觉输出。


为了展示如何使用Google的新ML KIT来检测实时WebRTC流上用户的笑容,我想欢迎过去Houseparty的WebRTC视频大师Gustavo Garcia Bernardo。与此同时欢迎TokBox的移动WebRTC专家Roberto Perez。他们给出了一些关于做面部检测的背景知识,展示了一些代码示例,但更重要的是分享了他们实现实时通信(RTC)应用程序内的微笑检测的最佳配置的研究。

  

介绍


在实时通信(RTC)中最常见的机器学习(的例子是计算机视觉。然而,除了使用人脸检测进行识别、跟踪和增强之外,我们还没有看到这些算法的许多实际应用。 幸运地是两周前Houseparty首席执行官Ben Rubin发表的一则让我们有机会探索人造视觉用例的评论:


“若有人可以做一个来检测笑脸的编外项目,以便让我们可以开始测量笑容并在仪表板上显示。 我认为这在许多不同的层面上都很重要。”


几乎与此同时,Google发布了他们用于机器学习的新的跨平台移动SDK,名为ML Kit。 我们想要立即测试这个。 幸运地是,所有的行星都可以让我们在一个真正的应用上尝试一下,即:在WebRTC对话中,在iPhone本地上通过ML检测笑容。


框架选择


我们可以一些设备上的机器学习框架和库开始这项任务。这种类型的用例最有名的库可能是OpenCV。 OpenCV是一个非常成熟的多平台解决方案,具有多种基于传统图像处理技术的功能。 特别是对于iOS,Apple去年在这一领域开始添加一些新的API接口。现在他们拥有高层次的Vision框架和更低层次但更灵活的CoreML。 在Android方面,ML支持主要由Tensorflow Lite提供。另外还有,在前面提到的,Google最近添加了新的ML Kit框架。


ML Kit具有一些优点。首先,它是多平台的,支持Android和iOS。 它也有几个不同级别的抽象概念(高级和低级的API)。另外,它提供了不同的部署和执行模型,允许在设备上和在云中进行处理。 最后,它还能够实时优化和更新设备上的模型。

  

实现


从流中提取图像


我们需要做的第一件事是将ML Kit集成在我们的WebRTC应用程序,以便访问这些图像。 我们需要获取本地或远程框架(取决于我们的用例)并将它们转换为ML Kit支持的正确格式。


640?wx_fmt=png


ML Kit 人脸检测实验中 帧图像朝上的方向


在iOS中,ML Kit支持以UIImage或CMSampleBufferRef格式传递的帧。 注意 - 请确保旋转图像以保证图像帧“朝上”。根据您使用的不同WebRTC API,获取图像的方法也不同。如果你使用官方WebRTC iOS框架,则可以将新的渲染器连接到本地或远程RTCVideoTrack,以接收视频帧作为RTCVideoFrame的实例。 通过访问YUV缓冲区,你可以轻松地将其转换为UIImage。


如果你使用的是像TokBox这样的平台上的API,那么你将使用自定义驱动程序访问原始本地帧,然后在用户端收到它们后将它们传递给WebRT和/或远程帧。 这些帧将作为CVPixelBuffer或YUV缓冲区接收,这些缓冲区也很容易转换为UIImage。


人脸检测API


640?wx_fmt=png


一旦你有了UIImage的框架,你可以将它传递给ML Kit人脸检测器。正如我们稍后在大多数情况下会看到的那样,您只会传递一定比例的帧,以减少对CPU使用率的影响。这是一段代码,展示了访问ML Kit API的容易程度:  


概率阈值


我们发现使用0.5作为微笑概率阈值为我们的需求提供了良好的结果。 你可以看看我们构建的示例应用程序中的完整代码,通过利用使用OpenTok捕获视的频和上面的代码来检测微笑的概率。  


性能评估


RTC应用程序通常是资源密集型的。 添加机器学习增加了这一点,所以资源消耗是一个主要问题。对于ML,通常要在准确性和资源使用之间进行权衡。在本节中,我们从不同的角度评估这些影响,为决定如何将这些功能引入应用程序提供一些预期值和指导方针。


注意:以下测试中的所有结果均在使用低端的iPhone 5 SE设备完成。


时延


要考虑的第一个重要参数是执行检测需要多长时间。


ML Kit具有一系列设置:

  • 检测模式:ML Kit在此提供两个选项:Fast vs. Accurate(快速与准确)。

  • 标记:识别眼睛,嘴巴,鼻子和耳朵。启用此功能会减慢检测速度,但我们得到的结果要好得多。

  • 分类:我们需要此功能进行笑脸检测

  • 脸部跟踪:跨帧跟踪相同的脸部。启用它可以使检测速度更快


640?wx_fmt=png


检测时间以毫秒为单位 (ms)


精确模式和快速模式之间的差异并不大(除非跟踪功能被禁用)。 我们用快速模式获得的精确度非常好,所以我们决定采用以下组合:快速模式+标志+追踪。  


CPU使用率


接下来我们将评估CPU使用率。 我们以每秒25帧的速率来处理。 在我们的用例中(以及其他许多情况下),我们不一定需要处理每一帧。 CPU /电池节省对我们来说比检测每一个微笑更重要,因此我们运行了一些测试,修改了我们传递给ML Kit进行识别的每秒帧数。  


正如您在下图中看到的那样,在默认基线之上的额外CPU使用率(仅从摄像头捕获而不进行任何ML处理)与传递至ML Kit的脸部和笑脸检测API的每秒帧数几乎成线性增长。


640?wx_fmt=png


ML Kit以不同帧率处理的CPU使用率


对于我们的实验,每1或2秒处理一帧时,CPU使用率就是合理的。


应用程序大小


现在,我们来考虑应用程序的大小。 我们的应用程序与任何应用程序一样,需要下载并加载。小总是好一些。随着ML套件的应用程序的大小“刚”增长约15Mb。 示例应用程序大小从只使用OpenTok时的46.8Mb到ML Kit添加进来后的61.5Mb。


640?wx_fmt=png


准确度


最后我们聊聊准确性。我们注意到的第一件事情是即使在快速模式下配置ML Kit时,面部检测的准确程度也是如此。 我们的测试是在一个典型的移动/桌面视频会议设置中完成的,人在看相机,没有任何物体阻挡它。 在其他情况下,检测会更加不可靠,并且不是很有用。 ML Kit也支持在图像中检测多个面,但我们没有进行太多的测试,因为它在我们应用程序的使用中并不常见。 

 

在我们的测试中,算法的决策总是非常接近人类可能会说的那样(至少在我们看来)。 您可以在下面看到一个视频以供参考,或者是自己运行示例应用并查看结果。  


结论


即使这个用例非常简单,它也使我们有机会评估新的有前途的ML Kit框架。 它让我们看到了向应用程序添加新计算机视觉功能的价值和便利性。 从我们的角度来看,这次评估的两个最有意思的结果是:一,这些模型的准确性之高令人惊讶,二,无法像预期中的在当今典型的移动设备中以全帧速率运行这些算法

  

同样重要的是要注意,这些人脸检测用例中的一些可以用更简单的图像处理算法来解决,而不是应用ML技术。 在这方面,像苹果核心图像这样的一些API可能会提供更好的资源与精确度之间的折衷 - 至少可以在iOS平台上进行人脸检测。

  

然而,传统的图像处理方法仅限于用在那些算法设计的一些简化场景。 ML算法可以进行扩展和重新训练。 例如,使用ML来检测自定义人员的其他特征(如性别,年龄等)也可能很好。这种分析级别超出了传统图像分析算法可以达到的级别。 


下一步


从技术角度来看,这次评估的下一步将是使用定制模型(可能使用CoreML)来实现更复杂的用例。 我们想到的是基于生成对抗网络的图像重建,用于非理想网络条件下的视频传输。这可能是提高视频质量的全新方法。



LiveVideoStackCon 2018讲师招募


640?wx_fmt=jpeg


LiveVideoStackCon 2018是音视频技术领域的综合技术大会,今年是在10月19-20日在北京举行。大会共设立18个专题,预计邀请超过80位技术专家。如果你在某一领域独当一面,欢迎申请成为LiveVideoStackCon 2018的讲师,让你的经验帮到更多人,你可以通过speaker@livevideostack.com提交演讲信息。了解大会更多详情,点击【阅读原文】访问LiveVideoStackCon 2018官网,报名即刻享受7折优惠。

相关文章
|
11天前
|
算法 计算机视觉 iOS开发
iOS 实时图像处理技术:Core Image 框架的应用
【4月更文挑战第8天】 在移动设备上实现高效的图像处理功能,对于提升用户体验和扩展应用程序能力至关重要。苹果公司的iOS平台提供了强大的Core Image框架,它允许开发者以高效和直观的方式执行复杂的图像处理任务。本文将深入探讨Core Image框架的关键特性,并通过实例演示如何在iOS应用中集成实时图像处理功能,不仅提高性能,同时保持了电池寿命的优化。我们将重点讨论面部识别、滤镜应用和性能优化等关键技术点,为读者提供一份全面的iOS图像处理指南。
|
11天前
|
算法 计算机视觉 iOS开发
iOS 实时图像处理技术:使用 Core Image 和 Metal 进行高效滤镜应用
【4月更文挑战第8天】 在移动设备上实现高效的图像处理功能是现代应用程序开发中的一个关键需求。苹果的iOS平台提供了Core Image和Metal两大技术,它们为开发者提供了强大的工具来实现复杂的图像处理任务。本文将探讨如何使用Core Image进行基础图像处理,并结合Metal的性能优势,开发出一个自定义的实时图像滤镜。我们将通过创建一个能够动态调整参数并且具有实时反馈效果的滤镜来演示这一过程。
|
3月前
|
机器学习/深度学习 人工智能 API
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5
|
3月前
|
机器学习/深度学习 存储 人工智能
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(3)
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(3)
|
3月前
|
机器学习/深度学习 Dart TensorFlow
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(5)
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(5)
|
3月前
|
机器学习/深度学习 存储 编解码
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(4)
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(4)
|
3月前
|
机器学习/深度学习 存储 算法框架/工具
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(2)
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(2)
|
3月前
|
机器学习/深度学习 存储 运维
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(1)
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11(1)
|
3月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
27 0
|
8月前
|
数据可视化 JavaScript 前端开发
Google开源了可视化编程框架Visual Blocks for ML
Visual Blocks for ML是一个由Google开发的开源可视化编程框架。它使你能够在易于使用的无代码图形编辑器中创建ML管道。
166 0