標籤:
halcon與delphi
halcon與delphi系列,早兩年就想寫,不過一方面,因為halcon是售價高達數萬歐元(不是人民幣)的專業軟體,知道的人不多,
另外一方面,個人瑣事太多,一直沒時間動筆,這次,借國慶空閑,匆匆忙忙,開個頭先。
這個標題本來準備用:《halcon、opencv與delphi、python、vb、c++》
太雜,雖然現在流行長標題,還是簡化了。
做映像分析有十多年,寫過原生的OCR字元識別,當時沒有opencv,全部是原生代碼,寫的很痛苦,和寫彙編差不多
不過也學習到不少東西,blur、細化、骨架、閉合、。。。。。。,從這點看,學習下opencv,對於基礎也是必要的
效果還可以,基本上除開QQ過於變態,一般的論壇、csdn、工行、移動、部落格園、老版新浪微博的驗證碼,都能簡單愉快的暴力識別。
這幾年,主要做映像分析、字型結構的映像分析、AI方面的項目,實業方面,主要是PCB抄板設計,這個是protel電路圖逆向工程,必需的。
映像分析主要用過agg、opencv、cgal、labview、vision、halcon、sci、pil,以及一大波gis內建的高素質幾何計算庫
程式設計語言早期是:c、c++、,這幾年是:python、delphi,
目前,映像分析基本上就只是:delphi+halcon,(機器學習與大資料,是python+sci.xxx+pandas)
delphi+halcon,這個組合,可以說是映像分析的神級配置,無論是開發效率,還是運行實在是太高了,分分鐘秒殺c+opencv,c+python,以及其他各種組合,
特別是開發效率,幾乎只有cv與c++的十分之一一,因為halcon內建的就是簡化版本的pascal指令碼型程式設計語言,而且halcon的控制項封裝,非常龐大、專業、細緻,基本上和原生vcl控制項差不多。
halcon與opencv
機器人,是目前國家鼓勵的科技、產業項目,目前程式員缺口極大,而國內早期,和目前,delphi程式員,可能是世界上最多的,早幾年,還傳說,盛大準備收購delphi,雖然沒成,不過絕對不是錢的問題。
機器人,最核心的人工智慧與機器視覺,人工智慧,python已經是標準
機器視覺,說白了,還是映像分析,這塊,德國的halcon(海爾肯,自己隨便音譯的),是目前行業最好的方案,基本上沒有對手,
國內,學術界目前還是opencv為主,雖然cv是免費的,halcon的售價高達數萬歐元,但憑藉其強大的功能和一線生產力效率,企業領域,基本上是halcon獨大。
opencv雖然很強大,但與halcon相比,無論在開發效率,運行速度以及內建模組功能方面,完全是業餘級的。
這個原因是多方面的:
- ::opencv是開源軟體,無法收錄最新的專利、商業演算法,至少有5-10年時間的技術差距
- ::許多企業自身開發的演算法是嚴格保密的,halcon不少內建函數,即使是專業人員也無法理解函數採用的演算法、模型。
- ::opencv偏重於學術,演算法雖然簡單,但效率不高,即使是最基本的hough直線檢測,如果不對內部源碼進行二次修改,對原圖進行過濾,結果基本無法直接使用
- ::opencv最佳化不夠,近年雖然也加入gpu、cuda和c語言高效函數,但與halcon彙編級的最佳化,差距還是很大的
- ::opencv不夠全面,只有最基本的映像分析模組,缺乏專業的幾何計算模組,由於實際項目,必需記住sci,sympy,cgal等其他幾何計算庫,大大增加了開發成本和學習周期
例如,即使是最簡單的輪廓分析,opencv只有最基本的矩形、園、橢圓幾種,而halcon要豐富的多;
而再如,形態學內建模型,cv只有cross、rect、circle三種,而halcon預支模型高達數十種。
象的堆砌原件,opencv基本上無能為力,而halcon直接秒殺:(ps,本blog還缺幾張圖,有時間補)
halcon與delphi
halcon的內建語言,基本上是簡化版本的pascal,不過增加了python的元組tuple資料。
奇怪的是,國內halcon開發,基本上是vb,和c++(csharp)兩種模式
一線,基層使用者用vb的多,專業學者,大部分使用c++(csharp),而delphi很少有人用。
這個一方面,與delphi自身近年衰退有關,另外,delphi調用halcon,每次會有20m左右的記憶體泄露,也有關係。
不過,delphi再不行,在TIOBE2105程式設計語言排名榜上,也是僅次與c(含c、c++、objc、occsharp)的行業第二大原生程式設計語言。
(ps,xe9、xe10,delphi強化了並行開發,不過遠不如python的map優雅方便,如果delphi能夠整合cuda開發,進入gpu、hpc領域,才是真正鳳凰涅槃)
而記憶體泄露,是crack的問題,就是c++,也有,用vb因為使用halcon的.net封裝模組,因為net平台內建gc管理,可以解決,其實delphi也可以採用.net模組
delphi、c++、vb、python與影像處理
vb即使對於初學者,和在產品開發原型階段,也是很差的映像開發語言。
初學者,以及簡單的產品原型開發,筆者推薦python+opencv,cv3.0已經支援python3了,
可惜,delphi的cv庫還是v2.49版本的,不然,delphi+cv3也是個不錯的選擇,特別是調試、效率方面
c++,無論如何,不是映像分析理想的工具,
對於映像分析,c語言類的底線,差不讀只有c了,即使是opencv,90%也是c,
(fontforge的開發人員,是如此痛恨c++,以至於在faq裡,對c++大段吐槽)
映像分析起點就是2D,二維的,複雜一些,連續映像序列,3D,生動影像分析,都必需是多維的資料模型。
而c語言,先天缺乏內建數組,採用*指標結構,作為數組。
*指標數組,對於簡單的一維資料分析,勉強可以,但對於2維、3維以及更高的多維資料,非常痛苦。
大家知道,影像處理非常吃記憶體,而c的記憶體管理,完全是*指標,歐式,複雜無比。
對於一線程式員而言,採用c++進行影像處理,在c++程式設計語言方面的時間成本,甚至要高於映像分析演算法本身。
至於c++,唯一的優點,可能就是速度。
而c的速度優勢,是相對於vb、python的,可能有10-20倍的運行速度優勢,不過對於delphi,就是在最嚴格的對比當中,也是基本差不多。
不過delphi十倍於c的開發效率,使程式員,能夠在軟體開發的原型、中期、調試、交付、維護等各個階段,採用更多的模型演算法,進行最佳化,因此,實戰當中,delphi+halcon的組合,要遠遠優於c+halcon,c+opencv
以往,影像處理,delphi唯一的短板,是缺乏工業級的映像庫,cv、cgal對於delphi的支援一直不夠好
不過短板這個已經被halocn給完美的彌補了。
重要的話要說三遍,3x
delphi+halcon,映像分析神級配置,分分鐘秒殺c+opencv,c+python,以及其他各種組合
delphi+halcon,映像分析神級配置,分分鐘秒殺c+opencv,c+python,以及其他各種組合
delphi+halcon,映像分析神級配置,分分鐘秒殺c+opencv,c+python,以及其他各種組合
halcon與delphi