隨着物聯網技術的發展,實時視頻分析技術已應用於智能物聯網的各個領域。英特爾基於與GStreamer以及OpenVINO構建了整套實時視頻分析方案,為用户提供更加靈活、便捷的實時視頻分析服務。本文由英特爾高級軟件工程師 吳秋嬌在LiveVideoStack線上分享內容整理而成。
文 / 吳秋嬌
整理 / LiveVideoStack
背景介紹
隨着物聯網技術的發展,實時視頻分析技術已應用於智能物聯網的各個領域,例如:智能零售、智能工廠、智能監控等,如果把視頻比作物聯網的眼睛,那麼實時視頻分析技術就是物聯網的大腦。
目前基於深度學習以及計算機視覺的視頻分析是最通用的方式。
以物聯網技術中非常通用的場景-物體識別技術為例,如圖是典型的物體識別的流程圖,在前端採集一段視頻流,再將物體識別出來,對所識別的物體進行標註,再進行回傳顯示,需要經過很多複雜的步驟,其中需要調用很多接口。同樣還會涉及到顏色空間轉換、縮放、推理、以及編解碼的過程,這些過程都需要佔用很大的計算資源。
同時在實際環境中如果有CPU,GPU,VPU等多種計算資源,如何讓編解碼以及推理等過程充分利用不同的計算資源從而提升系統性能?此外,當系統需要應對更多的流分析任務時,如何進行方便快速地擴展。這些都是實時分析系統會碰到的問題。接下來我們從這些問題出發來介紹OWT(Open WebRTC Toolkit)如何解決實時分析系統的複雜性,性能以及擴展問題。OWT的實時分析系統是基於英特爾的OpenVINO以及開源的GStreamer框架進行開發,我們先對OpenVINO,GStreamer以及OWT做個簡單的介紹。
英特爾 vision computing platform
Open VINO是英特爾推出的pipeline的工具集,具有完成算法、模型部署所需要的各種能力。
從圖中可以看出,其主要由兩部分組成:模型優化器(Model Optimizer),可以把在其它框架下已經訓練好的模型轉換為Open VINO所適用的模型再進行優化,轉換速度較快;推理引擎(Inference Engine),即在設備上運行的AI負載在做推理時,可以將我們所需要的處理效果例如前處理、後處理、特徵疊加等,通過Open VINO接口的形式方便的實現。
而且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。
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節點進行錄像。這樣就可以在實際場景中實現高可用的過程。
總結
整體方案中分析部分是基於深度學習的方式與OWT相結合,OWT使用GStreamer pipeline簡化實時視頻分析過程,開發者可以方便地通過組合GStreamer plugin來實現不同的實時分析任務。同時,OWT利用OpenVINO以及OWT本身的調度機制來充分利用計算資源,從而提升整體性能。OWT支持分佈式部署,各個功能模塊可以快速方便地進行擴展。再加上OWT提供的HA機制,可以保證實時視頻分析系統的穩健運行。
英特爾一直在致力於Visual cloud、Computing等基於IA平台的發展,同時也提供了很多開源資源,例如Open VINO、OWT 在GitHub上有相應的開源項目。同時英特爾在客户端也有一些AI的方案,例如WebNN等,未來也將在瀏覽器上落地,敬請期待。
LiveVideoStackCon 2020北京
2020年10月31日-11月1日
點擊【閲讀原文】瞭解更多詳細信息