ISL-IH002【Multithread video streaming】
文件 說明 下載點
ISL-IH002-C1【Multithread video streaming】 本文主要練習 native thread 的實做,而我們則改編來自網路上的範例程式:Streaming OpenCV Video Over Network ,來實際操作 native thread 的程式碼。本文中,為了改編範例程式,必須了解 native thread 各個程式碼的使用方法,因為在範例程式中,是使用pthread 在 BSD 上來實現,而本文主要是以 native thread 在 Windows 上來實現。另外,為了增加 CPU的負載,我們還增加了幾條線程來做影像處理,以便讓實驗結果有明顯的區別。最後,還必須開一條線程給網路串流來傳輸資料,以便達成影像處理與視訊串流的同步執行,這也就是我們使用多執行緒的原因,希望在一個時間內執行多支程式,幫電腦達成多工及平行處理。我們的實驗環境是準備了三台不同的電腦進行測試,分別是:雙核心 2.0GHz、雙核心 2.73GHz 以及四核心3.52GHz。而測試的方法則是比較在不同的電腦上處理500 禎影像的執行時間,以便我們記錄量化的數據。在實驗結果,因為使用五條線程數的關係,在雙核心的兩組電腦上可以令 CPU 使用率達到 80%以上,使得兩組電腦皆可以達到接近核心數的改善倍率,但是使用四核心電腦時,由於線程數略等於電腦核心數,無法將 CPU使用率提高至接近滿載的情況,使得在四核心電腦上測試而得的改善倍率無法達到接近於電腦核心數的理想值,所以在本次的實驗中,我們只得出使用多線程會約略的提升一點效能,但因為程式碼的關係,CPU 並沒有達到預期的滿載,近而影響了實驗結果。 立即下載
ISL-IH002-C2【Multithread video streaming】 此實驗於 Windows 作業系統平台上使用 Win32 的Native Thread 進行影像擷取、影像處理、並將影像經由網路從 Server 送出,由網路另一端之 Client 來接收Server 處理過的影像。在程式設計上各部份的運作由一個至數個執行緒(thread)來分工進行,並有 3 個共同存取記憶體或變數的 Critical Section,故執行緒之間需要使用 Synchronization 機制來控制變數的存取權 而過程中的影像處理的部分。為應用 OpenCV於 Server 端計算擷取後影像三個通道各別的直方圖(Histogram),並將各影像計算直方圖等化(Equalized Histogram)後合併成一張三通道、經過運算的圖片。最後使用 winsock 之 socket 建立網路 TCP 連線,從Server 端將每一張運算過的圖片送至 Client 端,然後由 Client 端播放接收到的影像。根據實驗結果多執行緒比單執行緒在處理 frame 倍率較大時能增加處理速度,影像處理過程使用 3 條 threads 執行,在frame 倍率較大時效能接近 3 倍;而在負載較小時,多執行緒與單執行緒執行效能相近。 立即下載