網路城邦
上一篇 回創作列表 下一篇  字體:
程式裡面真的沒有神→案例
2013/11/21 10:42:41瀏覽1455|回應8|推薦10

如果你對電腦技術問題沒興趣,本文就跳過吧!

我的車牌辨識系統建置工程仍在進行之中,整個工程的前端是從各路口(預計30~35個測站)錄影中的監視器畫面取得影像,先簡單篩選辨識「有無」車牌,確定有車牌的影像就由網路後送,集中到警局的伺服端電腦。再由伺服端的辨識程式辨識車牌,辨識結果及圖檔再與資料庫結合,配合ASP.NET網頁顯示與查詢辨識結果。可以看出整個工程還蠻浩大的,我也開始動用學生幫忙建立資料庫與網頁,這是他們上課時我教過的,學生也很興奮(還有錢賺咧)

但是很氣結的是:不知道是我的上游廠商還是警局的技術人員,一直抱怨我的前端程式跑太慢,堅持要測試使用別的方法擷取監視器畫面,但是他們的建議在我看來都是很荒謬的餿主意,不用試,光用心算就知道會更慢十幾倍!但是任憑我寫多少次Email解釋,老闆傳回來的訊息仍是對方堅持要測試他們建議的方案,我必須配合改程式,而且是越改越越慢。改程式因為不是增加程式功能,反而是刪減,所以不算難,只是做這些必然失敗的事肯定延誤工程,其他真正該關心的事情還很多。最終延誤工程的責任誰來擔呢?是歸咎於我的技術太爛嗎?

各位可以看到系統架構刻意將辨識分為前後端,前端只看「有無」車牌不作完整辨識就是要節省時間,依照我的設計每秒可以抓到約10張原始畫面篩選有無車牌,完整辨識較為耗時就送到後端處理。前端的資料流是持續的,所以必須很快,處理慢了就會有車子漏掉。但是多數畫面並沒有車牌,真正需要後送的照片估計約每兩秒鐘一張。所以後面的伺服器可以一對多,處理很多測站傳回來的照片。

問題出在他們前端的電腦老舊,他們嫌我的程式處理速度不夠快會漏車,於是說某軟體可以直接將AVI影片檔中的影格還原成照片,最高一秒可以切出30張照片,「效能比我的程式好多了!」堅持要用那個軟體抓原始照片,再由我的程式辨識,那就絕對不會漏車了!我的回信有一段分析如下:

我最初的程式機制是:

抓螢幕(顯示卡記憶體)影像→辨識→有車牌的照片用共用磁碟機傳到Server存檔

接下來因為對方不願放寬設定使用共用磁碟,於是改用FTP傳檔案的流程:

抓影像→辨識→有車牌的照片存到前端磁碟→FTP程式讀取這些檔案→傳到Serve再次存檔(多一次存檔,已經變慢約兩三倍)

現在業主要求的是:

由錄製程式錄製為AVI後存檔→由其他程式讀AVI解壓縮後分為影格存檔→我的程式讀取檔案分析有無車牌→無車牌者刪除檔案,有車牌者用FTP後送

這個奇怪的過程多出非常多存取、刪除磁碟檔案、壓縮與解壓縮影片為影格的程序,而且全部程式仍然要由同一台已被認定工作過重跑不夠快的電腦執行!這好像告訴癌末病人「你就是欠缺運動才生病的,以後天天要上健身房,早起跑五千公尺、有機會要參加馬拉松與鐵人三項比賽…」這樣當然不會治好病人,只會讓他提早斃命。

真的很荒謬且誇張!乍看之下建議中好像有一些電腦名詞,仔細一看都是來鬧的!怎麼可能會認為這樣複雜無效率的程序會有可能更快呢?鐵定是沒上過電腦概論,還相信程式裡面有神!某些程式可以超越硬體限制。

之前建議他們使用共用磁碟的方式將前端的檔案後送,就是因為FTP必須傳實體磁碟檔案,前端必須多存一次磁碟。他們堅持不願使用共用磁碟機制,要用FTP,事後證實我說對了,系統速度慢了近三倍!結果他們不是開始尊重我的專業判斷,而是建議其他更荒謬的「解決方案」!還要我繼續配合?OMG,最終只能無奈但是審慎地跟我的直屬老闆說:

有關AVI切圖的事已討論很久,我覺得到了必須審慎應對的時候了。

如果這些堅持來自你的想法,我們應該再開個會詳細討論一下!

如果這個堅持來自對方某位技術人員的想法,應該安排我當面與他討論。

如果只是對方技術能力差,應該可以經過這些技術討論順利解決;

如果是對方別有居心,想凸顯自己的地位或存心搞砸此案,

我們就必須有些自衛的動作,譬如我信中的這些技術分析要公開,表示我們早有正確評估,如果對方堅持做這些傻事,我們也配合之後最終延誤進度,就不必扛這個責任了。

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

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

 回應文章

guest
2014/06/09 11:03
老師有堅持自己的專業 不採用其他荒謬的解決方案 成功說服他們把FTP傳檔案改成你最初的程式機制嗎?(guest@gmail.com)
鄉下老師(yccsonar) 於 2014-06-09 11:16 回覆:
Not yet! 因為現在速度還跟得上,等到更多監視器上線資料傳輸困難時或許會聽我的話。

鄉下老師
等級:8
留言加入好友
2013/11/23 21:16
今天老闆帶來好消息,繼嘉義市之後彰化縣也打算要安裝這個系統了!業務能力真好,嘉義的系統都還沒上線使用咧!

Jeff & Jill
等級:8
留言加入好友
2013/11/23 16:06

我是古代程式匠,當年用一種叫做DirectShow的東西,由影像擷取裝置取得資料流。.Net時代,剛剛搜尋了一下,也有個叫做DirectShow.Net的玩意兒,可惜沒用過,靈不靈就不知道了。謹供參考。


鄉下老師(yccsonar) 於 2013-11-23 21:13 回覆:

看起來還是抓顯示中的畫面,與我目前的方法相似。對方的說法是他們用影像擷取卡錄影像,但是不想讓錄影畫面顯示在螢幕上,因為會消耗電腦資源。我要在螢幕沒有畫面的狀況下得到錄影中的畫面!也就是比較像要在影像擷取卡中抓資料,但是擷取卡不是標準常用的設備,我猜是不會有程式介面可以用。以前我試過抓音效卡內的緩衝區資料,很成功,原因是音效卡是比較普遍的設備,找得到程式介面。


妞~
2013/11/23 09:58

辛苦嚕...

加油~~

(chma@alumni.nctu.edu.tw)

530
等級:7
留言加入好友
2013/11/22 23:49

我有見過"麥假ㄝ"半路出師.明明一知半解.硬要裝很懂

還很不可理喻...

鄉下老師(yccsonar) 於 2013-11-23 04:02 回覆:
確實!自誇懂電腦的半調子,多如過江之鯽。我自己學電腦的過程中是被這種人唬大的,現在終於知道真正很懂的人如鳳毛麟角,電腦軟硬體加起來真的學問很大,不是隨便說說就行的。

Jeff & Jill
等級:8
留言加入好友
2013/11/22 23:23

除非那個錄製程式本來就在工作,最好還是硬體壓縮,不然存avi檔、解壓縮之後再分格,會是很糟糕的主意。除了增加系統負荷,解析度不佳的話,壓縮失真的結果,也會影響辨識的正確率。

不太理解的是,為什麼是抓螢幕影像,而不是直接由影像擷取裝置取得資料流?螢幕影像需要存取顯示卡,再快也是IO動作;而且如果timing抓不準,很有可能抓到更新一半的畫面。直接由影像擷取裝置抓畫面,應該不難達到30fps。一點小小意見提供參考。


鄉下老師(yccsonar) 於 2013-11-23 03:47 回覆:

您很內行,我之前(2000年)曾做過聲納訊號擷取的程式,就是從聲音擷取裝置(音效卡)的暫存記憶體中直接取得剛剛數位化的資料。那時很感謝一位成大的博士生幫忙提供存取音效卡記憶體的程式,我目前是找不到類似直接取得影像擷取卡原始數位資料的程式,我預期可能為了影像處理的效率,這種硬體根本不提供高階程式介入的IO介面。如果您能提供我會感激涕零!

我目前是使用.NET中的Graphics物件的CopyFromScreen指令,應該是到螢幕顯示的記憶體區去取得資料,事實上不會只抓到換螢幕中的一半啦!動作很快很穩,要抓一秒50張都可以,我說一秒處理十張左右是包含辨識車牌有無的時間。


小點兒
等級:8
留言加入好友
2013/11/22 07:04
因爲很多時候資管人員永遠看不出自己有什麽不對的觀念。還有另一個解釋。。。 就是很多時候做資管的並不了解 Hardware Limitation
鄉下老師(yccsonar) 於 2013-11-23 04:07 回覆:
即使是最混的資管系也應該上過電腦概論吧?應該知道磁碟存取需要時間,而且通常會比直接在記憶體與CPU之間運算轉移慢很多,也應該知道AVI是壓縮檔,壓縮與解壓縮都需要時間處理...。他的錯誤還真的不勝枚舉。

鄉下老師
等級:8
留言加入好友
2013/11/21 15:45

剛剛與老闆通話後,知道那位很盧的關鍵人物是對方(警局)的一位資管人員,理論上應該是很懂電腦的,這讓我更加不解?