最新消息:

机器人课程系列:树莓派实时口译机器人

Raspberry Pi 少儿编程 2525浏览 0评论

语音处理技术是当前很热门的一个主题,今天用树莓派来做一个实时口译机器人,透过这个项目来初步探讨一下语音消息和文字讯息之间进行转换的技术。

 

机器人课程系列:树莓派实时口译机器人

TTSSTT谈起

TTS Text-To-Speech文字转语音技术,看似单纯的字句一对一转换,背后可是牵涉到种种复杂的判断处理以及语音数据的分析应用,才能让计算机发出各种维妙维肖、比拟人声且抑扬顿挫的口语发音:

 

机器人课程系列:树莓派实时口译机器人

TTS的应用领域相当广泛,除了使用在既有的导航系统、车机、有声书或行动装置之外,更多因应行动网络而衍生的语音互动功能,如家用机器人以及FB带动的chat bot聊天机器人,皆让TTS的后势更加看好,此外不可忽视的是,未来还有众多视力不佳听力受限的老年化人口需要透过TTS语音的辅助。

至于STTSpeech-To-Text),它的角色就像I/O接口的Input,负责将用户的口说讯息转换为文字提供给系统进行分析处理,理论上,STT所需的技术含量比起TTS更复杂门坎也更高,主要原因是它所直接处理的是非结构化的语音文件,这需要透过大量的语音数据库经过过长时间的特征比对与学习,并结合高效率的硬件平台的辅助,才能在短时间内完成复杂的语意分析,准确无误的判别使用者说话内容分析其意图,实时响应使用者正确的需求。

 

机器人课程系列:树莓派实时口译机器人

目前较成熟的STT系统多采用云端方式,例如GoogleWeb Speech APIMicrosoftBing Speech APIIBM Watson Developer CloudSpeech to TextnuanceDragonspeech recognition等等。此外,Facebook旗下的wit.ai,以及它的竞争对手api.ai也都提供开发者功能相当多且强大的STT系统,并支持完整的API和说明档,唯一可惜的是他们这些云端服务都必须连网才能使用.如果我们的产品不具网络功能但又需要STT语音,那么可以考虑espeakJuliusCMU-Sphinx这类可安装在本机端的开源STT系统,只是我们必须自行花时间建立语音数据库自行训练,才能得到满意的输出效果。

系统目标

本项目将制作出一个自动口译机器人,只要对着它说话,就能马上将所说的内容翻译成英文(或他国)语言说出来。在这项目里充份运用了Python的开源modules,只要一步步照著作便可以实作出来。

材料准备

树莓派主板Raspberry Pi 3 Model B x 1

LM386增益音频放大模块 x 1

扬声器0.5w x 1

3.5”音源线  x 1

USB 麦克风 x 1

TFT LCD : 2.2吋,使用ILI9341驱动的TFT LCD,可透过SPI接口与RPIArduino连接,电源3.35V皆可。

制作过程

使用了三种Google云端服务以及相对应的Python模块。

 

机器人课程系列:树莓派实时口译机器人

Python模块使用

SpeechRecognition

https://pypi.python.org/pypi/SpeechRecognition/

它将一些常用的speech recognition系统整合在一起,方便我们使用,可省下相当多的开发时间。该模块整合了下列知名的STT API

CMU Sphinx (works offline)

Google Speech Recognition

Wit.ai

Microsoft Bing Voice Recognition

api.ai

IBM Speech to Text

安装:sudo pip3 install SpeechRecognition

TextBlob

https://textblob.readthedocs.io/en/dev/#

这是一套强大的文本分析工具,提供了方便的工具进行词性分类、名词短语截取、情感分析、文本分类、拼写检查、翻译和语言检测…等等,未来我们再针对此模块作深入的使用,在这里我们将仅使用它的翻译功能(透过Google API

安装:

sudo pip3 install -U textblob

sudo python3 -m textblob.download_corpora

(下载必要的语料库,若自行指定其它的语料库,可更改NLTK_DATA环境变量)

gTTS(Google Text to Speech)

https://pypi.org/project/gTTS/

这个模块提供一个方便使用Googles Text to Speech API的接口。在这里我们并没有使用工研院而改用GoogleTTS原因是,工研院 TTS的处理效率实在太慢且又不稳定了,虽然音质较好也较自然,但是考虑到实时翻译的流畅性还是优先考虑Google TTS,不过未来我们也可以将工研院TTS功能加到程序中,让用户自行切换选择。

安装:sudo pip3 install gTTS

PyAudio

http://people.csail.mit.edu/hubert/pyaudio/

gTTS会将文字转出的语音存成mp3文件,我们使用pyAudio来播放此mp3檔。

安装:

sudo apt-get install libasound-dev

wgethttp://portaudio.com/archives/pa_stable_v19_20140130.tgz

tar –zxvf

cd portaudio

./configure; make; sudo make install

git clonehttp://people.csail.mit.edu/hubert/git/pyaudio.git

cd pyaudio

sudo python3 setup.py install

程序开发:

由于我们大量使用了各种开源的Python模块,因此一开始需要撰写的程序并不需要太多。下方程式执行的流程就如同上述的系统图表。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

fromLanguage = "zh-TW"

toLanguage = "en"

import os

from os import path

import speech_recognition as sr

from textblob import TextBlob

from gtts import gTTS

try:

while True:

r = sr.Recognizer()

with sr.Microphone() as source:

print("Say something!")

audio = r.listen(source)

sttTXT_org = r.recognize_google(audio,language = fromLanguage)

print("Google Speech Recognitionthinks you said: " + sttTXT_org)

sttTXT_tblob = TextBlob(sttTXT_org)

blobTranslated = sttTXT_tblob.translate(to=toLanguage)

print("Translated –>" + blobTranslated.raw)

tts = gTTS(blobTranslated.raw + ".",)

tts.save("tts.mp3")

os.sySTEM(‘omxplayer -p -o hdmi tts.mp3′)

except sr.UnknownValueError:

print("Google Speech Recognitioncould not understand audio")

except sr.RequestError as e:

print("Could not request resultsfrom Google Speech Recognition service; {0}".format(e))

麦克风设定:

sudo raspi-config Advancedoptions Audio 选择Force 3.5mm (headphone) jack

sudo nano /lib/modprobe.d/aliases.conf( optionssnd-usb-audio index=-2 前方加上#,用意是让USB audio能成为默认的装置)

nano ~/.asoundrc,加入下方内容

pcm.!default {

type plug slave { pcm"hw:1" }

}

ctl.!default {

type hw card 1

}

原始程序请参考:https://github.com/ch-tseng/Translate-Bot/blob/master/main.py

请见Demo影片:

您必须 登录 才能发表评论!