zw版·Halcon与delphi(兼谈opencv)

QQ群 247994767(delphi与halcon)

《Halcon与delphi》系列,早两年就想写,不过一方面,因为Halcon是售价高达数万欧元(不是人民币)的专业软件,知道的人不多,
      另外一方面,个人琐事太多,一直没时间动笔,这次借国庆空闲,匆匆忙忙,开个头先。
      标题本来准备用:《Halcon、opencv与delphi、python、vb、c++》
      太杂,虽然现在流行长标题,还是简化了。

做图像分析有十多年,写过原生的OCR字符识别,当时没有opencv,全部是原生代码,写的很痛苦,和写汇编差不多
      不过也学习到不少东西,blur、细化、骨架、闭合、。。。。。。,从这点看,学习下opencv,对于基础也是必要的
      效果还可以,基本上除开QQ过于变态,一般的论坛、csdn、工行、移动、博客园、老版新浪微博的验证码,都能简单愉快的暴力识别。
      这几年,主要做图像分析、字体结构的图像分析、AI大数据方面的项目。

实业方面,主要是PCB抄板设计,这个是protel电路图逆向工程,必需的。

图像分析用过:agg、opencv、matlab、cgal、labview、vision、Halcon、sci、pil,以及一大波gis内置的高素质几何计算库
      编程语言早期是:c、c++、,这几年是:python、delphi,
      目前,图像分析基本上就只是:delphi+Halcon,(机器学习与大数据,是python+sci.xxx+pandas)
      delphi+Halcon,这个组合,可以说是图像分析的神级配置,无论是开发效率,还是运行速度,实在是太高了,分分钟秒杀c+opencv,python+cv,c+matlab,以及其他各种组合,

特别是开发效率,几乎只有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直接秒杀:

从上面几张图中,可以清楚看到,Halcon可以轻松地根据预设模型,将不同层面的准3D模式,堆砌的零件,准确切割,并且,对遮挡的图像,进行准确、完整的轮廓补全,这个功能,以及其他类似的功能模块,非常强大、实用,即使是2015.6月,最新发布的cv3.0,也是无法直接处理的。

opencv真的便宜吗

ps,10,6日补充

opencv唯一的优势,也许就是free+open 免费开源

不过,opencv真的便宜吗?

Halcon很贵,数万欧元的价格。

对于生产流水线而言,哪怕只有1%的生产率提升,这个投入就超值了,更何况,自动化生产线,投资都是以百万、千万计算,相对其他部件而言,Halcon算是廉价的了。

CCTV监控系统,车牌、人脸识别,通常都是采用c/s模式,各个摄像头,只是图像采集节点,所有数据传送到中心服务器,特别是目前互联网+app模式,几个小区的硬件投入,就超过Halcon,而且Halcon对于识别准确率、识别效率以及后期维护的支持,都远超opencv。

有开发商认为,Halcon会增加成本,影响投标的竞争力,个人认为,这个问题的答案:并非绝对。

对于50万以下的项目,Halcon的确不太适合,对于50W以上,特别是百万以上的项目,Halcon绝对是首选。(机器视觉方面的项目,极少有低于百万的)

成本方面,如果采用类似C/S、B/S的网络结构,各个节点只负责采集图像,传送到中心服务器主机,以Halcon的处理能力,通常只需一套主机license授权书,(实时项目除外)

如果是大型、超大型项目,增加几套runtime的license授权书,成本增加也不多。

关键是服务商,给用户提供的是业界最专业、最顶尖的服务,而且是正版服务。

对于政府、上市公司而言,招标项目,必须采购正版软件,这个做过地铁、高铁项目CAD设计、网络建设的公司应该都知道。

对于服务商而言,采用Halcon的另外一个成本优势、竞争优势,在于大幅度缩短了开发周期,降低了维护成本,Halcon的开发周期,通常只有opencv的1/3-1/5。

举个简单的例子,ocr、车牌识别、人脸识别,是目前图像分析的热点,

这些项目,Halcon的核心代码通常才20-30行,而opencv,不管是vc+cv、还是python+cv,至少要上千行。

【参见】

《只有2行代码的超市收款单ocr脚本》http://www.cnblogs.com/ziwang/p/4856854.html

《简单的令人发指,只有10行代码的车牌识别脚本》http://www.cnblogs.com/ziwang/p/4856322.html

目前,图像程序员的平均年薪都在20w,1-2个程序员节省的工资,就把Halcon的成本对冲了。

对于企业而言,opencv虽然是free+open

关键的一击在于:opencv在功能方面,远远落后于Halcon。

opencv通常只能完成Halcon 1/10的功能,即使配合多种第三方软件开发库,最乐观的估计,也不到1/3

就象如今手机、pc、触控一体化的win10时代,你还在使用dos,完全没有竞争力。

这样看来,opencv,真的便宜吗?

航母很贵,核弹更贵,

Halcon的确很贵,作为图像开发项目的刀尖,如果能够真正解决问题,相对回报而言,这个价格,真心不算贵。

opencv与Halcon的差距到底有多大

以笔者亲身的体会而言:

    • 前面提到,笔者曾经开发过原生的ocr软件,这个相当于八路军延安时期,小米加步枪的水平
    • 后来,了解到opencv,发现blur,filter这些,都有现成的模块,而且优化不错,这个,相当于抗美援朝,标配AK47,歼8,或者喀秋莎时代
    • 再后,采用Halcon,完全是海湾战争,全信息化目标、数字化网络,再看opencv,也就伊拉克国民卫队水平

ps,需要说明的是,笔者并非故意抨击opencv,实际上,在opencv3.0的测试阶段,国内最早一批,也许是第一套,python3.0-cv3.0的测试脚本,就是笔者用2to3人工转换,并一一进行测试的。cv开源,对于图像教学而言,的确是难得资源,但对于专业的图像应用,特别是商业领域,实在是有些力不从心。

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)的行业第二大原生编程语言。(java,vb严格说来,不是原生编程语言)
     (ps,xe9、xe10,delphi强化了并行开发,不过远不如python的map优雅方便,如果delphi能够整合cuda开发,进入gpu、hpc领域,才是真正凤凰涅槃)

至于内存泄露,是crack的问题,就是c++调用Hlacon的com控件,也有内存泄露,而vb,因为使用Halcon的.net封装模块,凭借net平台内置的gc管理,回避了这个问题,其实delphi也可以采用.net模块,现在32G内存才几百元钱,64位系统,20m的内存,即使run一天,也没事情。

delphi、c++、vb、python与图像处理

vb即使对于初学者,以及产品开发原型阶段,也是很差的编程工具,更何况复杂的图像开发,机器视觉领域。

初学者,以及简单的产品原型开发,笔者推荐python+opencv,cv3.0已经支持python3了。
      可惜,delphi的cv库还是v2.49版本的,不然,delphi+cv3也是个不错的选择,特别是调试、效率方面

c++,无论如何,不是图像分析理想的工具,
     对于图像分析,c语言类的底线,差不多只有c了,即使是opencv,90%也是c,
    (ps,fontforge的开发者,是如此痛恨c++,以至于在faq里,对c++都忍不住,大段大段吐槽)

图像分析起点就是2D,二维的,复杂一些,连续图像序列,3D,动态图像分析,都是多维的数据模型。
     而c语言,先天缺乏内置数组,采用*指针结构,作为数组。
     *指针数组,对于简单的一维数据分析,勉强可以,但对于2维、3维以及更高的多维数据,非常痛苦。

没感觉,看看,*img1,**img2,***img3,&img1,&&img2,&&&img,这些绝对是非人类的设计。

大家知道,图像处理非常吃内存,而c的内存管理,完全是*指针模式,复杂无比。
     对于一线程序员而言,采用c++进行图像处理,在c++编程语言方面的时间成本,甚至要高于图像分析算法本身。

此外,对于学习者而言,c作为图像处理,最大的问题是入门易,精通难,很多都卡只blur,去噪,以及现有图像库的调用阶段,就无法深入下去,

主要是无法进行深入的图像算法内部分析,即使借助Halcon、opencv这些库,也很难完成。
     至于c++,唯一的优点,可能就是速度。
     而c的速度优势,是相对于vb、python的,可能有10-20倍的运行速度优势,不过对于delphi,就是在最严格的对比当中,也是基本差不多。
     不过delphi十倍于c的开发效率,使程序员,能够在软件开发的原型、中期、调试、交付、维护等各个阶段,采用更多的模型算法,进行优化,

通常,用c++,一周时间才能完成的软件开发任务,delphi一天就可以完成,真真正正的10x、十倍速效率。

实战当中,delphi+Halcon的组合,要远远优于c+Halcon,c+opencv
     以往,图像处理,delphi唯一的短板,是缺乏工业级的图像库,cv、cgal对于delphi的支持一直不够好
     不过短板这个已经被halocn给完美的弥补了。

重要的话要说三遍,3x

delphi+Halcon,图像分析神级配置,分分钟秒杀c+opencv,python+cv,c+matlab,以及其他各种组合

      delphi+Halcon,图像分析神级配置,分分钟秒杀c+opencv,python+cv,c+matlab,以及其他各种组合

delphi+Halcon,图像分析神级配置,分分钟秒杀c+opencv,python+cv,c+matlab,以及其他各种组合

zw版·Halcon与delphi(兼谈opencv)的更多相关文章

  1. 《zw版Halcon与delphi系列原创教程》发布说明

    <zw版Halcon与delphi系列原创教程>发布说明 zw转载的<台湾nvp系列halcon-delphi教程>,虽然很多,不过基本上都是从cnc.数控角度的demo..  ...

  2. 【《zw版·Halcon与delphi系列原创教程》 zw_halcon人脸识别

    [<zw版·Halcon与delphi系列原创教程>zw_halcon人脸识别 经常有用户问,halcon人脸识别方面的问题. 可能是cv在人脸识别.车牌识别方面的投入太多了. 其实,人脸 ...

  3. 【《zw版·Halcon与delphi系列原创教程》Halcon图层与常用绘图函数

    [<zw版·Halcon与delphi系列原创教程>Halcon图层与常用绘图函数 Halcon的绘图函数,与传统编程vb.c.delphi语言完全不同,     传统编程语言,甚至cad ...

  4. zw版_zw中文增强版Halcon官方Delphi例程

    [<zw版·delphi与halcon系列原创教程>zw版_zw中文增强版Halcon官方Delphi例程 源码下载:http://files.cnblogs.com/files/ziwa ...

  5. 《zw版·Halcon入门教程与内置demo》

    <zw版·Halcon入门教程与内置demo> halcon系统的中文教程很不好找,而且大部分是v10以前的版本. 例如,QQ群: 247994767(Delphi与halcon), 共享 ...

  6. 《zw版·Halcon-delphi系列原创教程》 zw版-Halcon常用函数Top100中文速查手册

    <zw版·Halcon-delphi系列原创教程> zw版-Halcon常用函数Top100中文速查手册 Halcon函数库非常庞大,v11版有1900多个算子(函数). 这个Top版,对 ...

  7. zw版_Halcon图像库delphi接口文件

    zw版_Halcon图像库delphi接口文件 Halcon图像库delphi接口文件,根据安装时用户设置的文件目录不同,会有所差异,笔者一般安装在delphi的import目录下.     参见:& ...

  8. 《zw版·Halcon-delphi系列原创教程》cgal与opencv,Halcon

    <zw版·Halcon-delphi系列原创教程>cgal与opencv,Halcon opencv作为少有的专业开源图像软件,虽然功能,特别是几何计算方面,不如Halcon,不过因为开源 ...

  9. 《zw版·delphi与Halcon系列原创教程》THOperatorSetX版hello,zw

    <zw版·delphi与Halcon系列原创教程>THOperatorSetX版hello,zw 下面介绍v3版的hello,zw. Halcon两大核心控件,THImagex.THOpe ...

随机推荐

  1. 爬虫, 获取登录者的外网IP

    笔者学习了一下用爬虫, 获取登录者的外网IP. 首先导入Jsoup的jar包 public class RetrivePage { private static String url="ht ...

  2. <九>JDBC_获取插入记录的主键值

  3. 客户端JavaScript-如何执行

    客户端JavaScript程序有四部分:内联脚本.HTML事件处理程序.URL中的JavaScript.外联脚本:所有这些单独的代码共用同一个全局Window对象,它们可以看到相同的Document对 ...

  4. 怎么使用CKEDITOR

    出于工作需求,自己在网上找了个文本编辑器控件, 网址是http://ckeditor.com/ 怎么使用? 先插入脚本<script type="text/javascript&quo ...

  5. 查找Maven JAR坐标

    http://mvnrepository.com/ http://search.maven.org/

  6. 分析器错误消息: 未能加载类型“Automation.Web.MvcApplication”。

    常见原因1 : 可能是自己手动修改了项目 ==>属性==>生成的输出路径 ,导致版本不兼容 常见员因2  :  Global的 命名空间 与 项目的命名空间 不一致 常见原因3  : 查看 ...

  7. BT客户端实现 Peer协议设计

    与peer建立tcp连接后,首先发送handshake消息进行握手 handshake消息格式如下: 一个字节0x19 + 一个字符串'BitTorrent protocol' + 8 byte 保留 ...

  8. C# WebService输出JSON 实现二

    一般js请求web服务uk可以通过 contentType: "application/json"  获取json效果,为了取得更好的效果,可以在服务端强制返回JSON格式 服务端 ...

  9. hadoop(2014/0619)

    map-reduce :分解任务和合并任务的能力 hdfs: namenode and datanode namenode放置元数据 datanoe放置数据

  10. CSS之元素选择器

    1.后代元素选择器 div p 以空格分隔,表示div的所有后代p元素 2.子元素选择器 div > p 以大于号分隔,表示div的直接子元素 3.相邻兄弟选择器 div  + p 选择紧接在d ...