Android车载开发启示录|语音篇-全局在胸

1,655 阅读15分钟

前言

笔者在从事Android车载行业的开发过程中,发现Android车载开发和平时的Android开发还是有很大不同之处,对于一个小白来说或者说如果是刚入行的新人都会很陌生,目前市场也没有很多系统性的知识提供给大家。

所以笔者准备通过一个专栏系列,把自己在车载开发过程中的学习记录和开发经验记录下来并分享出来,希望能给大家带来一些帮助。

在第一篇内容,笔者介绍了Android车载操作系统现状、整个操作系统架构和架构下核心概念:

Android车载开发启示录(一)

第二篇内容,笔者介绍了Android Automotive操作系统中的一个关键组件CarFramework

Android车载开发启示录(二)

第三篇,笔者介绍音频焦点相关的知识,为后续介绍音频相关的内容打好基础

Android车载开发启示录(三)

第四篇,笔者介绍了车载音频系统架构、CarAudioManager和CarAudioService和多音区音频

Android车载开发启示录(四)

另外笔者也开启了主线之外的番外系列篇:Android车载开发启示录|番外篇-概念之中

接下来,笔者会开启专题篇之语音篇:

本篇笔者会介绍车载语音系统的整体实现流程,目的是先让大家能对车载语音系统有个全局性的了解,初步认识下我们和车载语音助手的一次对话会经历哪些流程。

由于整个语音系统中涉及多个复杂的技术和模块,包括语音识别、自然语言处理(NLP)、语音合成和通信等。而各个模块涉及到的都是一个很深的技术领域,所以本篇内容只会简单介绍下核心概念和用到的技术:

  • 1.语音捕捉
  • 2.语音识别
  • 3.自然语言处理
  • 4.文本到语音

交互流程和核心技术

车载语音整个交互流程简单用一段话描述就是:

通过语音识别技术将驾驶员的语音指令转化为可理解的指令,然后通过语音合成技术将系统的反馈信息以语音形式传达给驾驶员。

车辆内部的交互界面采用语音作为主要的输入和输出方式进行操作和反馈。

车载系统流程.jpg

语音捕捉

车载语音系统首先需要捕捉用户的语音输入,这通常通过安装在车内的麦克风阵列实现。麦克风阵列可以有效地减少噪音和回声,提高语音信号的质量。

麦克风阵列

所谓麦克风阵列其实就是一个声音采集的系统,该系统使用多个麦克风采集来自于不同空间方向的声音。麦克风按照指定要求排列后,加上相应的算法(排列+算法)就可以解决很多房间声学问题,比如声源定位、去混响、语音增强、盲源分离等。

车载系统通常不只是使用单一麦克风而是麦克风阵列,因为:

  1. 麦克风阵列从不同方向捕捉声音,从而可以提高语音捕捉的灵敏度和准确性
  2. 通过算法分析不同麦克风接收到的信号,可以更好的区分出语音和背景噪音。

麦克风阵列.webp

噪声抑制

在语音识别中,语音信息中往往夹杂着噪音,常见的有环境噪音和人声干扰,通常不会掩盖正常的语音,只是影响声音的清晰度。

麦克风阵列主要通过波束形成技术,来抑制噪音,增强人声。可以理解为只识别某个角度的声音(一般角度可以进行调节),其他角度的声音都会受到抑制,从而实现抑制噪音的目的。反过来也可以增强角度内的人声,就是增强人声。

噪声抑制.webp

回声消除

我们都知道回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音。一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声;但是大多数回声都是负面影响,比如在有线或者无线通信时重复听到自己讲话的声音

在车载环境下,常见的回声来源有:

  1. 扬声器回声:车载系统播放的音频通过扬声器发出,部分音频反射回来,被麦克风捕捉到。
  2. 车内反射:声波在车内的反射面(如车窗、仪表盘、座椅)上反射,形成回声。
  3. 声学耦合:扬声器和麦克风之间的物理距离和位置导致直接的声学耦合。

回声消除(Acoustic Echo Cancellation,AEC ) 是指消除系统自身发出的声音回馈到麦克风中的现象。在车载环境中,通过回声消除可以为了避免声音反射对语音识别的干扰。

回声消除技术通过检测并消除回声信号,从而保留原始语音信号。基本原理如下:

  1. 利用扬声器输出的音频信号作为参考信号,来检测回声成分。
  2. 建立一个回声路径模型,预测回声信号的特征。
  3. 利用预测的回声信号,通过算法抵消实际捕捉到的回声信号。

语音激活检测

语音激活检测(VAD: Voice Activity Detection) 是一种用于检测语音信号中何时存在语音活动的技术。它的主要目的是区分语音和非语音(如背景噪声、静音等)信号,从而提高语音识别系统的效率和准确性。

基本原理:语音激活检测通过分析输入音频信号的各种特征来判断是否存在语音活动。

常用的方法包括:

  1. 基于能量的VAD方法通过检测音频信号的能量变化来判断语音活动。
  2. 基于频谱特性的VAD方法通过分析信号的频谱特性来判断语音活动。
  3. 基于统计模型的VAD方法利用概率和统计模型来判断语音活动。
  4. 利用机器学习算法进行语音激活检测。

预处理

预处理是语音信号处理中至关重要的一步,通过信号归一化、滤波、去噪、分帧与加窗、特征提取和特征处理等步骤,可以显著提高语音信号的质量和特征的代表性,为后续的语音识别和自然语言处理提供可靠的基础。预处理的效果会直接影响系统的识别准确性和性能。

语音识别

语音识别(Automatic Speech Recognition,ASR) 是将人类的语音信号转换成对应的文本或指令的技术。

语音识别流程图-1.webp

语音唤醒

语音唤醒(Voice Wake-Up) 是语音识别系统中一个关键的初始环节,旨在持续监听特定的唤醒词,当检测到该词时,激活语音识别引擎。

唤醒词检测

轻量级模型:为了高效检测唤醒词,使用轻量级的深度学习模型,如深度神经网络(DNN)、卷积神经网络(CNN)或长短时记忆网络(LSTM)。

实时检测

特征输入:将提取的特征向量实时输入到预训练的唤醒词检测模型中。 概率计算:模型输出唤醒词的概率。如果该概率超过预设阈值,则判定检测到唤醒词。

唤醒确认

多级验证:在初级检测模型之后,使用更复杂的模型或算法进行进一步验证,以减少误唤醒率。 用户反馈:在确认唤醒词被正确检测到后,系统通过播放提示音或显示视觉提示,告知用户系统已被唤醒。

特征提取

特征提取是将语音信号转换为特征向量的过程,以便进行后续的识别。

  1. 短时傅里叶变换(STFT) STFT能够捕捉语音信号的时间和频率信息。将时域音频信号转换为频域信号,生成频谱图。

  2. 梅尔频率倒谱系数(MFCC) MFCC能有效表示语音的声学特性。从频谱图中提取梅尔频率倒谱系数,这是一种常用的语音特征。

还可以提取其他特征,如线性预测倒谱系数(LPCC)、感知线性预测系数(PLP)等,根据具体应用需求选择合适的特征提取方法。

语音识别模型

语音识别模型负责将特征向量转换为对应的文字或指令。

声学模型

声学模型将音频特征与音素对应起来。常用的模型包括:

  • 隐马尔可夫模型(HMM):将语音信号建模为一系列隐藏状态的序列,每个状态对应一个音素。
  • 深度神经网络(DNN):可以捕捉语音信号的复杂特征,提高识别准确率。
  • 卷积神经网络(CNN):能够有效提取语音信号的空间特征,增强模型的鲁棒性。
  • 长短时记忆网络(LSTM):能够捕捉语音信号的时间依赖性,适用于处理长时间序列。

语言模型

语言模型利用上下文信息提高识别的准确性。常用的模型包括:

  • n元模型(n-gram model):根据前n-1个词预测当前词的概率。
  • 递归神经网络(RNN):能够处理不定长的序列数据,捕捉上下文信息。
  • 变分自编码器(VAE)和生成对抗网络(GAN) 等先进模型:可以进一步提高语言模型的性能。

端到端模型

端到端模型直接将音频输入映射为文本输出,避免了传统方法中的多个步骤。常用的端到端模型包括:

  • 连接主义时序分类(CTC):适用于处理变长输入和输出的映射问题。
  • 注意力机制(Attention Mechanism):Attention机制能够自动对齐输入和输出,提高识别性能。
  • 序列到序列模型(Seq2Seq):结合了编码器和解码器,用于将输入序列转换为输出序列。

解码

解码过程将模型的输出转换为最终的文本。常用的解码方法包括:

  • 维特比算法(Viterbi Algorithm):用于寻找最优状态序列。
  • 束搜索(Beam Search):在每一步保留多个最优解,找到最优的输出序列。

自然语言处理

自然语言处理(Natural Language Processing, NLP)是计算机科学与人工智能的一个重要领域,旨在实现计算机对人类语言的理解、生成和处理。

通俗点说,不同的语言之间是无法直接沟通的,比如说人类就无法听懂狗叫,甚至不同语言的人类之间都无法直接交流,需要翻译才能理解各自的意思。而对于人类与计算机来说,NLP就是在机器语言和人类语言之间沟通的桥梁,用以实现人机交流的目的。

NLP由以下两个部分组成:

  • NLU(Natural Language Understanding,自然语言理解)
  • NLG(Natural Language Generation,自然语言生成)

自然语言理解

自然语言理解(NLU,Natural Language Understanding) 是所有支持机器理解文本内容的方法模型或任务的总称,包括分词,词性标注,句法分析,文本分类/聚类,信息抽取/自动摘要等任务。简单来说,就是希望计算机能够像人一样,具备正常的语言理解能力。

举个例子,展示NLU如何工作:

假设用户在一个聊天机器人中输入以下内容:“我想订一张明天去纽约的机票”。

  • 意图识别:机器人识别出用户的意图是“预订机票”。
  • 实体识别:机器人识别出“明天”是出发日期,“纽约”是目的地。
  • 生成响应:机器人基于识别出的意图和实体生成适当的响应,如“好的,我帮您查询明天去纽约的航班信息”。

NLU的核心任务包含

  1. 意图识别(Intent Recognition)
  • 目的:理解用户在说什么,以及他们的意图是什么。
  • 示例:用户说“我想订一张明天去纽约的机票”,系统需要识别出用户的意图是“预订机票”。
  1. 实体识别(Entity Recognition)
  • 目的:识别和提取句子中的关键信息,如人名、地名、日期等。
  • 示例:在“我想订一张明天去纽约的机票”这句话中,识别出“明天”是日期,“纽约”是目的地。
  1. 情感分析(Sentiment Analysis)
  • 目的:判断文本的情感倾向,如积极、消极或中性。
  • 示例:分析用户评论“这家餐厅的服务太差了”,判断这是一个消极评价。
  1. 语义角色标注(Semantic Role Labeling)
  • 目的:识别句子中各个部分的语义角色,如谁做了什么事情。
  • 示例:在“约翰打电话给玛丽”这句话中,识别“约翰”是行为者,“打电话”是动作,“玛丽”是接收者。

自然语言生成

自然语言生成(NLG:Natural Language Generation) 是一种自动将结构化数据转换为人类可读文本的软件过程。

假设要生成一个关于天气的报告,通过下面这六个步骤,NLG系统能够将结构化数据转换为自然语言文本,提供用户可读的报告或内容:

  1. 内容确定:确定包括温度、降水概率和风速的信息。
  2. 文本规划:决定先描述总体天气情况,再提供具体数据。
  3. 句子规划:选择句型,如“预计温度为...”。
  4. 语言实现:生成句子“预计温度为25°C,降水概率为40%。”
  5. 参考生成:使用“它”指代前面提到的“温度”。
  6. 表达变换:校对和优化文本,确保语法正确和流畅。

文本到语音

文本到语音(Text-to-Speech,TTS)是将书面文本转换为自然语言语音的技术。通俗点说让机器说人话的技术。

TTS的过程会经过以下步骤:

  1. 文本分析(Text Analysis)
  2. 语言处理(Linguistic Processing)
  3. 语音合成(Speech Synthesis)
  4. 音频后处理(Audio Post-processing)

文本分析

文本分析(Text Analysis):对输入文本进行预处理和规范化,确保文本格式一致且易于后续处理。

  1. 预处理(Preprocessing):去除多余的空白字符、标点符号处理、扩展缩写词等。
  2. 句子分割(Sentence Segmentation):根据标点符号(如句号、问号、感叹号)将文本分割成单个句子。
  3. 词语分割(Tokenization):将句子分割成单个词语或标记(Token)。

语言处理

语言处理(Linguistic Processing):理解和标记文本中的语言特征,为语音合成做准备。

  1. 词性标注(Part-of-Speech Tagging):标注每个词的词性(如名词、动词、形容词等)
  2. 语法分析(Syntactic Parsing):分析句子的语法结构,确定主语、谓语、宾语等成分。
  3. 语义分析(Semantic Analysis):理解句子的意义和上下文,确定词语的语义角色。
  4. 音素标注(Phonetic Transcription):将文本转换为音素序列,即发音单位。

语音合成

语音合成(Speech Synthesis):将音素序列转换为连续的语音信号。

  1. 基于拼接的方法(Concatenative Synthesis):将预录制的音素片段拼接成完整的语音信号。此方法音质较高,适合稳定的应用场景。但需要大量的录音数据,灵活性差。
  2. 基于参数的方法(Parametric Synthesis):使用统计模型(如隐马尔可夫模型,HMM)生成语音参数,再由语音合成器合成语音。此方法模型较小,灵活性较高,但音质较低,语音较为机械。
  3. 基于深度学习的方法(Neural Network-based Synthesis):使用深度神经网络(如WaveNet、Tacotron)直接生成高质量语音信号。此方法音质高,能生成自然且流畅的语音,但需要大量数据和计算资源。

音频后处理

音频后处理(Audio Post-processing):优化合成的语音信号,提高语音质量和自然度。

  1. 语音增强(Speech Enhancement):去除噪声、回声等,提升语音的清晰度。
  2. 语音调整(Speech Adjustment):调整语速、音调、音量等参数,使语音更符合自然语言表达习惯。
  3. 拼接优化(Smoothing):处理拼接处的过渡,使语音更加流畅自然。

参考

  1. 语音检测(VAD)原理和实例
  2. 语音交互的三驾马车:ASR、NLP、TTS
  3. 深度解读 TTS 技术的原理及挑战
  4. 车载界面语音交互设计指南
  5. 语音交互:先从麦克风阵列聊起