halcon与delphi
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,以及其他各种组合