在浏览器中使用机器学习来假唱你最喜欢的歌曲!

12(1) (1).gif

来源:TensorFlow Blog

编译:威踢踢

今天我们发布了LipSync,这是一种网络体验,可以让你在浏览器中对着音乐假唱。创建LipSync是为了以一种有趣的方式演示TensorFlow.js的facemesh模型。我们与澳大利亚歌手Tones and I合作,让您在本演示中假唱《Dance Monkey》。

使用TensorFlow.js和FaceMesh

FaceMesh模型由(MediaPipe建立)仅通过网络摄像头和机器学习设备,就可以对面部表情关键点的进行实时高密度评估——这意味着所有数据都在你的机器中进行推断。我们基本上是通过嘴和嘴唇周围的关键点来评估你与《Dance Monkey》歌词的同步程度。

确定正确性

当第一次测试演示时,许多人认为我们使用了复杂的唇读算法来匹配口型和歌词。唇读很难实现,所以我们想出了一个更简单的解决方案。我们一帧一帧地记录下与音乐相配的“正确”嘴型,然后当用户玩游戏时,我们将嘴型与预先录制的基线相比较。

 2(1).gif


测量你的嘴型

嘴型是什么?有许多不同的方法来测量你的嘴的形状。我们需要一种技术,该技术允许用户在唱歌的时候转动他们的头,对于不同的嘴型、大小和与相机的距离,相对来说比较宽容。

嘴部比例

比较嘴型的一种方法是比较嘴部的宽高比。例如,如果你闭着嘴发出“嗯”的声音,那么你的宽高比就很高。如果你的嘴巴张开发出“ooo”的声音,那么你的嘴巴宽高比将接近1:1。

 3.png

虽然这种方法大部分是有效的,但仍然存在一些特殊情况,使得检测算法的鲁棒性不强,因此我们探索了另一种方法,称为Hu矩,以下是解释。

OpenCV匹配Hu矩

在OpenCV库中,有一个matchShapes函数,它比较形状并返回相似度评分。在底层,matchShapes函数使用了一种叫做Hu矩的技术,它提供了一组通过中心矩计算的数字,这些中心矩对图像变换是不变的。这使得我们可以不考虑平移、缩放和旋转来比较形状。因此,使用者可以自由旋转头部而不影响对嘴型本身的检测。

我们用这一点加上上面的嘴型来确定嘴型的轮廓有多接近。

视听反馈

在我们最初的原型中,我们想要对用户的表现做出即时的声音反馈。我们将声带从歌曲的其他部分中分离出来,并根据用户口型的实时表现评分来改变音量。

4.png

人声轨道

5.png

乐器轨道

 

这样我们就可以创造出这样的效果:如果你停止对着歌曲口型,歌曲的抒情部分就会停止播放(但背景音乐仍在继续播放)。

虽然这是一个有趣的方式来演示嘴型匹配算法,但它仍然没有达到你在卡拉ok时命中正确的音符,或在街机节奏游戏中完成一长串动作时所获得的令人满意的快感。

我们首先添加了一个实时分数,然后随着时间的推移,当玩家玩游戏时,实时分数会显示给玩家。在我们最初的测试中,并没有达到我们的预期。分数让人摸不着头脑,确切的数字也没有什么特别的意义。我们还希望用户能将注意力集中在歌词和屏幕的中心,而不是侧边的乐谱上。

所以我们选择了一种不同的方法,更倾向于依靠叠加在玩家脸上的视觉效果,当他们假唱时,音乐和颜色将会显示玩家的表现如何。

6(1).gif7(1).gif

试着自己玩 Lip Sync!

TensorFlow.js和FaceMesh使基于网络的、有趣的、交互式的体验超越了基本的面部滤镜,而且只要有一点创造性的思考,我们就可以获得口型同步的体验,而不需要完全读唇的ML模型的复杂性。

你可以在这里体验到Lip Sync:

//lipsync.withyoutube.com/