半小時教你手搓AI視頻通話,還有懶人版代碼已開源
GPT-4o的“AI視頻通話”一鴿再鴿,但網友卻是急不可耐想要體驗。
於是,一位名叫Santiago(我們叫他三哥)的博主,用160行Python代碼嘗試了復刻。
雖然技術路線和《Her》有所差別,但從直觀效果來看,也算得上是給網友們帶來了新的玩具。
而且不僅是炫技,三哥是真的在試圖把網友教會,用了半個多小時的時間講解他的操作過程。
不過,三哥的自我介紹中說,自己是一個講授硬核機器學習知識的博主,之前也推出過不少課程。
所以講課這件事對三哥來說,也可以算是老本行了。
對三哥這次推出的新課,網友給予了很高的評價,表示不僅內容很贊,而且講解得也很好。
甚至爲了防止你覺得學起來太麻煩,三哥直接就把程序代碼給公開了。
還有網友在線催更,有的想要增加屏幕讀取的功能,還有人想要移動版……
三哥做的視頻通話程序名叫Alloy Voice Assistant(簡稱Alloy),在視頻中他演示了這樣幾組對話效果。
首先是一道基礎問題,三哥讓Alloy識別一下自己戴的眼鏡是什麼顏色。
這道題對Alloy來說確實是沒什麼難度,很輕鬆就能回答上來是黑色。
接下來,三哥就要給Alloy上難度了,這次要識別的是棒球帽上的徽章,並分析出所代表的球隊。
這次不僅要識別的內容和鏡頭的距離變遠了,而且Alloy需要一次性識別六個。
關於視頻中涉及的棒球帽,我們來看下特寫:
從左到右依次是(洛杉磯)道奇隊、(華盛頓)國民隊、(波士頓)紅襪隊、(休斯頓)太空人隊、(芝加哥)小熊隊和(堪薩斯城)皇家隊。
我們再來看下Alloy給出的回答……完全正確。
最後一題,Alloy需要識別的內容變成了文字——不僅要知道寫了什麼,還要知道文字代表的含義。
只見三個拿出了一本書朝向了鏡頭,先後詢問Alloy書的名稱和作者。
這本書是蘋果機器學習高級工程師Robert Munro Monarch寫的Human-in-the-Loop Machine Learning(《人在迴路·機器學習》),Alloy回答對了。
從三哥的演示中我們可以看出,Alloy在識別和回答的準確率上還是很能打的,不過響應的速度也確實慢了一些。
但畢竟不是原生功能,需要在多個API之間進行跳轉,所以也算是可用。
那麼Alloy到底是怎麼實現的呢?三哥進行了在線教學。
跟隨着三哥的講解,我們先來看一下都需要用到哪些工具。
既然要“視頻通話”,當然就得有視覺處理模塊,三哥用OpenCV來對畫面進行捕獲,然後交給多模態大模型進行處理。
具體的大模型可以有多種選擇,包括GPT-4o、Claude和Gemini 1.5 Pro等,同時大模型還要承擔文本處理的任務。
這是由於Alloy並非原生支持音頻模態,所以處理音頻的方式是通過文本作爲中介實現,這就需要用到語音識別和合成模塊,這裡三哥用的分別是OpenAI的Whisper和TTS引擎。
另外,爲了讓大模型的集成變得更加容易,三哥這裡還使用到了大模型編程框架LangChain。
最重要的,想要把這些模塊都組合在一起,就需要用Python來編寫代碼,也要有相應工具的API。
看到這些工具,Alloy的大致工作流程也就清晰明瞭了——
麥克風和攝像頭負責收集視覺和聲音信息,然後聲音被轉換成文本並於視覺信息一起通過API送入大模型,大模型完成分析後以文本形式回傳,最後用TTS模塊合成語音並通過揚聲器播放。
具體操作中,需要先安裝好所需要的依賴庫,並申請相應大模型的API,並創建一個Python程序加載這些依賴。
之後是編寫WebcamStream類,用來捕獲攝像頭當中的圖像,這裡就用到了OpenCV當中的VideoCapture。
視頻中,三哥針對每一行代碼的含義和作用都進行了解釋,感興趣的話可以看原視頻,這裡就不一一展開了。
之後是Assistant類,也是整個Alloy系統中最核心的環節,從初始化和配置AI模型,到處理用戶輸入、聲文互轉、生成回答,再到對話記錄的管理,Assistant都發揮着重要作用。
可以說,Assistant類是串起用戶、輸入設備和AI模型的橋樑,也是三哥在整個教程中講解時間最長的一部分。
把這兩個類定義好之後,最後就是主程序的設計,首先爲這兩個類各創建一個實例,之後配置攝像頭和麥克風,就可以進入主循環體了。
主循環體會不斷從WebcamStream實例中讀取最新的視頻幀,並使用OpenCV的imshow()函數在窗口中實時顯示。
同時,當語音識別器檢測到用戶開始說話並結束時,會自動將語音轉換爲文本,並調用相關函數進行處理。
以上就是Alloy搭建的大致流程了,如果看了覺得實在太麻煩不想自己動手的話,三哥還在GitHub上準備了懶人版。
只需要根據選擇的模型調整幾行代碼並填好API,就能直接用了。
如果你也想體驗一下AI視頻通話的話,不妨動手試一下吧。
原視頻地址:https://www.youtube.com/watch?v=zVttVCQvACQGitHub:https://github.com/svpino/alloy-voice-assistant