重磅開源!一款引入實時語音與聲紋識別的網絡辯論系統!

公衆號關注 “GitHubDaily”

設爲 “星標”,每天帶你逛 GitHub

大家好,我是小 G。

最近,在由聲網 Agora 舉辦的 RTC 編程挑戰賽春季賽中,有一支叫竹辯的隊伍基於 Agora SDK 開發了一個專用於網絡辯論的系統。

項目發起者於卓浩與在伯明翰大學就讀的王嘉維,還引入了機器學習算法進行聲紋、人臉識別,以防止有人冒名頂替上場辯論。同時,他們還利用了微軟的情緒識別接口,來判斷參賽者的情緒與表現。

這個作品現在已經開源在 GitHub:

https://github.com/AgoraIO-Community/RTC-Hackathon/tree/master/SDKChallengeProject/%E7%AB%B9%E8%BE%A9

本文邀請竹辯團隊分享了他們開發的經歷。

項目初心

網辯的熱度與其解決方案並不匹配。絕大多數的比賽,仍在使用 YY 作爲比賽工具。我們可以看到,這落後於時代的 UI,大大的遊戲廣告,而且 YY 無法屏幕分享導致環節倒計時進行過程中辯手無法獲知自己還剩多少時間。我們可以明顯感覺到,網絡辯論的體驗仍有可提升之處。

項目介紹

疫情期間由於社交距離限制,諸多活動無法於線下正常開展,辯論即爲其中之一。竹辯旨在爲疫情防控常態化的大環境下提供一套完整的線上辯論解決方案。該體系核心包括:

  • 完整的記時記分

  • 穩定的音頻服務

  • 完備的數據覆盤

  • 選手生物信息識別

  • 全程 AI 輔助評分

完整的記時記分

在傳統的辯論在中,計時器界面設計元素統一性欠佳,對此我們使用 React 設計了基於 Vuexy 組件庫的界面設計規範,旨在讓辯論過程更明晰、提升觀衆與參賽人員觀感。

傳統計時器界面,元素較爲雜亂,美觀性欠佳。

竹辯計時器界面,分區直觀,一目瞭然。

通過 Sidebar 的形式對賽事進行管理,掌握賽事信息,簡潔高效。

我們將計時器界面分爲這樣幾個部分,首先是圈一處呈現正反雙方的辯題,然後是圈二處的計時器,然後圈三是當前環節和下一環節,圈四是對辯手和發言人員的展示。下方會有音頻的控制,右側上方是對評委與工作人員的介紹,右下方提供手動同步環節和打開側邊欄。

穩定的音頻服務

在音頻方面,我們使用了 Agora 提供的 RTC 服務,爲雲端辯論提供了穩定的音頻服務支撐。同時 Agora 豐富的 SDK 特性大大簡化了我們的開發流程。

針對該方面,我們將辯手發言與否與環節相綁定。例如正方一辯進行立論,我們會只允許正方一辯發言,會自動禁音其餘所有辯手,來防止雜音出現。

同時,辯論中有一個一直存在而意義始終不大的角色 —— 主席。其作用只是在環節之間進行串場。

在同一個比賽中,每場單獨的場次各環節與串場詞均相同。在目前情況下,我們卻需要每場對局中主席一遍遍地重複相同的話語。因此,我們利用 Agora SDK 提供的混音功能,提前錄製好主席詞,在環節切換後由工作人員手動觸發播放。一方面大大減少人力需求,另一方面降低了賽事成本。

完備的數據覆盤

個人辯力提升系統也是本系統的另一個亮點。在傳統賽事中,辯手對自己的表現只能以輸贏來衡量,很難量化出一個標準,往往會拖慢對個人的提升。

但是在最普遍的三輪投票制中,有一輪即分數票,評委會根據選手的表現給出對應的分數。在傳統賽事裏,因爲統計麻煩,所以往往不會將這個分數反饋給辯手。這浪費了一個很重要的資源。所以此係統利用評委在雲上的分數,將每個辯手的分數落實到每個辯手身上,這樣可以直觀量化出辯手的水平,爲辯手的進一步提升提供幫助。

爲了更好的實現該功能,我們針對性提供了三類優化。

  • 利用雲端錄製 SDK 進行全程的錄音,方便辯手賽後進行復盤。

  • 我們將裁判提交的分數反饋給辯手,讓辯手從裁判的角度出發判斷自己哪裏還可以提高。

  • 在環節發生切換時記錄時間戳,與錄製的音頻進行比對標註,幫助辯手能迅速找到某一個環節的對話,便於精準覆盤。

選手生物信息識別

網絡辯論一直存在一個解決不了的問題,由於不成文的規定,沒有網辯會打開攝像頭,所有網辯都只有語音對話,當前在發言的辯手是否是報名的那個辯手無法被確認。

換句話說,冒頂辯手的情況無法阻止,而我們提供了目前最完善的解決方案之一。

生物信息識別入口。

基於 PCA 算法的人臉識別與活體識別。

同時利用選手聲紋進行二次驗證,最大限度確保身份真實性。

全程 AI 輔助評分

在線上比賽中,由於缺少了線下的賽場環境,選手專注度與參與度是亟待解決的問題之一。針對該線上賽事痛點,我們提供了基於機器視覺與 Azure 面部接口的 AI 輔助評分解決方案。

我們使用機器視覺與深度學習相關技術,通過對選手參賽過程中微表情、表達專業度、語言流利度進行分析,得到五個評分點的權重:『颱風值、流利度、參與度(或者叫專注度)、專業度和自我認可度』。利用 AI 對面部表情的識別,來進行細緻的檢查,從上述幾個維度來完成更精確的評判。

人臉識別與 AI 評分算法實現

前端部分

canvas + faceapi.js 實現實時人臉識別,針對人臉檢測實現了一個 SSD(Single Shot Multibox Detector)算法,它本質上是一個基於 MobileNetV1 的卷積神經網絡(CNN),在網絡的頂層加入了一些人臉邊框預測層。該網絡將返回每張人臉的邊界框,並返回每個邊框相應的分數,即每個邊界框表示一張人臉的概率。通過一個簡單的卷積神經網絡(CNN),它將返回給定圖像的 68 個人臉特徵點。

爲了確保識別的準確度,對獲取的人臉數據進行圖像灰度化、直方圖均衡化處理後讀取像素信息傳至後端。

後端部分

基於 KoaJS,使用 Javascript 的 ml.js 機器學習庫,對面部數據進行標準 PCA 主成分分析(求斜方差矩陣特徵向量、對原本的圖像降維處理以減少運算),相對於經典的歐式距離人臉識別模型 PCA 主成分分析可以極大減少運算量,減少識別時間。

面部標記同時應用在 AI 打分中,截取面部圖像 Base64 編碼之後直接給後端,上傳至 CDN 生成外鏈,後基於微軟 Azure 認知服務實現。可以判斷選手的六種主要表情,分析選手的情緒,通過選手情緒和語言表現的累加加權提供 AI 打分參考,比賽頁面右側的 Sidebar 可以看到系統對人臉的實時跟蹤。

最後,項目涉及技術

  • 前端:React、JavaScript、Agora SDK、Machine Vision (faceapi)

  • 後端:KoaJS、SaaS + PaaS、MongoDB

---

由 GitHubDaily 原班人馬打造的公衆號:GitCube,現已正式上線!
接下來我們將會在該公衆號上,爲大家分享優質的計算機學習資源與開發者工具,堅持每天一篇原創文章的輸出,感興趣的小夥伴可以關注一下哈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章