即時口譯機器人DIY

Description

Description
作者:CH.Tseng

專案介紹

記得當年iPhone剛推出Siri語音小助理時,看到同學跟Siri聊天或是瞎鬧的畫面,對於當時的我衝擊相當的深,後來我才懂這就是語音處理技術,探討如何在語音訊息和文字訊息之間進行轉換,透過這個專案可以讓maker深入探討這項技術。

2118_kdltqmc6wq

從TTS與STT談起

TTS Text-To-Speech文字轉語音技術,看似單純的字句一對一轉換,背後可是牽涉到種種複雜的判斷處理以及語音數據的分析應用,才能讓電腦發出各種維妙維肖、比擬人聲且抑揚頓挫的口語發音:

2105_vsulokzmxg

TTS的應用領域相當廣泛,除了使用在既有的導航系統、車機、有聲書或行動裝置之外,更多因應行動網路而衍生的語音互動功能,如家用機器人以及FB帶動的chat bot聊天機器人,皆讓TTS的後勢更加看好,此外不可忽視的是,未來還有眾多視力不佳聽力受限的老年化人口需要透過TTS語音的輔助。

至於STT(Speech-To-Text),它的角色就像I/O介面的Input,負責將使用者的口說訊息轉換為文字提供給系統進行分析處理,理論上,STT所需的技術含量比起TTS更複雜門檻也更高,主要原因是它所直接處理的是非結構化的語音檔,這需要透過大量的語音資料庫經過過長時間的特徵比對與學習,並結合高效率的硬體平台的輔助,才能在短時間內完成複雜的語意分析,準確無誤的判別使用者說話內容分析其意圖,即時回應使用者正確的需求。

目前較成熟的STT系統多採用雲端方式,例如Google的Web Speech API、Microsoft的Bing Speech API、IBM Watson Developer Cloud的Speech to Text、nuance的Dragon speech recognition等等。此外,Facebook旗下的wit.ai,以及它的競爭對手api.ai也都提供開發者功能相當多且強大的STT系統,並支援完整的API和說明檔,唯一可惜的是他們這些雲端服務都必須連網才能使用.如果我們的產品不具網路功能但又需要STT語音,那麼可以考慮espeak、Julius或CMU-Sphinx這類可安裝在本機端的開源STT系統,只是我們必須自行花時間建立語音資料庫自行訓練,才能得到滿意的輸出效果。

系統目標

本專案將製作出一個自動口譯機器人,只要對著它說話,就能馬上將所說的內容翻譯成英文(或他國)語言說出來。類似的翻譯機器在Maker雜誌亦曾有人介紹過,名稱也取得相當對味,叫作「宇宙翻譯機」,當初我看到這專案就覺得相當有趣,也萌生自行DIY一台的想法,不過我的製作方式更為簡單,充份運用了Python的開源modules,只要一步步照著作便可以實作出來。

材料準備

製作流程

使用了三種Google雲端服務以及相對應的python模組。

2105_xpfj4hnuuw

 

Python模組使用

  • SpeechRecognition:它將一些常用的speech recognition系統整合在一起,方便我們使用,可省下相當多的開發時間。該模組整合了下列知名的STT API:
  1. CMU Sphinx (works offline)
  2. Google Speech Recognition
  3. Wit.ai
  4. Microsoft Bing Voice Recognition
  5. api.ai
  6. IBM Speech to Text

安裝:sudo pip3 install SpeechRecognition

  • TextBlob:這是一套強大的文本分析工具,提供了方便的工具進行詞性分類、名詞短語截取、情感分析、文本分類、拼寫檢查、翻譯和語言檢測…等等,未來我們再針對此模組作深入的使用,在這裏我們將僅使用它的翻譯功能(透過Google API)

安裝:

sudo pip3 install -U textblob

sudo python3 -m textblob.download_corpora

(下載必要的語料庫,若自行指定其它的語料庫,可更改NLTK_DATA環境變數)

  • gTTS(Google Text to Speech):這個模組提供一個方便使用Google’s Text to Speech API的介面。在這裏我們並沒有使用工研院而改用Google的TTS原因是,工研院 TTS的處理效率實在太慢且又不穩定了,雖然音質較好也較自然,但是考慮到即時翻譯的流暢性還是優先考慮Google TTS,不過未來我們也可以將工研院TTS功能加到程式中,讓使用者自行切換選擇。

安裝:sudo pip3 install gTTS

  • PyAudio:gTTS會將文字轉出的語音存成mp3檔,我們使用pyAudio來播放此mp3檔。

安裝:

sudo apt-get install libasound-dev
tar –zxvf
cd portaudio
./configure; make; sudo make install
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 Recognition thinks you said: " + sttTXT_org)
sttTXT_tblob = TextBlob(sttTXT_org)
blobTranslated = sttTXT_tblob.translate(to=toLanguage)
print("Translated --> " + blobTranslated.raw)
tts = gTTS(blobTranslated.raw + ". ", lang=toLanguage)
tts.save("tts.mp3")
os.system('omxplayer -p -o hdmi tts.mp3')
except sr.UnknownValueError:
print("Google Speech Recognition could not understand audio")
except sr.RequestError as e:
print("Could not request results from Google Speech Recognition service; {0}".format(e))

麥克風設定:

  1. sudo raspi-config → Advanced options→ Audio → 選擇Force 3.5mm (‘headphone’) jack
  1. sudo nano /lib/modprobe.d/aliases.conf(將 options snd-usb-audio index=-2 前方加上#,用意是讓USB audio能成為預設的裝置)
  1. 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影片:

Resource

作者專案Demo影片頻道

Latest posts by Cheng Hsun Tseng (see all)

    Contact

    Contact
    • Category
      Raspberry Pi, Robotics, 語音介面

    Project簡述

    Project簡述
    • 簡述
      本專案製作出一個自動口譯機器人,只要對著它說話,就能馬上將所說的內容翻譯成英文(或他國)語言說出來。它充份運用了Python的開源modules,只要一步步照著作便可以實作出來。
    • 作者
      CH.Tseng

    您的姓名 〈需填寫〉

    您的電子郵件信箱 〈需填寫〉

    主旨

    您的信件內容