網路城邦
上一篇 回創作列表 下一篇   字體:
你知道用C++寫影像辨識程式有多恐怖嗎?
2020/09/16 07:06:51瀏覽737|回應0|推薦5

C++ 建立三維陣列的幾種方法

剛開始認真學習影像辨識(處理)時,大約是20多年前的19971998年吧?當時所有前輩都說那一定要用C++啦!主要著眼點應該是執行效能的問題,當時還沒有.NET Library的整合,C++語言與作業系統函式庫結合最緊密,執行效能也最高,VB等等其他語言就沒這麼能夠「直達天聽」,所以一樣邏輯運算的程式速度都比較慢。

C++Windows APIComputer

VBVB LibraryWindows APIComputer

我當時就「不乖」,沒有聽前輩的話,學會一些影像的基本原理之後就用熟悉的VB6開始玩了!如果發現某些運算速度太慢就捨棄VB語言中的指令,「盜用」C語言的函式庫,那時的VB或其他語言常幹這種事情,稱之為使用Windows API!我的VB6聲納軟體中很多影像處理的動作都是這樣翻牆偷渡的,所以沒有效能比C語言低的問題,開發時間則比C語言快很多,如前文所說,C語言很笨很不友善嘛!

當然到了.NET時代(大約2005年之後)就已經完全沒有這種不同語言之間執行效率的差異了!因為各種語言與作業系統銜接溝通的函式庫統一了!下面是最新版的Visual Studio選擇程式語言的畫面,各種語言都一樣使用.NET Library,所以基本上只有程式好不好寫的差異,根本沒有誰的執行速度較快較慢的問題。

失去了效能的優勢,像C++這種語言在設計影像處理程式時就顯得很尷尬笨拙了!最明顯的就是高維陣列的問題,如前面文章連結,各位可以充分欣賞C++處理這些陣列時的繁瑣程度!但是做影像處理時最常用的就是二維,甚至三四維的陣列!能堅持用C++作影像辨識,還做得比我好的人,我會視若神明!

所以我常常覺得自己可以以一個外行人的身分殺進影像辨識領域,幾年之內就做到目前的成就,開發出好多使用C++的前輩都做不出來的軟體,關鍵就是我「沒有使用C++」!但或許有人會說我沒認真用過C++怎麼知道不好?或許我用C++會更強啊?

事實上我算是用過的!有段時間我在玩HTML5 APP,就是JavaScrip作影像辨識程式JS程式跟C++類似,沒有簡單好操作的高維陣列資料結構,每次需要用時腦袋裡就必須有自己的:多維轉一維,一維轉多維陣列的邏輯「暫存區」,真的累死了!累到沒記憶容量去思考真正資料需要做的演算了!只希望陣列資料不要轉錯就萬幸了!

稍後有個案子需要將我的辨識程式遷移到一個微電腦的Linux平台,我的RD受命將程式翻譯成C++,足足耗費一個星期才翻譯除錯完畢,我也是那時才知道C++的多維陣列這麼難操作的!比我當時已經熟悉的C#更原始,更不友善!我的RD也是自此對於這種語言敬而遠之!跟我口徑一致,很懷疑為何有人會笨到堅持用C++作影像辨識?怕累不死嗎?

還好我當教授時自始自終都還沒正式開課教過影像辨識,不然就會被迫面對要不要用C++語言來教的尷尬壓力!因為所有堅持正統,「正經」的大學教授都是這樣教的!太神奇了?老師寫都寫得累死了,學生能學會者幾稀?難怪會作影像辨識的人才這麼稀有?想正確翻譯成C++都好難了,還要直接用C++揮灑自如的「創作」?不太可能吧?好像叫現代人用文言文寫文章?有幾個人寫得出來呢?

我當年剛開始教程式語言時也有類似的壓力,我比較熟悉VB,但是大學生的程式設計課怎麼可以只教VB?所以就變成VBC#雙語教學了!這樣也是有必要的,即使你用VB做甚麼都行,但是要進入業界工作,看不懂C語言還真的寸步難行,因為甚麼資料查到的原始碼都是C

所以大家知道了嗎?影像辨識這件事會顯得如此艱難,C++的語言障礙與堅持它最好的迷思是一大主因!事實是影像辨識能否實現的關鍵是演算法,任何程式語言其實都可以實現這些演算法,連網頁內使用的簡陋語言JavaScript都可以!以前或許執行效能與語言種類有關,現在如果你是用Windows作業系統開發,任何語言效能都一樣的!

我必須強調:我才是真的作影像辨識產品多過所有在頂大教影像辨識課教授的人!所以大家多少信我幾分吧?C++語言絕對不是影像辨識所必須,而且一直是個莫須有的障礙OpenCV之類的程式集會用C++,只是因為它們是由一群已經習慣使用C++的人所創作,沒有任何其他的必要原因。

如果你可以自己掌握辨識邏輯,你連OpenCV都不必參考,用習慣使用的語言寫出來最快最好最精準!我們公司就完全沒有這種東西!任何一台電腦中都沒有OpenCVMatLab這類支援影像辨識的函式庫或工具軟體!我們常用的影像軟體只有PhotoShop和小畫家,用來檢視影像細節之用,你可以隨時來臨檢,直接用基本原理寫程式解題一點都不困難,除非你堅持用C++,這是真的!

這也很像寫SCI論文必須用英文,造成其他語言使用者的一些障礙一樣!要一邊思考深奧的科學問題還要用非母語的英文寫出來當然很難,但這不表示英文會讓你的論文更有學問,我自己的英文是還可以,通常會直接寫英文,但是我對其他人的建議都是直接用中文寫吧!不必讓自己陷於不必要的困境,寫好再請翻譯社翻譯都不算丟臉,我們是科學家,不是英語系教授嘛!大家都說要務實,但是事關顏面時誰務實了?大概只有我這個三八!

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

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