隨着物聯網技術的發展,實時視頻分析技術已應用於智能物聯網的各個領域。英特爾基於與GStreamer以及OpenVINO構建了整套實時視頻分析方案,爲用戶提供更加靈活、便捷的實時視頻分析服務。本文由英特爾高級軟件工程師 吳秋嬌在LiveVideoStack線上分享內容整理而成。html
1. 背景介紹
隨着物聯網技術的發展,實時視頻分析技術已應用於智能物聯網的各個領域,例如:智能零售、智能工廠、智能監控等,若是把視頻比做物聯網的眼睛,那麼實時視頻分析技術就是物聯網的大腦。前端
目前基於深度學習以及計算機視覺的視頻分析是最通用的方式。git
以物聯網技術中很是通用的場景-物體識別技術爲例,如圖是典型的物體識別的流程圖,在前端採集一段視頻流,再將物體識別出來,對所識別的物體進行標註,再進行回傳顯示,須要通過不少複雜的步驟,其中須要調用不少接口。一樣還會涉及到顏色空間轉換、縮放、推理、以及編解碼的過程,這些過程都須要佔用很大的計算資源。github
同時在實際環境中若是有CPU,GPU,VPU等多種計算資源,如何讓編解碼以及推理等過程充分利用不一樣的計算資源從而提高系統性能?此外,當系統須要應對更多的流分析任務時,如何進行方便快速地擴展。這些都是實時分析系統會碰到的問題。接下來咱們從這些問題出發來介紹OWT(Open WebRTC Toolkit)如何解決實時分析系統的複雜性,性能以及擴展問題。OWT的實時分析系統是基於英特爾的OpenVINO以及開源的GStreamer框架進行開發,咱們先對OpenVINO,GStreamer以及OWT作個簡單的介紹。web
2. 英特爾 vision computing platform
Open VINO是英特爾推出的pipeline的工具集,具備完成算法、模型部署所須要的各類能力。算法
從圖中能夠看出,其主要由兩部分組成:模型優化器(Model Optimizer),能夠把在其它框架下已經訓練好的模型轉換爲Open VINO所適用的模型再進行優化,轉換速度較快;推理引擎(Inference Engine),即在設備上運行的AI負載在作推理時,能夠將咱們所須要的處理效果例如前處理、後處理、特徵疊加等,經過Open VINO接口的形式方便的實現。api
並且Open VINO 中還能夠支持多種模型,目前已經提供有150多種訓練好的模型供用戶直接使用。能夠在Open Model Zoo(https://docs.openvinotoolkit.org/2019_R1/_docs_Pre_Trained_Models.html)的網站查看具體支持的模型。另外OpenVINO在Intel平臺進行優化,提高計算機視覺相關深度學習性能達19倍以上,能夠充分利用相應的計算資源。瀏覽器
另外OWT使用GStreamer框架。GStreamer 是一個高度模塊化的管線驅動式媒體框架,大概從2002年開始發佈第一個版本,一直到如今還在不斷更新。特別是AI時代,因爲其靈活性及可擴展性,GStreamer在AI領域應用也比較普遍,目前已有不少豐富的AI插件,能夠提供各類功能。服務器
目前已經推出支持Open VINO的GStreamer插件gst-video-analytics, 提供了推理,監測及分類等多種功能的插件,詳見https://github.com/opencv/gst-video-analytics/wiki/Elements。restful
OWT視頻分析系統給用戶提供了方便的接口,用戶可自行組合不一樣的GStreamer plugin來實現不一樣的分析任務。
面向WebRTC的英特爾協同開發套件,從2014年發佈第一個版本到如今已是4.3.1版本,隨着時間版本不斷在演進,2019年進行了開源,開源後成爲OWT(Open WebRTC Toolkit),在Github地址https://github.com/open-webrtc-toolkit/owt-server。
如圖是OWT的總體框架,OWT不只向服務器端提供了很是豐富的功能, 也實現了大範圍的客戶端支持,保證各類流的接入。在服務器端有Streaming、Conferencing、Transcoding、Analytics四大功能,都是在視頻端經常使用的功能。
客戶端支持JavaScript、Android、IOS、Windows、Linux系統,保證用戶的流能夠經過不一樣的傳輸協議,例如WebRTC協議、RTSP協議、RTMP、HLS、SIP協議,傳統領域應用的傳輸協議均可以將流接入OWT系統,進行分析,再傳輸。
同時OWT系統演進很長時間,在可擴展性、分佈式部署、還有高可用方面也作了不少工做,產品正在向更完善的方向發展。OWT兼容英特爾的多個平臺,讓實時分析任務能充分運用硬件資源,從而大大系統提高性能。
關於視頻分析架構,如圖OWT分爲四個大模塊,經過接入節點將客戶的流接入系統,傳輸到分析模塊,再經過GStreamer pipeline進行視頻解碼,前處理、推理以及後處理,再編碼、推流,返回給擴散節點,經過擴散節點返回客戶端,在客戶端實時顯示。
OWT系統支持英特爾的VCAC-A卡,Movidus VPU以及英特爾各個產品系列。
對使用者來說,想要經過接口接入流進行分析是一件比較簡單的事情。例如IP攝像流經過RTSP 協議接入系統,若用戶想要分析該流,如人臉檢測、或算法分析等,須要在客戶端發送簡單的Restful請求指定分析哪一路流。
Management api收到消息以後傳遞給Conference agent進行Session 管理,通知分析模塊,在分析模塊進行初始化動做。初始化完成後返回Session控制,通知IP攝像的流接入節點與Analytics創建鏈接。此時,Streaming agent將流發送給Analytics agent,進行各類算法的分析。若用戶但願在瀏覽器中看到流的分析結果,此時能夠將分析後的流擴散給WebRTC節點,再傳輸給瀏覽器等待的用戶。
若用戶想要對流進行錄像,能夠將分析後的流擴散給Recordign agent,在用戶端將分析後的流進行錄製。另外,若用戶想要將分析好的數據上傳到雲端,也能夠進行導入插件再進行相應操做。
同時,在圖中咱們能夠看到,分析過程是與OWT整套方案協同工做,OWT提供不少控制的API,例如分析、錄像、sip calls、從不一樣的協議接入,若是想要將分析好的流推給RTMP服務器,方案也配有Streaming OUT接口進行推送,也有針對混合流、暫停/繼續播放流等操做。
當一路流從其它節點傳送到Analytics分析節點後,再送入Gstreamer pipeline中,在pipeline中進行一些操做。例如通過H.264 parse解析,解析後解碼,經過videorate針對相應場景的丟幀處理,再傳入推理模塊,進行推理過程。例如:檢測、分類等處理,進行編碼,經過appsink傳給輸出節點。
圖中解碼過程沒有明確代表具體使用哪一個API,這些是用戶能夠本身進行選擇的, GStreamer pipeline中有不少豐富的解碼接口,例如CPU或GPU解碼,大大的提高了解碼效率。推理部分在GitHub上有gst-video-analytics提供的檢測,分類等插件,使用CPU或VPU進行推理,能夠更充分的利用系統的資源。
其中的pipeline構建用戶能夠自行定製,選擇去掉某些步驟從新組合處理流程。
若是有一個分析任務,在OWT中如何實現的呢?
開發者可使用OWT提供的接口,經過將不一樣功能的GStreamer plugin組合來實現一個特定分析任務的pipeline。一個分析任務最後被編譯成一個動態庫,在配置文件裏配置算法號以及動態庫名來對應分析任務,配置好以後用戶經過restful請求開始分析任務時指定相應的算法號以及要分析的流,OWT就會對指定的流進行指定的分析。
若用戶想要多個算法分析,只須要構建多個不一樣的pipeline,再編譯成不一樣的動態庫文件,並在配置文件裏指定不一樣的算法號便可在OWT中實現多個算法分析。
對於這一部分的使用說明,在Webrtc hack網站(網址https://webrtchacks.com/accelerated-computer-vision-inside-a-webrtc-media-server-with-intel-owt/)上有一篇比較詳盡的文章,能夠進行查閱學習。
整個OWT系統演進了不少年,在資源調度方面進行了不少處理,OWT支持依據CPU,GPU,VPU資源使用狀況進行任務調度。當部署在多臺機器以及多種計算資源的環境下,OWT會收集各個節點上的CPU,GPU以及VPU使用狀況,將新來的分析任務根據調度策略分配到相應的節點進行工做。咱們提供了幾種經常使用的調度策略,用戶可根據實際部署狀況對各個模塊單獨配置不一樣的策略。
對於HA,當Analytics處於正常狀態,IP攝像機的流導入,經過圖中最上端一路流程進行錄像。分析任務正在進行時,忽然出現故障,這時能夠被Session Control檢測到,。Session Control發現可用節點,將可用節點激活,再將正在分析的流導入該分析節點,繼續被中斷的分析任務,再傳輸到Recording節點進行錄像。這樣就能夠在實際場景中實現高可用的過程。
3. 總結
總體方案中分析部分是基於深度學習的方式與OWT相結合,OWT使用GStreamer pipeline簡化實時視頻分析過程,開發者能夠方便地經過組合GStreamer plugin來實現不一樣的實時分析任務。同時,OWT利用OpenVINO以及OWT自己的調度機制來充分利用計算資源,從而提高總體性能。OWT支持分佈式部署,各個功能模塊能夠快速方便地進行擴展。再加上OWT提供的HA機制,能夠保證明時視頻分析系統的穩健運行。
英特爾一直在致力於Visual cloud、Computing等基於IA平臺的發展,同時也提供了不少開源資源,例如Open VINO、OWT 在GitHub上有相應的開源項目。同時英特爾在客戶端也有一些AI的方案,例如WebNN等,將來也將在瀏覽器上落地,敬請期待。