字體:小 中 大 | |
|
|
2015/01/22 07:03:35瀏覽1497|回應2|推薦14 | |
之前我寫過一篇多核心?你用得到嗎?大略介紹了我使用24核心伺服器電腦的經驗。最近又碰到一個問題,我想做即時的影像目標監控,但是需要的運算時間很長,一張完整影像的辨識時間鐵定會超過一秒鐘,如果有目標物快速通過監視器影像,我就會無法鎖定目標。我必須在0.1到0.2秒的時間內完成全套辨識,才能確定任何人或物體都無法「快閃」過我的監視。 如之前的文章讓你錄不到的隱形科技?我發明了一個很聰明的演算法可以計算出很乾淨的背景影像,只要將目前影像減去背景,目標物就可以浮現了!但是這個背景運算很耗時,算一次就要用掉快一秒了!雖然我可以每三五秒才算一次背景影像,因為它不會變化太快的!但是一開始做這種計算時,抓影像監看的動作就會暫停,此時目標就有機會閃過我的監視了! 經過幾天掙扎,忽然想到我的電腦雖然不是24核心,但也有八核心(所謂的I7)啊?如果將監看與計算分成多個執行緒,分別由不同CPU處理不就好了?即時影像都是連續的,處理程序雖然多,但是可以分散到多個CPU去跑,譬如:一號CPU負責擷取影像,二號CPU負責算背景,三號CPU負責算差異影像,四號CPU負責描輪廓…,我有八個CPU可以分擔冗長的辨識運算程序,應該就可以順利的在短時間內完成辨識,而不會漏掉目標了吧? 即知即行,下面是目前用四個執行緒(含主執行緒)的程式表現,真的好快!每秒抓十張影像,立即辨識輪廓幾乎可以做到同步!多核心電腦再度救了我!可以得到的反面教訓是:如果沒有軟體技術的配合,多核心電腦其實用處不大!程式師們,你們有常常思考這個問題嗎?或許一念之間你的遲緩程式們就可以像我的一樣飆速,嗆到抓不住了! |
|
( 心情隨筆|工作職場 ) |