「唇语识别技术」看不透TA的心,但可以听懂TA的话

导读

唇语识别有着极长的历史。古代的唇语师通过长期的训练,具备了“观察别人的嘴型,解读其表达语句”的能力。在现代社会里,一些听力障碍者们也会使用这种技巧与他人交谈,补充听力器官的不足。

但这项工作对机器而言则要复杂了许多。唇语识别是一项集机器视觉与自然语言处理于一体的技术。通过视觉技术从图像中连续识别出人脸,并提取此用户连续的口型变化特征,再其输入到唇语识别模型中,即可识别出该用户口型所对应的发音,进而计算出语句。

2003 年,Intel便已开发了唇语识别软件AVSR,开发者得以研发可以进行唇语识别的计算机。2016 年,谷歌唇语识别技术就已经支持 17500 个词,新闻测试集识别准确率达到了 50% 以上。

那唇语识别究竟是如何实现的?

本期将将以Amirsina Torfi 等人实现的使用 3D 卷积神经网络的交叉视听识别技术为引,介绍唇语识别技术。

唇语识别

唇语识别/Lip Reading

Github:github.com/astorfi/lip-reading-deeplearning​github.com

软件地址:暂无项目基于用于交叉视听匹配识别的3D卷积神经网络实现。模型结构如下图。模型具有以下四个特点:

  • 输入是音频和视频,输出是他们是否匹配
  • 标签是音频视频是否是一样的
  • 衡量音频视频3D卷积后的低维映射之间的欧氏距离
  • 两个重要的手段去掉多余数据

当音频损坏时,视听语音识别(AVR)被认为是完成语音识别任务的另一种解决方案,同时,它也是一种在多人场景中用于验证讲话人的视觉识别方法。

AVR 系统的方法是利用从某种模态中提取的信息,通过填补缺失的信息来提高另一种模态的识别能力。

这篇文章提出了利用耦合的三维卷积神经网络(CNN)架构,该架构可以将两种模态映射到表示空间,以使用学习到的多模态特征来评估音频 - 视频流的对应关系。

这种体系结构将结合空间和时间信息共同有效地发现不同模态的时间信息之间的相关性。通过使用相对较小的网络体系结构和更小的数据集,其方法超越了现有的用于视频匹配的相似方法的性能。

代码实现

输入管道必须由用户提供。其余实现将考虑包含基于话语的提取特征的数据集。▌唇语识别对于嘴唇跟踪,必须将所需的视频作为输入。首先,将cd转到相应的目录:

cd code/lip_tracking

运行专用python file如下:

python VisualizeLip.py --input input_video_file_name.ext --output output_video_file_name.ext

运行上述脚本可以通过保存每帧的嘴巴区域来提取嘴唇动作,并创建一个在嘴巴区域周围具有矩形的输出视频,以实现更好的可视化效果。

所需文件arguments由VisualizeLip.py文件中定义的以下python脚本定义:

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", required=True,
             help="path to input video file")
ap.add_argument("-o", "--output", required=True,
             help="path to output video file")
ap.add_argument("-f", "--fps", type=int, default=30,
             help="FPS of output video")
ap.add_argument("-c", "--codec", type=str, default="MJPG",
             help="codec of output video")
args = vars(ap.parse_args()

▌处理

一些已定义的参数具有其默认值,并且它们不需要进一步的操作。

视觉部分,视频通过后期处理使其帧率相等,均为 30。然后,使用 dlib 库跟踪视频中的人脸和提取嘴部区域。最后,所有嘴部区域都调整为相同的大小,并拼接起来形成输入特征数据集。

数据集并不包含任何音频文件。使用 FFmpeg 框架从视频中提取音频文件。数据处理管道如下图所示:

▌输入管道

所提出的体系结构利用了两个不同的ConvNet,它们使用一对语音和视频流。网络输入是一对特征,表示从0.3秒的视频剪辑中提取的嘴唇运动和语音特征。主要任务是确定音频流是否在所需的流持续时间内与嘴唇运动剪辑相对应。

语音网与视觉网

▌语音网络

在时间轴上,时间特征是20ms的非重叠窗口,用于生成具有局部特征的频谱特征。输入语音特征图(表示为图像立方体)与频谱图以及MFEC特征的一阶和二阶导数相对应。

这三个通道对应于图像深度。从0.3秒的剪辑中,可以得出15个时间特征集,这些特征集形成了语音特征立方体。单个音频流的每个输入特征图的尺寸为15×40×3。上图描述了这种表示形式。

语音特征使用 SpeechPy 包进行提取。要了解输入管道是如何工作的,请参阅:

code/speech_input/input_feature.py

▌视觉网络

在此过程中使用的每个视频剪辑的帧速率均为30。因此,9个连续的图像帧形成0.3秒的视觉流。网络可视流的输入是一个9x60x100大小的多维数据集,其中9是表示时间信息的帧数。每个通道都是嘴巴区域的60x100灰度图像。

训练与结果

▌训练与评估

首先克隆存储库。然后cd到专用目录:

cd code/training_evaluation

最后,train.py必须执行该文件:

python train.py

在评估阶段,必须执行类似的脚本:

python test.py

▌结果

下面的结果表明了该方法对收敛准确度和收敛速度的影响。

最好的结果,也就是最右边的结果,属于我们提出的方法。

所提出的在线对选择方法的效果如上图所示。项目代码可访问Github地址或关注gzh获取。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注