如何利用AI再次見到父親(1) 1.在應用程式上實現它。
筆者調研了原生和跨終端的解決方案,以及控制成本的原因,選擇了跨終端 Flutter 的實現。
主頁開發
筆者使用Muke作為協同UI標註平台,在分析布局後,應採用布局方法:
腳手架頁體全貼**,以寬度為瓦片,頭像根據不規則位置採用堆疊布局,預設最多30個位置,隨機顯示底部欄,採用定位方式,弧形背景為**,按鈕加有高架按鈕, 詳情如下(系列文章結束後,原始碼會開源,我會提前發給大家留言)。
收集代理頁面
或者先分析版面,半個彈窗頁面,底部可以傳送文字,整體是乙個對話資訊頁面。
半彈窗使用showmodalbottomsheet在底部彈出,給予一定程度的通透性,對話部分使用列+滾動容器,實現語音模組本身的原生TTS元件,關鍵細節如下:
實時通訊頁面
這是踩坑的開始,當初使用D-ID的時候,Demo是乙個純前端的解決方案,當時還以為都是標準的WebRTC,而且flutter本身也有支援WebRTC的標準元件,沒有過多考慮最後的相容性問題,實現後發現不同的Android版本和iOS版本在支援原生WebRTC,最後決定用H5頁面代替對話,用結束+H5的方式解決相容性問題,關鍵**如下:
其他零散的頁面,難度不大,就不高亮了,以下是伺服器的實現細節。
2.伺服器端實現。
筆者對 J**A、GO 和 Rust 比較熟悉,但因為需要對接不同的模型和第三方 SDK,所以是 Python,而且 Python 服務端語言的成本較低,小規模優勢更多。
語音TTS模組,採用ElevenLab,聲音轉殖能力與科大訊飛相比,Microsoft TTS、火山引擎語音包,對話交流模組效果更好,採用GPT4,多輪對話和角色扮演比對,GLM3文鑫一言通易千問,整體流程效果更好,首先是APP端的語音轉文字, 通過 WebSocket 傳輸到後台,用 GPT4 助手回覆,得到的文字通過 ElevenLab 轉換為語音,最後呼叫 D-ID 用語音驅動**片的唇形(我有一種預感,後期過程會很長)關鍵**邏輯如下(注意一下, 然後開啟它):
其中,GPT4 需要科學地連線到網際網絡,所以我們需要乙個可以與 OpenAI 介面通訊的伺服器(Linux 版本的 Clash 沒有突出顯示,如果需要可以在評論區進行通訊)。
至此,演示版的開發已經完成,下一步就是開始我們的內部投訴環節了。
在APP端、H5端、伺服器端開發後,帶著極大的成就感,我開始和朋友一起進行內部測試:
假朋友A:哥哥,說完,你怎麼不1分鐘回覆。
假朋友B:+1
假朋友C:+1
我:哎呀,我想先把語音轉換成文字,文字給gpt,gpt會回覆我,我還要調整介面生成語音,我會通過語音驅動器說話。
假朋友D:啊,那,為什麼這麼慢?
假朋友 e: +1
假朋友 f: +1
假朋友n:哎呀,辣雞,bug子太多了,你做不到,兄弟,果然產品不能參與研發。
我:。。 於是開始修復各種bug,優化各種優化。
最後,每次將通訊響應縮短到 30 秒,可汗! 速度也非常慢,所以現在有兩種方法,一種是繼續優化,或者自己訓練模型,或者使用MetaHuman超現實模型,另一種是從產品角度改變思維方式。
1.語音驅動嘴型的不同技術研究。
sadtalker:
1西安交通大學 2騰訊人工智慧實驗室 3螞蟻集團 頭像聯合發布的一款模型,讓頭像說話,使用WebUI Colab進行白色賣淫後,發現還是比較慢的,如果質量不高,效果會更差。
w**2lip:
部署 colab 後,對 ** file 的支援更好,同時 GFPGAN 也可以修復不協調的口型,但 ** 支援是通用的,需要自己改造,而且專案更老實,有了 3080,4080 需要自己公升級,並行邏輯也需要增強(看到有人在 B 站變身後效果還可以, 但不可能完全實時,乙個500*500,大約1分鐘**,大約20-30秒的延遲)。
videoretalking:
我個人覺得更像是sadtalker的公升級版,支援固定位置的影象比較好,但是**說話,需要變換,同時解像度要求更高,最後還是延遲的問題,1分鐘**,4080最好效果是13秒。
最後我發現,只要影象效果與真人相關,就不是很好,於是我改變了研究思路,從遊戲建模的角度來衡量自己是否能滿足自己的要求。
MetaHuman:虛幻引擎發布的超寫實數字人,可以驅動整個身體和空間。 不能重蹈D-ID的覆轍,一部iPhone 12(或更新機型)和一台台式電腦可以改造成乙個完整的面部捕捉和動畫解決方案,父親去世時,他沒有留下太多**和聲音,面部表情和身體特徵都是從**和聲音中提取出來的,那就比較麻煩了,別人還得重新開始, 它對還活著的人更友好,可以作為替代方案,例如:將乙個人的**,完成3D後,優化細節並匯入MetaHuman模型。
nvidia omniverse audio2face:
官網介紹:生成式AI可用於從音訊中即時建立面部表情動畫**。 這不就是我在想的嗎,我看了看上手的難度,有點打鼓,然後聯絡了本地版的企業,好吧,我錯了。
伺服器端的主流解決方案都可以搜尋,也可以在國內外論壇上尋求幫助,主流的就是這些,大概花了1周時間,是時候改變思維方式了。
系列文章完成後,相關原型、設計、原始碼、資料庫等將開源。
未完待續。