击上方“机器视觉”,选择“置顶/星标公众号”
机器视觉产业链主要由上游原材料零部件、中游装备制造以及下游终端应用行业构成。从深度来看,机器视觉的应用覆盖产业链的多个环节。以手机的制造为例,机器视觉可应用在结构件生产、模组生产、成品组装、锡膏和胶体的全制造环节,例如IPhone生产全过程就需要70套以上的机器视觉系统。从广度上看,机器视觉的下游行业众多,包括汽车、3C电子、半导体、食品饮料、光伏、物流、医药、印刷、玻璃、金属、木材等。
一套完整的视觉检测系统主要包含图像采集部分和图像分析部分,而图像采集部分主要由工业相机、工业镜头以及机器视觉光源承担。机器视觉的功能包括:物体定位、特征检测、缺陷判断、目标识别、计数和运动跟踪。正是由于机器视觉系统可以快速获取大量信息,而且易于自动处理,也易于同设计信息以及加工控制信息集成,因此,在现代自动化生产过程中,人们将机器视觉系统广泛地用于工况监测、成品检验和质量控制等领域。
机器视觉作为智能制造的大脑和眼睛,是工业互联网边缘层的重要数据入口:工业互联的趋势要求生产控制系统集成到上层的制造管理系统,并最终接入企业管理系统,实现信息从生产现场到管理层的贯通,行业内的企业、行业协会、产业联盟在机器视觉互联互通方面,正在不断合作和投入,制定数据接口、通讯协议等基础共性标准。
以前一直在实验室,接触的是图像的算法部分,至于是机器视觉还是计算机视觉傻傻分不清楚,也没有细分的必要,后来实习进入工业界,发现还是有必要把机器视觉单独拿出来,给他一个名分,同时整理一下自己对机器视觉的认识。
机器视觉,机器排在前面,当然离不开机器,机器越来越智能,代替人的工作,我们称之为机器人,经过多年的发展,工业机器人进化到第三代,第一代示教再现机器人,就是固定点位运动,第二代加入了对工作环境的仿真再规划路径,第三代智能机器人则加入了各种传感器,使之灵活调整工作状态,加入了工业相机则引入了机器视觉这一概念,"机器视觉",即采用机器代替人眼来做测量和判断。
机器视觉系统是指获取图像,然后将该图像传送至处理单元,通过数字化处理,根据像素分布和亮度、颜色等信息,来进行尺寸、形状、颜色等的判别。进而根据判别的结果来控制现场的设备动作。现在工业上主要用来装配定位,产品识别,尺寸测量,质量检测等方面。
机器视觉特点:
1、机器视觉是一项综合技术,其中包括数字图像处理技术,机械工程技术,控制技术,电光源 照明技术,光学成像技术,传感器技术,模拟与数字视频技术,计算机硬件技术,人机接口技术 等这些技术在机器视觉中式并列关系,相互协调 应用才能构成一个成功的工业机器视觉应用系统。
2、机器视觉更强调实用性,要求能够适应工业生产中恶劣的环境,要有合理的性价比,要有通用的工业接口,能够由普通工作来操作,有较高的容错能力和安全性,不会破坏工业产品,必须有较强的通用性和可移植性。
3、对机器视觉工程师来说,不仅要具有研究数学理论和编制计算机软件的能力,更需要的是光、机、电一体化的综合能力。
4、机器视觉更强调实时性,要求高速度和高精度,因而计算机视觉和数字图像处理中的许多技术目前还难以应用于机器视觉,他们的发展速度远远超过其在工业生产中的实际应用速度。
因为自己半路出家当了程序员,专业方向又是图像处理,通过视觉软件进入机器视觉行业,所以首先查阅资料了解行业成熟软件及库函数。
机器视觉当前的比较流行的开发模式是“软件开发平台+工具包”。在实际视觉项目中,软件平台的目的就是为客户做出一个应用程序,让客户一目了然地看到其产品的各项数据,例如:产量、日期、报表、NG/OK量、故障信息、调试信息、设置参数、操作工具、整个视觉控制系统等。当前机器视觉领域主要用的开发平台有:
1).VC++——目前主流选择平台
最通用,功能最强大。用户多,和windows搭配,运行性能较好,可以自己写算法,也可以用工具包,而且基本上工具包都支持C++的开发。
2).C#——逐渐发展使用
微软开发的,也是VS studio带的,现在已经支持跨平台。比较容易上手,特别是完成界面等功能比用VC+MFC难度低了很多,已经逐渐成为流行的使用平台了,算法在调用标准的库或者使用C#+C++混合编程。可以看到目前很多相机厂商的SDK都已经开始使用C#做应用程序了。
3).LabVIEW——NI的工具图形化开发平台
开发软件快,特别是做工控行业或者自动化测试行业的很多工程师,由于使用labview进行测试测量的广泛性,所以都有labview的基础,再调用NI的Vision图像工具包开发,开发周期短,维护较为容易。适用人群有一定的限制性。
4).VB、delphi、java及其他
在机器视觉领域内,基本绝迹江湖,鲜有人使用。
软件开发平台生成的应用程序通过控制整个视觉系统来获取检测对象的图像信息,并对该图像信息进行信息提取处理,这就需要相应功能的函数和算子,那么就需要包含大量功能函数的API工具包。当前机器视觉领域主要用的工具包有:目前相关工具包软件和库函数绝大部分来自于国外,主要是德国,日本,美国。涉及到的软件有Halcon, visionPro(CVL), Evision, labview+vision,MIL(Matrox Imaging Library), HexSight, OpenCV, 其中OpenCV开源免费。
1,Halcon
HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包。底层的封装功能算法很多,运算性能快,使用方便简单,若有一定软件功底和图像处理理论,使用其开发将会非常快速便捷。它的特点是:
a,运行速度快。SSE2加速之后效果明显,能满足大部分设计要求,我用HDevelop XL处理12K分辨率,60M的图片,虽然只是一些基本的形态学操作,耗时200左右毫秒还是可以接受的,只是好多算子内存分配不足不能用怎么破。装了Halcon之后线运行一下Optimize Parallelization(SSE2)还是有效果的。
b,HALCON包含了一套交互式的程序设计界面HDevelopa,可在其中以HALCON程序代码直接撰写,修 改,执行程序,并且可以查看计算过程中的所有变量,设计完成后,可以直接输出C、C++、VB、C#、vb等程序代码。
c,提供大量例程。从应用范围,工业领域,具体方法,算子等方面给出具体例程,当你没有思路或者不清楚某个算子的具体用法时看看例程还是很有用的,有时候对例程加以修改就可以直接派上用场了。文档也值得一看,目前只有英文。
d,第三方学习资料不太多。想要解决某个问题,如果没有例程,好像不知道怎么下手,希望找到一些从宏观上提供解决思路的资料。
2,visionPro
康耐视家的,和Halcon不相上下,提供图形编程界面,有网友说其定位测量功能更好,开发方便自然。估计要采用他自家的图像采集卡。
3,NI Vision
NI的特点是自动化测试大多数需要的软硬件都有解决方案,有点事软件图形化编程,上手快,开发周期快,缺点是并不是每个软件都非常厉害。视觉工具包的优势是售价比大多数工具包或者算法的天文数字便宜了不少,而且整个工具包一个价格,而不是一个算法一个算法地卖,性能方面在速度和精度没有前两种软件好。
4, labview+vision
图形编程界面,其他再补充。
5,MIL(Matrox Imaging Library)
来自加拿大maxtrox,是Matrox Imaging Library 的简写。早期推广和普及程度不错,当前似乎主要用户还是早期的做激光设备的一些用户在用,所以用于定位的较多。MIL软件包是一种硬件独立、有标准组件的32位图象库。它有一整套指令,针对图象的处理和特殊操作,包括:斑痕分析、图象校准、口径测定、二维数据读写、测量、图案识别及光学符号识别操作。它也支持基本图形设备。MIL能够处理二值,灰度或彩色图象。
6,HexSight
Adept公司出品的HexSight是一款高性能的、综合性的视觉软件开发包,它提供了稳定、可靠及准确定位和检测零件的机器视觉底层函数。其功能强大的定位器工具能精确地识别和定位物体,不论其是否旋转或大小比例发生变化。
见长与定位吧。
7,OpenCV
免费开源,科研利器,资料很多。感觉openCV更多的还是用在计算机视觉领域,在机器视觉领域其实不算太多,应为机器视觉领域当前主要的应用还是定位、测量、外观、OCR/OCV,感觉这几项都不是opencv的专长。自动化公司可以基于OpenCV积累建立自己的库,应该可以省下不少钱吧。
8,CK Vision
创科公司的软件包,相对前面几个工具包来说价格优势比较明显,另外机器视觉需要的功能也基本都有,所以在国内自动化设备特别是批量设备同时需要保护版权的企业而言,用量很大,推广也不错。
9,迈斯肯
迈斯肯的视觉主要产品还是条码阅读一类,图像工具包没有用过,不了解,不评价。
10,eVision
机器视觉软件包是由比利时euresys公司推出的一套机器视觉软件开发SDK,资料较少
机器视觉系统组成
从视觉软件进入机器视觉行业,有必要全局认识一下机器视觉系统组成。
图 1
典型的机器视觉系统可以分为:图像采集部分、图像处理部分和运动控制部分。基于PC的视觉系统具体由如图1所示的几部分组成:
①工业相机与工业镜头——这部分属于成像器件,通常的视觉系统都是由一套或者多套这样的成像系统组成,如果有多路相机,可能由图像卡切换来获取图像数据,也可能由同步控制同时获取多相机通道的数据。根据应用的需要相机可能是输出标准的单色视频(RS-170/CCIR)、复合信号(Y/C)、RGB信号,也可能是非标准的逐行扫描信号、线扫描信号、高分辨率信号等。
②光源——作为辅助成像器件,对成像质量的好坏往往能起到至关重要的作用,各种形状的LED灯、高频荧光灯、光纤卤素灯等都容易得到。
③传感器——通常以光纤开关、接近开关等的形式出现,用以判断被测对象的位置和状态,告知图像传感器进行正确的采集。
④图像采集卡——通常以插入卡的形式安装在PC中,图像采集卡的主要工作是把相机输出的图像输送给电脑主机。它将来自相机的模拟或数字信号转换成一定格式的图像数据流,同时它可以控制相机的一些参数,比如触发信号,曝光/积分时间,快门速度等。图像采集卡通常有不同的硬件结构以针对不同类型的相机,同时也有不同的总线形式,比如PCI、PCI64、Compact PCI,PC104,ISA等。
⑤PC平台——电脑是一个PC式视觉系统的核心,在这里完成图像数据的处理和绝大部分的控制逻辑,对于检测类型的应用,通常都需要较高频率的CPU,这样可以减少处理的时间。同时,为了减少工业现场电磁、振动、灰尘、温度等的干扰,必须选择工业级的电脑。
⑥视觉处理软件——机器视觉软件用来完成输入的图像数据的处理,然后通过一定的运算得出结果,这个输出的结果可能是PASS/FAIL信号、坐标位置、字符串等。常见的机器视觉软件以C/C++图像库,ActiveX控件,图形式编程环境等形式出现,可以是专用功能的(比如仅仅用于LCD检测,BGA检测,模版对准等),也可以是通用目的的(包括定位、测量、条码/字符识别、斑点检测等)。
⑦控制单元(包含I/O、运动控制、电平转化单元等)——一旦视觉软件完成图像分析(除非仅用于监控),紧接着需要和外部单元进行通信以完成对生产过程的控制。简单的控制可以直接利用部分图像采集卡自带的I/O,相对复杂的逻辑/运动控制则必须依靠附加可编程逻辑控制单元/运动控制卡来实现必要的动作。
一个完整的机器视觉系统的主要工作过程如下:
1、工件定位检测器探测到物体已经运动至接近摄像系统的视野中心,向图像采集部分发送触发脉冲。
2、图像采集部分按照事先设定的程序和延时,分别向摄像机和照明系统发出启动脉冲。
3、摄像机停止目前的扫描,重新开始新的一帧扫描,或者摄像机在启动脉冲来到之前处于等待状态,启动脉冲到来后启动一帧扫描。
4、摄像机开始新的一帧扫描之前打开曝光机构,曝光时间可以事先设定。
5、另一个启动脉冲打开灯光照明,灯光的开启时间应该与摄像机的曝光时间匹配。
6、摄像机曝光后,正式开始一帧图像的扫描和输出。
7、图像采集部分接收模拟视频信号通过A/D将其数字化,或者是直接接收摄像机数字化后的数字视频数据。
8、图像采集部分将数字图像存放在处理器或计算机的内存中。
9、处理器对图像进行处理、分析、识别,获得测量结果或逻辑控制值。
10、处理结果控制流水线的动作、进行定位、纠正运动的误差等。
在与大家交流的过程中,发现了一个问题,一直想说出来。可是通常实话都不会那么顺耳,所以总有些犹豫。可后再一想,既然大家来此的目的不过是为了讨论问题、互通有无,那么说了也应无妨。这个问题就是:我发现国内80%搞这行(机器视觉)的朋友所走的路子是错的。
这个感觉是从大家所问的问题得出来的。因为看到不少朋友所问的问题,是相当可笑的。说可笑并非指所提问题过于简单幼稚,而是所问的问题一看就是从书本上抄来的,而不是在实际情况下所遇到的。换句话说,大多只是在纸上谈兵,极少有人真正自已动手开发视觉系统。这样说是因为自己搞开发的人绝对问不出某些奇怪问题来的。往深了说一点,好象国内的朋友们只喜欢啃书本,并不愿意(也可能是懒得)动手。
到底如何学习机器视觉?
为了说明这个问题,我觉得应该先要简单地说明另一个问题:国内外机器视觉发展的不同。我本人认为,只有先搞清了两边的不一样,才便于说清如何下手学习。 国外机器视觉发展到今天,已经从“一包到底”式的工作程序,发展到了细致分工的阶段了。由于篇幅问题。就不细讲这一行当如何从“一包到底”发展到细致分工过程。