雲端監控視訊處理平台 SDK 安裝與開發指南說明書 版 別 : 第 1.0 版 總頁數 : 14 頁 ( 含封面及附件 ) 工業技術研究院資料 ITRI DOCUMENT 1
目錄 一 前言... 3 1.1 文件目的及範圍... 3 1.2 技術項目簡介... 3 1.3 專有名詞定義... 3 1.4 縮寫... 3 1.5 參考資料... 3 二 應用範圍說明... 4 三 安裝指南說明... 5 3.1 基本開發環境需求... 5 3.2 開發環境設定... 5 3.3 參數檔說明... 9 3.4 視訊處理模組移植... 10 3.5 編譯範例程式... 12 3.6 執行範例程式... 12 3.7 處理分析結果... 13 四 視訊處理介面說明... 14 工業技術研究院資料 ITRI DOCUMENT 2
一 前言 1.1 文件目的及範圍 本文件描述 雲端監控視訊處理平台 之安裝及開發視訊處理模組程序, 包含基本開發環境需求 開發環境設定, 以作為視訊處理模組開發者編譯及執行自行撰寫之程式, 整合至雲端監控視訊處理平台 本文件也包含一範例程式, 描述如何實作必要之雲端視訊處理介面, 如何編譯及執行此範例程式, 並顯示此範例程式於雲端監控視訊處理平台之執行結果 視訊處理模組開發者可根據此範例程式, 修改單機版之視訊處理模組, 並實作必要之雲端視訊處理介面, 即可整合至雲端監控視訊處理平台, 完成雲端化之目的 1.2 技術項目簡介 本技術為應用於視訊監控之雲端運算平台, 提供學界將視訊分析演算法簡易地雲端化 本平台可載入 AVI MPG MP4 3GP 等影片檔案, 採用 Plug-and-Play 之開放式程式介面, 提供學界將研發之視訊分析程式移植至本平台, 快速達成在雲端環境上處理大量監控影片之功能 本平台將提供 VMWare Image, 供學界將 C/C++ 開發之視訊分析程式碼 ( 可使用 OpenCV) 編譯為動態函式庫, 將函式庫檔置放於本平台即可運行, 確保研發者智權 1.3 專有名詞定義 雲端運算 (Cloud Computing) 是一種概念, 代表的是利用網路使電腦能夠彼此合作或使服務更無遠弗屆 在實現 概念 的過程中, 產生出相應的 技術 其本質大沿襲自 分散式運算 (Distributed Computing) 以及 網格運算 (Grid Computing) 1.4 縮寫 VP :Video Processing IDE :Integrated Development Environment 1.5 參考資料 [1] Hadoop - Apache Hadoop. (http://hadoop.apache.org/) 工業技術研究院資料 ITRI DOCUMENT 3
二 應用範圍說明 視訊分析演算法有下述需求之一, 即可透過本平台輔助運算 : 演算法之運算量很高, 需要分散式運算及自動負載平衡 ; 需要同時處理大量影片 ; 有跨平台操作需求 ; 需要接取網路攝影機或多種格式之影片 視訊分析演算法包含以下常見之應用 : 監視影片分析 : 如車牌辨識 事件偵測 物件檢索 ; 娛樂應用 : 如影片轉檔 影片品質提升 ; 交通應用 : 如車流統計 工業技術研究院資料 ITRI DOCUMENT 4
三 安裝指南說明 3.1 基本開發環境需求 本平台運行於 Ubunut 12.04 Desktop 環境, 以動態連結 (SO) 運行視訊處理模組, 參賽者請採用本單位提供之雲端視訊處理驗證環境 (CloudVP IDE) 進行開發 CloudVP IDE 請至 VMware 官網下載 VMware Player, 以執行 CloudVP IDE 之映像檔, 下載網址為 : https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player/6_0 請至本平台 FTP 下載虛擬映像檔 CloudVP IDE: ftp://e200.no-ip.org Username: itri Password:icl (ICL 小寫 ) 第一次載入映像檔會詢問 [I Move It] 或 [I Copy It], 選擇 Move It Windows 平台移植工具 為提供參賽者自 Windows 移植程式碼至本平台,CloudVP IDE 中提供一使用 OpenCV 之人臉偵測範例, 並提供 Visual Studio C++ 2012 專案作為參考, 參賽者需自備該 IDE 軟體 參賽者之視訊處理程式碼 視訊處理程式碼須採用 C/C++ 語言開發, 可使用 OpenCV SQLite 等函式庫, 但不可使用 MFC 物件 ( 例如 CString CList 等 ) 及 Win32 API ( 例如 GetSystemTime) 3.2 開發環境設定 VMware Player 執行 VMware Player, 載入 CloudVP IDE 之虛擬映像檔 :VMware Player \ [Player] \ [File] \ [Open], 開啟 Ubuntu-CloudVP.vmx 在 Ubuntu-CloudVP 的項目上點滑鼠右鍵, 執行 [Settings...] ( 如圖 1 所示 ), 依據參賽者電腦之硬體環境設定適當之參數, 其中 [Options] \ [Shared Folders] 用於設定虛擬電腦與實體電腦之對應關係, 用於在兩個環境中交換資料檔案,CloudVP IDE 預設之對應關係如下 : Windows 環境 ( 實體電腦 ) CloudVP IDE ( 虛擬電腦 ) C:\ D:\ /mnt/hgfs/c /mnt/hgfs/d 工業技術研究院資料 ITRI DOCUMENT 5
圖 1. VMware Player 載入 CloudVP IDE 之介面 啟動 CloudVP IDE 後, 輸入使用者密碼 123456 登入後畫面如下, 桌面連結 Terminal 為主要工具 圖 2. CloudVP IDE 桌面 確認檔案資料 CloudVP IDE 中提供一人臉偵測之範例, 執行 [Terminal], 確認 CloudVP 資料夾內容如下 : 工業技術研究院資料 ITRI DOCUMENT 6
圖 3. CloudVP IDE 檔案資料 資料夾與檔案說明如下 : 資料夾 \ 檔案 ini\facedetection.ini src\tfacedetection.h src\tfacedetection.cpp 說明 人臉偵測範例參數檔 人臉偵測 SO 範例標頭檔 人臉偵測 SO 範例原始碼 VS2012 Windows 環境之 Visual Studio 2012 範例專案, 其中 3rdParty 為 OpenCV 函式庫 將範例專案複製至 Windows 在 CloudVP IDE 中啟動 [Terminal] 程式, 輸入下列指令將所有檔案複製 Windows 之 D:\CloudVP: 於 Windows 建立 OpenCV 開發環境 cp -r./cloudvp /mnt/hgfs/d/cloudvp 將 Windows 之 D:\CloudVP\VS2012\3rdParty\dll\ 所有檔案複製到 C:\Windows\ 開啟 Windows 環境之測試專案 執行 D:\CloudVP\VS2012\FaceDetection.sln, 其中包含兩個專案 :(1) FaceDetection.vcxproj 為移植前程式碼 ;(2) TestSO.vcxproj 為移植後之測試專案 確認虛擬電腦之網路位址 ( 供網頁連結使用 ) 在 CloudVP IDE 中啟動 [Terminal] 程式, 輸入下列指令確認 IP: ifconfig 顯示如下圖之畫面, 可知虛擬電腦之網址為 192.168.244.128, 於實體電腦之瀏覽器輸入下列網址即可存取 CloudVP 資料夾資料 : http://192.168.244.128:8080/cloudvp/ 工業技術研究院資料 ITRI DOCUMENT 7
圖 4. 網路位址偵測範例 注意 : 若共享資料夾因故無法使用, 建議採 FTP 方式交換檔案 工業技術研究院資料 ITRI DOCUMENT 8
3.3 參數檔說明 本平台採用標準 INI 作為參數介接, 如下圖所示為人臉偵測範例之 INI 檔案, 說明如下 : Section Key 說明 Profile Name 定義模組名稱, 參賽者自訂 InitParam Value 建構子傳入之參數值, 以空白分隔 範例 :(1) 偵測對照表檔名.xml 及 (2)Metadata 輸出檔名 PreParamK -- 處理視訊資料前之參數, 通常為使用者設定參數, 可省略 FuncID Value K=1,2,..., 用以區分多組參數值 ID=0,1,..., 用以對應到作用之程式碼 參數值, 以空白分隔 PostParamK -- 處理視訊資料後之參數, 通常用於匯整處理結果, 可省略 FuncID Value K=1,2,..., 用以區分多組參數值 ID=0,1,..., 用以對應到作用之程式碼, 須與 PreParam 之 FuncID 不同 參數值, 以空白分隔 圖 5. INI 參數檔範例 工業技術研究院資料 ITRI DOCUMENT 9
3.4 視訊處理模組移植 VS2012\FaceDetection.cpp 為一般 Windows 環境開發之視訊處理程式碼, 具幾項主要步驟 : (1) Line37~42: 載入視訊處理所需之對照表 訓練集等 ; (2) Line44~50: 載入影片檔案 ; (3) Line53~78: 對每張畫面進行視訊處理 ; (4) Line61~62: 核心演算法, 對應至 Line17~28; (5) Line64~72: 顯示處理結果 圖 6. 視訊處理模組移植前程式碼 在本平台中, 僅需將上述步驟 (1) (4) (5) 轉換為開放式介面, 對應到下圖之實線框格之功能 讀取影片檔及參數檔 處理第 k 張畫面 processframe() 建構視訊處理 VP 物件 ( 傳入 InitParam) 影片結束? 是 否 設定影片寬高 setvideosize() 設定處理前參數 setparam() ( 傳入 PreParam) 通知影片結束 setendofvideo() 設定處理後參數 setparam() ( 傳入 PostParam) 顯示結果 圖 7. 雲端監控視訊處理平台運算流程 首先依標準介面, 設計視訊處理物件 (VP) 之標頭檔, 例如 TFaceDetection.h 參賽者將 Face Detection 相關名稱置換為自身模組名稱, 並將模組所需變數值置放於 Line43 後之區段 工業技術研究院資料 ITRI DOCUMENT 10
圖 8. 移植視訊處理之標頭檔 隨之將原本的程式碼移植到標準介面, 包含 : 建構子 TFaceDetection() 解構子 ~TFaceDetection() 處理畫面 processframe() 設定參數 setparam() 等, 因人臉偵測範例無需外部參數故無實作 注意 : 視訊處理的結果必須要輸出至 metadata 的檔案中, 格式自訂, 不可直接顯示 圖 9. 移植視訊處理之程式碼 工業技術研究院資料 ITRI DOCUMENT 11
3.5 編譯範例程式 當依標準介面實作完標頭檔 TFaceDetection.h 及程式碼 TFaceDetection.cpp 後, 將程式碼置放於 CloudVP IDE 之 CloudVP\src\ 參數檔置放於 CloudVP\ini 於 CloudVP IDE 中, 執行桌面 [Terminal], 輸入下列指令編輯 makefile 檔案 : gedit CloudVP/Makefile 如下例所示, 將模組所有程式碼檔案加到 Line4 / SRC 項目, 多個檔案以空白分隔 ; 將模組輸出之動態函式庫名稱定義於 Line5 / TARGET, 副檔名必須為.so 圖 10. 編譯 Makefile 範例 編輯完成並儲存後, 於 CloudVP IDE 中, 執行桌面 [Terminal], 輸入下列指令編譯程式碼 : cd CloudVP make clean make 若程式移植不正確,g++ 編譯器將顯示錯誤訊息, 一般而言可能使用到 MFC 物件或 Win32 API 若編議正確, 將生成一個動態函式庫檔案 TFaceDetection.so 3.6 執行範例程式 於 CloudVP IDE 中, 執行桌面 [Terminal], 輸入下列指令測試生成之動態函式庫 : cd CloudVP./PU./face.avi./FaceDetection.so./ini/FaceDetection.ini 其中為測試程式, 共傳入三個參數 :(1) 影片檔名 ;(2) 動態函式庫 so 檔名 ;(3) 模組參數檔 ini, 醒各檔名前均需加上./ 以免錯誤 若程式正確執行, 將顯示每張畫面的執行狀態 :OK 或 FAIL 工業技術研究院資料 ITRI DOCUMENT 12
3.7 處理分析結果 本範例將人臉偵測結果輸出至./output.meta, 定義於 TFaceDetection.ini 之 InitParam 本範例輸出之資料格式如下 : 人臉索引 FaceIdx, 畫面索引 FrameIdx, 人臉框左上座標 X, 人臉框左上座標 Y, 人臉框寬度, 人臉框高度, 時間戳記 Timestamp 0,0,158,221,55,55,0 1,0,337,246,56,56,0 2,0,44,219,64,64,0 3,0,549,228,69,69,0 0,1,159,220,56,56,120 1,1,549,229,67,67,120 2,1,336,246,56,56,120 3,1,48,218,68,68,120 0,2,212,29,44,44,160 1,2,160,219,55,55,160 圖 11. 輸出 Metadata 範例 上述 metadata 可用於網頁介面呈現 ( 如下位址, 其中 IP 請修改為參賽者虛擬電腦之 IP), 或由參賽者自行撰寫 Windows/iOS/Android 程式讀入後呈現 http://192.168.244.128:8080/cloudvp/output.meta 工業技術研究院資料 ITRI DOCUMENT 13
四 視訊處理介面說明 參賽人員需於視訊處理模組實作以下介面 : class VideoAnalyticsABC { public: VideoAnalyticsABC(){} virtual ~VideoAnalyticsABC(){} }; virtual bool setvideosize(int ivideowidth, int ivideoheight)=0; virtual bool processframe(unsigned char *pbinprgb24, UINT64 itimestampms)=0; virtual bool setendofvideo()=0; virtual bool setparam(int argc, char *argv[], int iid=0)=0; virtual bool setvideosize(int ivideowidth, int ivideoheight) 設定分析影片之解析度 Returns 回傳是否設定成功 virtual bool processframe(unsigned char *pbinprgb24, UINT64 itimestampms) 處理分析視訊內容的一張影像, 傳入此張影像的 RGB 內容和時間截記 Parameters pbinprgb24 影像的 RGB 內容, 格式固定為 :RGB24 itimestampms 影像的時間截記, 單位毫秒 Returns 回傳是否分析成功 virtual bool setendofvideo() 通知視訊處理模組此影片已結束, 此時視訊處理模組可將分析結果寫入到檔案或資料庫 Returns 回傳是否設定成功 virtual bool setparam(int argc, char *argv[], int iid=0) 設定分析影片之前或完成後所需的參數 Parameters argc 參數個數 argv 參數值 iid 對應至 INI 定義之 FuncID, 用於區隔處理前及處理後之參數設定功能 Returns 回傳是否設定成功 工業技術研究院資料 ITRI DOCUMENT 14