近期利用樹莓派開發了一個能夠進行語音對話的機器人,這裡分享完整實現過程。樹莓派作為全球最流行的微型電腦主板,以信用卡大小、低價格、完善文檔和活躍社區著稱,支援Linux(Debian)等作業系統,非常適合作為嵌入式AI項目平台。本專案使用樹莓派B+版本,配備博通BCM2836四核900MHz處理器與1GB記憶體。
語音機器人需要解決三個核心環節:「聽」——收音並轉文字,「思考」——語義理解與回覆生成,「說」——文字轉語音播放。這涉及語音識別(ASR)、語音合成(TTS)、自然語言處理(NLP)等複雜技術,幸好百度開放平台提供成熟API,大幅降低開發門檻。
使用arecord工具錄製音頻,指定外部USB麥克風設備(plughw:1)、16kHz採樣率、S16_LE格式,符合百度ASR要求:
arecord -D "plughw:1" -f S16_LE -r 16000 test.wav
錄製完成後(Ctrl+C停止),通過百度語音開放平台REST API進行識別。Python客戶端流程:獲取access_token → Base64編碼音頻數據 → 構建JSON請求發送至vop.baidu.com/server_api → 解析返回文字。關鍵代碼片段:
def baidu_asr(data, id, token):
speech_data = base64.b64encode(data).decode("utf-8")
post_data = {
"format": "wav", "rate": 16000, "channel": 1,
"cuid": id, "token": token, "speech": speech_data, "len": len(data)
}
# 發送POST請求並解析結果...
採用百度API Store的圖靈機器人接口,只需發送用戶文字獲取回覆:
def robot_main(words):
url = "https://apis.baidu.com/turing/turing/turing?"
words = urllib.parse.quote(words)
url += f"key=YOUR_KEY&info={words}&userid=1000"
# 發送請求並返回data["text"]...
百度TTS接口支援男女聲、語調、語速、音量配置,返回MP3二進制數據:
def baidu_tts_by_post(text, id, token):
post_data = {"tex": text, "lan": "zh", "ctp": 1, "cuid": id, "tok": token}
# POST請求tsn.baidu.com/text2audio,返回MP3數據
保存為test.mp3後,使用mpg123播放器播放。
將ASR、NLP、TTS模組化為asr.py、robot.py、tts.py,主程序main.py串聯流程:
words = asr.asr_main("test.wav")
new_words = robot.robot_main(words)
tts.tts_main("test.mp3", new_words)
Shell腳本自動化執行:
#!/bin/bash
arecord -D "plughw:1" -f S16_LE -r 16000 test.wav
python3 main.py
mpg123 test.mp3
運行腳本,對著麥克風說話後按Ctrl+C,機器人即可回應。這個專案展示了如何利用開放AI服務快速構建端側語音交互系統,適合物聯網、智能家居等場景擴展應用。