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