在研究復雜的語音人工智能機器人系統時,開發人員很容易被其復雜性嚇倒。亞瑟· C ·克拉克聲稱:“任何足夠先進的技術都無法與魔法區分開來。”
從接受自然語言命令到安全地與環境和周圍的人實時交互,當今的語音人工智能機器人系統可以執行以前機器無法完成的任務。加入谷歌、 Meta 、 NVIDIA 等公司的專家,參加第一屆年度 NVIDIA -Speech AI 峰會。 立即注冊
以 Spot 為例,它是一個支持語音 AI 的機器人,可以自己取飲料。為了方便地添加語音 AI 技能,例如 自動語音識別 ( ASR )或文本到語音( TTS ),許多開發人員在構建復雜的機器人系統時使用更簡單的低代碼構建塊。

對于開發具有語音 AI 技能的機器人應用程序的開發人員,本文將分解 NVIDIA Riva SDK 提供的低代碼構建塊。
通過跟隨所提供的代碼示例,您將了解 speech AI 技術 如何使智能機器人能夠接受食物訂單,將這些訂單轉發給餐廳員工,并最終在提示時導航回家。
使用構建塊設計 AI 機器人系統
復雜系統由幾個構建塊組成。每個構建塊都很容易理解。
當您了解每個組件的功能時,最終產品就不那么令人畏懼了。如果您使用的是低代碼構建塊,那么現在可以專注于需要更多努力的特定于域的定制。
我們的最新項目使用了“ Spot ”,一個四足機器人和一個 NVIDIA Jetson Orin ,通過以太網電纜連接到 Spot 。該項目是使用 AI 構建塊形成復雜語音 AI 機器人系統的主要示例。

我們的目標是建造一個機器人,它可以在我們盡可能少的干預下,自己從當地的餐廳為我們取零食。我們還著手使用開源庫和工具編寫盡可能少的代碼。這個項目中使用的幾乎所有軟件都是免費的。
為了實現這一目標,人工智能系統必須能夠與人類進行語音交互,感知其環境(在我們的例子中,使用嵌入式攝像頭),并安全地在環境中導航。圖 2 顯示了交互、平臺和導航如何表示 Spot 機器人的三個基本操作組件,以及這些組件如何進一步細分為低代碼構建塊。
本文只關注 Riva SDK 中的人機交互塊。
使用 Riva 添加語音識別和語音合成技能
我們每天都與人們進行如此多的互動,以至于我們很容易忽視這些互動到底有多復雜。說話對人類來說很自然,但對于智能機器來說,理解和說話并不是那么簡單。
Riva 是一個完全可定制的 GPU 加速語音 AI SDK ,可處理 ASR 和 TTS 技能,可部署在本地、所有云端、邊緣和嵌入式設備上。它有助于人機語音交互。
Riva 完全在 Spot 機器人上本地運行。因此,處理是安全的,不需要互聯網訪問。它也可以用一個簡單的參數文件完全配置,因此不需要額外的編碼。
Riva 每個語音 AI 任務的代碼示例
Riva 提供了 現成的 Python 代碼 和命令行工具,用于將麥克風捕獲的音頻數據實時轉換為文本( ASR 、語音識別或語音到文本),并將文本轉換為音頻輸出( TTS 或語音合成)。
修改這些腳本以與開放式機器人技術( ROS )兼容,只需稍作改動。這有助于簡化機器人系統開發過程。
ASR 自定義
Riva OOTB Python 客戶端 ASR 腳本名為 transcribe_mic.py 。默認情況下,它將 ASR 輸出打印到終端。通過修改它, ASR 輸出被路由到一個 ROS topic 和可以被 ROS 網絡中的任何內容讀取。以下代碼示例顯示了對腳本 main ()函數的關鍵添加:
inter_pub = rospy.Publisher('intermediate', String, queue_size=10) final_pub = rospy.Publisher('final', String, queue_size=10) rospy.init_node('riva_asr', anonymous=True)
以下代碼示例包括對 main 的更關鍵的添加:
for response in responses: if not response.results: continue partial_transcript = "" for result in response.results: if not result.alternatives: continue transcript = result.alternatives[0].transcript if result.is_final: for i, alternative in enumerate(result.alternatives): final_pub.publish(alternative.transcript) else: partial_transcript += transcript if partial_transcript: inter_pub.publish(partial_transcript)
TTS 自定義
Riva 還為 TTS 提供了 talk.py 腳本。默認情況下,您在終端或 Python 解釋器中輸入文本, Riva 從中生成音頻輸出。對于 Spot 來說, input text talk.py script 已被修改 使文本來自 ROS 回調,而不是人類的擊鍵。 OOTB 腳本的關鍵更改包括用于提取文本的功能:
def callback(msg): global TTS TTS = msg.data
它們還包括對 main ()函數的以下添加:
rospy.init_node('riva_tts', anonymous=True) rospy.Subscriber("speak", String, callback)
main ()函數中這些經過修改的條件語句也是關鍵:
while not rospy.is_shutdown(): if TTS != None: text = TTS
語音交互腳本
像 voice_control.py 這樣的簡單腳本主要由回調和通話功能組成。他們告訴 Spot 要聽什么單詞以及如何回應。
def callback(msg): global pub, order rospy.loginfo(msg.data) if "hey spot" in msg.data.lower() and "fetch me" in msg.data.lower(): order_start = msg.data.index("fetch me") order = msg.data[order_start + 9:] pub.publish("Fetching " + order) def talker(): global pub rospy.init_node("spot_voice_control", anonymous=True) pub = rospy.Publisher("speak", String, queue_size=10) rospy.Subscriber("final", String, callback) rospy.spin()
換言之,如果文本包含“嘿, Spot ,…給我拿…”, Spot 會將句子的其余部分保存為命令。在 ASR 記錄表明句子結束后, Spot 激活 TTS 客戶端并背誦單詞“ Fetching ”加上訂單內容。然后,其他腳本會讓 ROS 動作服務器指示 Spot 導航到餐廳,同時注意避開汽車和其他障礙物。
當 Spot 到達餐廳時,它會等待一個人說“你好, Spot ”來接受訂單。如果 ASR 分析腳本檢測到這一序列, Spot 會背誦訂單并以“請”結尾。餐廳員工將訂購的食物和任何零錢放在 Spot 背后的適當容器中。在 Riva ASR 意識到餐廳員工說“回家吧, Spot ”后, Spot 回家了
類似 Riva 的語音 AI SDK 背后的技術用于構建和部署完全可定制的實時語音 AI 應用程序,這些應用程序可部署在本地、所有云端、邊緣和嵌入式環境中,將 AI 機器人帶入現實世界。
當機器人與人無縫交互時,它開辟了一個新的領域,機器人可以在這個領域提供幫助,而無需技術人員在計算機上進行翻譯。
使用低代碼解決方案部署您自己的語音 AI 機器人
通常, NVIDIA 、 Open Robotics 和機器人社區等團隊在解決語音 AI 和機器人問題以及為日常機器人用戶提供和訪問該技術方面做了出色的工作。
任何渴望進入該行業或改進現有技術的人都可以向這些群體尋求靈感和尖端技術的范例。這些技術可通過免費 SDK ( Riva 、 ROS 、 NVIDIA DeepStream 、 NVIDIA CUDA )和功能強大的硬件(機器人、 NVIDIA Jetson Orin 、傳感器)使用。
我很高興看到來自技術領導者的這種級別的社區支持,并邀請您構建自己的語音 AI 機器人。機器人太棒了!
有關詳細信息,請參閱以下相關資源:
- 探索如何開始在生產中集成和部署 Riva ASR 和 TTS 模型,并使用免費電子書 Building Speech AI Applications 進行高性能推理和最小工作量。
- 探索 NVIDIA Riva Quick Start Guide for Embedded Platforms ,了解嵌入式平臺上 Riva 語音技能入門的腳本和實用程序。
- 下載 Riva?并開始使用,在 LaunchPad 中的就緒運行基礎架構上嘗試 有指導的 Riva labs ,或使用 NVIDIA AI Enterprise 軟件獲得大規模 Riva 部署支持。
?