您當(dāng)前的位置是:  首頁(yè) > 資訊 > 文章精選 >
 首頁(yè) > 資訊 > 文章精選 >

Open WebRTC Toolkit實(shí)時(shí)視頻分析系統(tǒng)

2020-07-08 09:12:22   作者:吳秋嬌    來源:LiveVideoStack   評(píng)論:0  點(diǎn)擊:


  隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,實(shí)時(shí)視頻分析技術(shù)已應(yīng)用于智能物聯(lián)網(wǎng)的各個(gè)領(lǐng)域。英特爾基于與GStreamer以及OpenVINO構(gòu)建了整套實(shí)時(shí)視頻分析方案,為用戶提供更加靈活、便捷的實(shí)時(shí)視頻分析服務(wù)。本文由英特爾高級(jí)軟件工程師 吳秋嬌在LiveVideoStack線上分享內(nèi)容整理而成。
  01、背景介紹
  隨著物聯(lián)網(wǎng)技術(shù)的發(fā)展,實(shí)時(shí)視頻分析技術(shù)已應(yīng)用于智能物聯(lián)網(wǎng)的各個(gè)領(lǐng)域,例如:智能零售、智能工廠、智能監(jiān)控等,如果把視頻比作物聯(lián)網(wǎng)的眼睛,那么實(shí)時(shí)視頻分析技術(shù)就是物聯(lián)網(wǎng)的大腦。
  目前基于深度學(xué)習(xí)以及計(jì)算機(jī)視覺的視頻分析是最通用的方式。
  以物聯(lián)網(wǎng)技術(shù)中非常通用的場(chǎng)景-物體識(shí)別技術(shù)為例,如圖是典型的物體識(shí)別的流程圖,在前端采集一段視頻流,再將物體識(shí)別出來,對(duì)所識(shí)別的物體進(jìn)行標(biāo)注,再進(jìn)行回傳顯示,需要經(jīng)過很多復(fù)雜的步驟,其中需要調(diào)用很多接口。同樣還會(huì)涉及到顏色空間轉(zhuǎn)換、縮放、推理、以及編解碼的過程,這些過程都需要占用很大的計(jì)算資源。
  同時(shí)在實(shí)際環(huán)境中如果有CPU,GPU,VPU等多種計(jì)算資源,如何讓編解碼以及推理等過程充分利用不同的計(jì)算資源從而提升系統(tǒng)性能?此外,當(dāng)系統(tǒng)需要應(yīng)對(duì)更多的流分析任務(wù)時(shí),如何進(jìn)行方便快速地?cái)U(kuò)展。這些都是實(shí)時(shí)分析系統(tǒng)會(huì)碰到的問題。接下來我們從這些問題出發(fā)來介紹OWT(Open WebRTC Toolkit)如何解決實(shí)時(shí)分析系統(tǒng)的復(fù)雜性,性能以及擴(kuò)展問題。OWT的實(shí)時(shí)分析系統(tǒng)是基于英特爾的OpenVINO以及開源的GStreamer框架進(jìn)行開發(fā),我們先對(duì)OpenVINO,GStreamer以及OWT做個(gè)簡(jiǎn)單的介紹。
  02、英特爾 vision computing platform
  Open VINO是英特爾推出的pipeline的工具集,具有完成算法、模型部署所需要的各種能力。
  從圖中可以看出,其主要由兩部分組成:模型優(yōu)化器(Model Optimizer),可以把在其它框架下已經(jīng)訓(xùn)練好的模型轉(zhuǎn)換為Open VINO所適用的模型再進(jìn)行優(yōu)化,轉(zhuǎn)換速度較快;推理引擎(Inference Engine),即在設(shè)備上運(yùn)行的AI負(fù)載在做推理時(shí),可以將我們所需要的處理效果例如前處理、后處理、特征疊加等,通過Open VINO接口的形式方便的實(shí)現(xiàn)。
  而且Open VINO 中還可以支持多種模型,目前已經(jīng)提供有150多種訓(xùn)練好的模型供用戶直接使用?梢栽贠pen Model Zoo(https://docs.openvinotoolkit.org/2019_R1/_docs_Pre_Trained_Models.html)的網(wǎng)站查看具體支持的模型。另外OpenVINO在Intel平臺(tái)進(jìn)行優(yōu)化,提升計(jì)算機(jī)視覺相關(guān)深度學(xué)習(xí)性能達(dá)19倍以上,可以充分利用相應(yīng)的計(jì)算資源。
  另外OWT使用GStreamer框架。GStreamer 是一個(gè)高度模塊化的管線驅(qū)動(dòng)式媒體框架,大概從2002年開始發(fā)布第一個(gè)版本,一直到現(xiàn)在還在不斷更新。特別是AI時(shí)代,由于其靈活性及可擴(kuò)展性,GStreamer在AI領(lǐng)域應(yīng)用也比較廣泛,目前已有很多豐富的AI插件,可以提供各種功能。
  目前已經(jīng)推出支持Open VINO的GStreamer插件gst-video-analytics, 提供了推理,監(jiān)測(cè)及分類等多種功能的插件,詳見https://github.com/opencv/gst-video-analytics/wiki/Elements。
  OWT視頻分析系統(tǒng)給用戶提供了方便的接口,用戶可自行組合不同的GStreamer plugin來實(shí)現(xiàn)不同的分析任務(wù)。
  面向WebRTC的英特爾協(xié)同開發(fā)套件,從2014年發(fā)布第一個(gè)版本到現(xiàn)在已經(jīng)是4.3.1版本,隨著時(shí)間版本不斷在演進(jìn),2019年進(jìn)行了開源,開源后成為OWT(Open WebRTC Toolkit),在Github地址https://github.com/open-webrtc-toolkit/owt-server。
  如圖是OWT的整體框架,OWT不僅向服務(wù)器端提供了非常豐富的功能, 也實(shí)現(xiàn)了大范圍的客戶端支持,保證各種流的接入。在服務(wù)器端有Streaming、Conferencing、Transcoding、Analytics四大功能,都是在視頻端常用的功能。
  客戶端支持JavaScript、Android、IOS、Windows、Linux系統(tǒng),保證用戶的流可以通過不同的傳輸協(xié)議,例如WebRTC協(xié)議、RTSP協(xié)議、RTMP、HLS、SIP協(xié)議,傳統(tǒng)領(lǐng)域應(yīng)用的傳輸協(xié)議都可以將流接入OWT系統(tǒng),進(jìn)行分析,再傳輸。
  同時(shí)OWT系統(tǒng)演進(jìn)很長(zhǎng)時(shí)間,在可擴(kuò)展性、分布式部署、還有高可用方面也做了很多工作,產(chǎn)品正在向更完善的方向發(fā)展。OWT兼容英特爾的多個(gè)平臺(tái),讓實(shí)時(shí)分析任務(wù)能充分運(yùn)用硬件資源,從而大大系統(tǒng)提升性能。
  關(guān)于視頻分析架構(gòu),如圖OWT分為四個(gè)大模塊,通過接入節(jié)點(diǎn)將客戶的流接入系統(tǒng),傳輸?shù)椒治瞿K,再通過GStreamer pipeline進(jìn)行視頻解碼,前處理、推理以及后處理,再編碼、推流,返回給擴(kuò)散節(jié)點(diǎn),通過擴(kuò)散節(jié)點(diǎn)返回客戶端,在客戶端實(shí)時(shí)顯示。
  OWT系統(tǒng)支持英特爾的VCAC-A卡,Movidus VPU以及英特爾各個(gè)產(chǎn)品系列。
  對(duì)使用者來講,想要通過接口接入流進(jìn)行分析是一件比較簡(jiǎn)單的事情。例如IP攝像流通過RTSP 協(xié)議接入系統(tǒng),若用戶想要分析該流,如人臉檢測(cè)、或算法分析等,需要在客戶端發(fā)送簡(jiǎn)單的Restful請(qǐng)求指定分析哪一路流。
  Management api收到消息之后傳遞給Conference agent進(jìn)行Session 管理,通知分析模塊,在分析模塊進(jìn)行初始化動(dòng)作。初始化完成后返回Session控制,通知IP攝像的流接入節(jié)點(diǎn)與Analytics建立連接。此時(shí),Streaming agent將流發(fā)送給Analytics agent,進(jìn)行各種算法的分析。若用戶希望在瀏覽器中看到流的分析結(jié)果,此時(shí)可以將分析后的流擴(kuò)散給WebRTC節(jié)點(diǎn),再傳輸給瀏覽器等待的用戶。
  若用戶想要對(duì)流進(jìn)行錄像,可以將分析后的流擴(kuò)散給Recordign agent,在用戶端將分析后的流進(jìn)行錄制。另外,若用戶想要將分析好的數(shù)據(jù)上傳到云端,也可以進(jìn)行導(dǎo)入插件再進(jìn)行相應(yīng)操作。
  同時(shí),在圖中我們可以看到,分析過程是與OWT整套方案協(xié)同工作,OWT提供很多控制的API,例如分析、錄像、sip calls、從不同的協(xié)議接入,如果想要將分析好的流推給RTMP服務(wù)器,方案也配有Streaming OUT接口進(jìn)行推送,也有針對(duì)混合流、暫停/繼續(xù)播放流等操作。
  當(dāng)一路流從其它節(jié)點(diǎn)傳送到Analytics分析節(jié)點(diǎn)后,再送入Gstreamer pipeline中,在pipeline中進(jìn)行一些操作。例如經(jīng)過H.264 parse解析,解析后解碼,通過videorate針對(duì)相應(yīng)場(chǎng)景的丟幀處理,再傳入推理模塊,進(jìn)行推理過程。例如:檢測(cè)、分類等處理,進(jìn)行編碼,通過appsink傳給輸出節(jié)點(diǎn)。
  圖中解碼過程沒有明確表明具體使用哪個(gè)API,這些是用戶可以自己進(jìn)行選擇的, GStreamer pipeline中有很多豐富的解碼接口,例如CPU或GPU解碼,大大的提升了解碼效率。推理部分在GitHub上有g(shù)st-video-analytics提供的檢測(cè),分類等插件,使用CPU或VPU進(jìn)行推理,可以更充分的利用系統(tǒng)的資源。
  其中的pipeline構(gòu)建用戶可以自行定制,選擇去掉某些步驟重新組合處理流程。
  如果有一個(gè)分析任務(wù),在OWT中如何實(shí)現(xiàn)的呢?
  開發(fā)者可以使用OWT提供的接口,通過將不同功能的GStreamer plugin組合來實(shí)現(xiàn)一個(gè)特定分析任務(wù)的pipeline。一個(gè)分析任務(wù)最后被編譯成一個(gè)動(dòng)態(tài)庫(kù),在配置文件里配置算法號(hào)以及動(dòng)態(tài)庫(kù)名來對(duì)應(yīng)分析任務(wù),配置好之后用戶通過restful請(qǐng)求開始分析任務(wù)時(shí)指定相應(yīng)的算法號(hào)以及要分析的流,OWT就會(huì)對(duì)指定的流進(jìn)行指定的分析。
  若用戶想要多個(gè)算法分析,只需要構(gòu)建多個(gè)不同的pipeline,再編譯成不同的動(dòng)態(tài)庫(kù)文件,并在配置文件里指定不同的算法號(hào)即可在OWT中實(shí)現(xiàn)多個(gè)算法分析。
  對(duì)于這一部分的使用說明,在Webrtc hack網(wǎng)站(網(wǎng)址https://webrtchacks.com/accelerated-computer-vision-inside-a-webrtc-media-server-with-intel-owt/)上有一篇比較詳盡的文章,可以進(jìn)行查閱學(xué)習(xí)。
  整個(gè)OWT系統(tǒng)演進(jìn)了很多年,在資源調(diào)度方面進(jìn)行了很多處理,OWT支持依據(jù)CPU,GPU,VPU資源使用情況進(jìn)行任務(wù)調(diào)度。當(dāng)部署在多臺(tái)機(jī)器以及多種計(jì)算資源的環(huán)境下,OWT會(huì)收集各個(gè)節(jié)點(diǎn)上的CPU,GPU以及VPU使用情況,將新來的分析任務(wù)根據(jù)調(diào)度策略分配到相應(yīng)的節(jié)點(diǎn)進(jìn)行工作。我們提供了幾種常用的調(diào)度策略,用戶可根據(jù)實(shí)際部署情況對(duì)各個(gè)模塊單獨(dú)配置不同的策略。
  對(duì)于HA,當(dāng)Analytics處于正常狀態(tài),IP攝像機(jī)的流導(dǎo)入,通過圖中最上端一路流程進(jìn)行錄像。分析任務(wù)正在進(jìn)行時(shí),突然出現(xiàn)故障,這時(shí)可以被Session Control檢測(cè)到,。Session Control發(fā)現(xiàn)可用節(jié)點(diǎn),將可用節(jié)點(diǎn)激活,再將正在分析的流導(dǎo)入該分析節(jié)點(diǎn),繼續(xù)被中斷的分析任務(wù),再傳輸?shù)絉ecording節(jié)點(diǎn)進(jìn)行錄像。這樣就可以在實(shí)際場(chǎng)景中實(shí)現(xiàn)高可用的過程。
  03、總結(jié)
  整體方案中分析部分是基于深度學(xué)習(xí)的方式與OWT相結(jié)合,OWT使用GStreamer pipeline簡(jiǎn)化實(shí)時(shí)視頻分析過程,開發(fā)者可以方便地通過組合GStreamer plugin來實(shí)現(xiàn)不同的實(shí)時(shí)分析任務(wù)。同時(shí),OWT利用OpenVINO以及OWT本身的調(diào)度機(jī)制來充分利用計(jì)算資源,從而提升整體性能。OWT支持分布式部署,各個(gè)功能模塊可以快速方便地進(jìn)行擴(kuò)展。再加上OWT提供的HA機(jī)制,可以保證實(shí)時(shí)視頻分析系統(tǒng)的穩(wěn)健運(yùn)行。
  英特爾一直在致力于Visual cloud、Computing等基于IA平臺(tái)的發(fā)展,同時(shí)也提供了很多開源資源,例如Open VINO、OWT 在GitHub上有相應(yīng)的開源項(xiàng)目。同時(shí)英特爾在客戶端也有一些AI的方案,例如WebNN等,未來也將在瀏覽器上落地,敬請(qǐng)期待。
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

專題

CTI論壇會(huì)員企業(yè)