網路城邦
上一篇 回創作列表 下一篇   字體:
用螢幕辨識其實是很聰明的選擇
2019/12/20 15:38:18瀏覽2103|回應0|推薦4

我的動態車牌辨識軟體都是從螢幕上取得連續的影像作辨識的!其實就跟一般人常使用鍵盤上的PrtScr按鍵拷貝螢幕畫面一樣,只是我是用程式作的!以車載車牌辨識軟體來說,依據電腦效能盡快的處理,每秒可以高達二三十次,一般停車場軟體則控制在每秒十次左右,這樣就很夠用了。

一開始我這麼作的原因是不想讓我的軟體與特定廠牌的攝影機綁在一起,我不是賣攝影機的,如果為了賣車牌辨識系統買攝影機來搭配,我也不好意思賺取差價,而且近幾年的攝影機品質普遍很好,我的軟體其實並不需要搭配特定的攝影機,一般大家都買得到的就很好用了!

但是我一直有個困擾,因為多數的車牌辨識系統都是整套賣的,還多半是從攝影機直接取得影像,並不需要經過電腦螢幕取得影像,所以某些客戶就覺得我的「技術不好」?無法將軟硬體充分整合。最直接的抱怨就是:如果螢幕上開啟其他程式時,攝影機的畫面被遮住,我的軟體就無法運作了!

我當然也想研究如何跳過螢幕直達攝影機的機制,但是嘗試了很久一直不太成功。一般來說,從攝影機直接取得影像的方式有兩種,一是直接呼叫SDK取得單張的JPG影像,很多靜態模式的車牌辨識系統都是這樣作的,但是當然無法達到一秒幾十張影像的速度。

另一種方式是取得攝影機輸出的RTSP串流資料,我再用一些程式模組解碼成單張影像進行辨識,像是OpenCV就有這類免費的程式模組。這個我也試過了,但還是速度不夠快,遠不如我們用瀏覽器或影片播放軟體看影片那麼順暢。如果我的軟體用螢幕取像就可以達到每秒數十次的辨識,只是為了跳過螢幕直達攝影機,速度就變成很慢,一秒只有幾次的辨識,那就得不償失,客戶也無法接受了!

雖然這不影響我大部分產品的銷售,但究竟是我心中的一個疙瘩,但是最近的一次經驗讓我釋懷了!之前我的客戶要讓我連線到遠端時多半是用Team Viewer之類的遠端連線軟體,這種軟體用過的人都知道,不會像看YouTube視訊一樣順暢。現在我知道是因為他們在網路上就是傳輸連續的單張影像,而非一般視訊的串流影像,不僅速度較慢,電腦的資源消耗也大,一旦執行這種程式,同一電腦上我的辨識軟體都會被迫變慢了!

前幾個月我的某位大客戶很好心的提供了所謂的NVR連線給我,用瀏覽器直接可以連上他們在停車場的攝影機,我在遠端測試程式時就不會再卡卡的,只能看到一秒鐘幾個Frame的笨笨影像了!這讓我的研發進度大幅躍進,很多動態細節都很快掌握得更精準了!

因為我的軟體多半是四個車道同時辨識的,在1920X1080的螢幕上就是四個大約七八百乘上五六百畫素的視窗,像下圖一樣,所以我也一口氣連上四個車道的NVR攝影機。結果沒多久就發生悲劇了,我的顯示卡一直「當機」!每隔半小時螢幕就會錯亂黑掉十幾秒鐘之後才能恢復,恢復之後NVR連線也全部中斷,必須重新登入一次,電腦上其他程式,包括我的辨識軟體只是抓不到畫面而已,不會因此當掉。

我以為是我的顯示卡老舊崩壞了,還真的立即買了一張蠻高階的新顯示卡!但是還沒換上新卡前我就發現,如果我不開那麼多個NVR連線時,我的舊顯示卡還是非常穩定的!所以很顯然的,NVR連線能這麼快速順暢其實是用顯示卡的功能幫忙做到的!

至此我恍然大悟!我之前用OpenCV之類的軟體作串流解碼顯然無法請顯示卡幫忙,所有的計算都在CPU與主記憶體內進行,當然無法像一般視訊,包括這種NVR連線一樣順暢高速!但是當顯示卡作好了極高效率的解碼工作,我從「螢幕」(其實是顯示卡的記憶體)中拷貝畫面時,等於是坐享其成!當然就很快可以取得我需要的可用於辨識的單張影像了!

所以啦!如果我需要高速高效率的可辨識影像來支撐我的動態辨識軟體,就必須仰賴顯示卡的服務,如果將顯示卡的專業工作移到CPU與主記憶體,當然不可能那麼快,不然就不必有顯示卡這種產品了!稍後我換上了更厲害的新顯示卡,一次連上六個NVR都可以跑得很順暢,CPU負荷也不會明顯飆高。

有了這次經驗,我以後就可以比較放心跟客戶解釋,我的螢幕拷貝模式其實不是那麼糟!反而是一種可以充分利用電腦既有資源的聰明方案了!自己找程式解串流影像其實比較沒效率,電腦CPU還會更累!

( 心情隨筆工作職場 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=yccsonar&aid=131317734