首页 > Web开发 > 详细

Jasper语音助理介绍

时间:2018-01-06 22:44:15      阅读:524      评论:0      收藏:0      [点我收藏+]

1. 介绍

Jasper是一款基于树莓派的开源语音控制助理

Jasper工作原理主要是设备被动监听麦克风, 当收到唤醒关键字时进入主动监听模式, 此时收到语音指令后进行语音识别, 然后对得到的文本进行语义内容解析并处理, 然后将处理结果通过语音合成并输出给用户.

其中涉及到的技术包括声音的录制和播放; 语音识别(ASR/STT); 语义内容(NLU/NLP); 语音合成(TTS)

2. 音频系统

2.1 硬件

音频系统的硬件设备为声卡, 声卡通过DAC(数模转换)和ADC(模数转换)实现音频的输入和输出.

下面是Linux下查看声卡设备的命令

$ lspci | grep -i audio
00:05.0 Audio device: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller (rev 01)

$ cat /proc/asound/cards
0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xf0804000 irq 21

2.2 软件

在Linux中音频系统结构如下

技术分享图片

在桌面Linux系统中, 音频系统通常包含驱动层服务层(声音服务器)和应用层.
在嵌入式系统中, 音频系统通过只包含驱动层应用层.

在Linux下有两套音频驱动系统, 分别是OSS和ALSA.

2.2.1 OSS

OSS(Open Sound System), 是类Unix和POSIX兼容系统上统一的声音架构, 兼容OSS API的应用程序可以方便地进行移植
OSS API 主要提供如下设备文件接口

/dev/mixer: 混音及控制
/dev/dsp:   音频输入输出

现如今大部分Linux系统并不提供OSS驱动, 而使用ALSA, 故在此不详述.

更多信息参考<OSS--跨平台的音频接口简介>

2.2.2 ALSA

ALSA(Advanced Linux Sound Architecture)是OSS的继任者, 目前已经成为Linux下主流音频架构
ALSA包含驱动函数库以及工具包

alsa-driver: 驱动部分, 集成在内核中, 大多以模块的方式存在

驱动可分为如下三层

- 底层的硬件操控层: 负责实现硬件操纵访问功能, 这也是声卡驱动程序中厂商需实现的主要部分
- 中间层核心层: 由各种功能的音频设备组件构成, 为用户提供一些预定义组件(如PCM、AC97、音序器和控制器等), 另外用户也可以自行定义设备组件
- 声卡对象描述层: 它是声卡硬件的抽象描述, 内核通过这些描述可以得知该声卡硬件的功能、设备组件和操作方法等

驱动程序为用户空间提供了如下抽象接口

/proc/asound:       信息接口
/dev/snd/controlCX: 控制接口
/dev/snd/mixerCXDX: 混音器接口
/dev/snd/pcmCXDX:   PCM接口
/dev/snd/midiCXDX:  MIDI接口
/dev/snd/seq:       音序器接口
/dev/snd/timer:     定时器接口

alsa-lib: 用户空间函数库, 封装驱动提供的抽象接口, 通过文件libasound.so提供API给应用程序使用

alsa-utils: 实用工具包,通过调用alsa-lib实现播放音频(aplay)、录音(arecord) 等工具

2.2.3 服务层

声音服务器介于ALSA和应用程序之间, 应用程序调用声音服务器的API来播放声音时, 同时把音频数据送到声音服务器, 声音服务器将一个以上的播放请求混音后, 再发送给底层的声卡驱动(ALSA/OSS), 由ALSA或OSS来驱动声卡播放混音后的数据.

ESD(Enlightened Sound Daemon, or EsounD): 是Gnome桌面环境的的声音服务器, 已被PulseAudio替代.
aRts(Analog Real-Time Synthesizer): 是KDE桌面环境的声音服务器, 已被Phonon替代.
PulseAudio: 新一代声音服务器, 能提供更好的音效, 目前是Gnome桌面的默认声音服务器.

2.2.4 其他软件

除了声音服务器之外, 还有一些常见的中间层/声音库
JACK Audio Connection Kit: 专业的声音服务器, 为应用程序之间的音频和MIDI数据提供实时、低延迟的连接.
GStreamer: 是用来构建流媒体应用的开源多媒体框架.
Phonon:     Qt上跨平台多媒体框架.
PortAudio:  跨平台开源的音频I/O库, 在Linux需要alsa-lib的支持.

3. 语音识别

语音识别(Speech recognition)技术, 被称为自动语音识别, ASR(Automatic Speech Recognition);
也称语音转文字, Speech To Text(STT)

4. 语音合成

语音合成即TTS(Text To Speech), 目前有开源的方案和专有方案

开源方案包括
- eSpeak/eSpeakNG、Ekho、Festival/FestVox/Flite

专有方案包括
- Google TTS、Amazon Polly、Neospeech TTS等
- Baidu TTS、Ali TTS、iFlyTek TTS等

4.1 eSpeak

eSpeak支持中文输出, 不过效果真心不敢恭维

$ espeak -vzh "我是中国人, 我爱中国"

4.2 Ekho

Ekho是一款免费的开源和多语言文本转语音软件
它支持粤语、普通话等等

4.2 Festival

Festival为爱丁堡大学CSTR开发的通用多语言语音合成系统
FestVox为CMU开发的用来构建合成声音的软件
Flite(Festival-Lite)为CMU开发的基于Festival的精简版语音合成系统
简单来说, Festival和Flite可以进行TTS转换, 然后使用FestVox提供的声音进行输出。

// Festival
# yum install festival
$ echo "Hello, You are using festival" | festival –tts
$ festival --tts myfile
// Flite

# yum install flite
$ flite "Hello, You are using flite" a.wav
$ aplay a.wav

Festival效果比espeak稍好, 不过不支持中文

参考:
<Alsa Opensrc Org>
<Linux ALSA声卡驱动开发最佳实践>
<How it works: Linux audio explained>

Jasper语音助理介绍

原文:https://www.cnblogs.com/hzl6255/p/8215551.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!