以前我们所说的机器视觉,通常是指2D的视觉系统:即通过摄像头拍到一个平面的照片,然后通过图像分析或比对来识别物体,能看到物体一个平面上特征,可用于缺失/存在(有无)检测、离散对象分析图案对齐、条形码和光学字符识别以及基于边缘检测的各种二维几何分析。
由于2D视觉无法获得物体的空间坐标信息,有较大局限性。3D机器视觉可以粗略地定义为允许3D对象或表面的三维测量或检查的技术。3D机器视觉技术如何解决工业制造业问题?
大家好,我是图漾科技南京研发总监胡瑞端,很高兴在智东西公开课和大家做今天的分享。
今天演讲的主题为《3D机器视觉在工业制造中的应用》,主要分为以下5个部分:
机器视觉在工业制造领域的发展已经很长时间了,以前的工业制造没有视觉的概念,利用各个传感器对流水线上的情况做感知,机器视觉则是通过计算机模拟人的视觉,“视”相当于眼球,“觉”是对看到的东西进行一定的处理,提取一些信息。
在机器识别方面,“视”是硬件部分,包含了光源、相机、图像载机卡、视觉传感器等,“觉”是软件的算法,包括2D视觉算法和3D视觉算法。
机器视觉主要有两大部分应用,一个是工业级的,一个是消费者的。今天主要讲的是工业级的应用,消费级的应用也很多,可以看下上面的表,工业级主要用于智能制造方面,比如以往在流水线上需要工人们用人眼进行物品的定位、分类、查找,现在是由各种2D相机或3D相机,再加上机器的软件算法来模拟人工视觉,硬件的要求相对比较高,比如像素、帧率、精度等。而在消费级应用中,精度要求比较低,往往适用于游戏或人机交互方面,所以对精度要求不是很高。
机器视觉的应用领域相当广,可以分为上、中、下三游。上游主要是硬件,机器视觉的硬件部分包括光源、镜头、工业相机、图像采集卡,中游一般是系统集成商或设备提供商,下游一般是采购上游和中游技术和服务的商家,然后把他们组合成一些应用,他们会利用这些硬件和软件组成各种机器视觉应用的一些功能,比如视觉检测、智能识别、测量、定位引导等。
但现在有一个趋势是2D机器视觉分类越来越细,比如做光源的就是做光源,做镜头的就是做镜头,做工业相机的就是做工业相机,但是到了3D机器视觉,由于这是一个比较新的领域,分工就没有那么细,经常一个厂商把上中下游全部包含了。比如国内的图漾或国际上的康耐视或基恩士,像康耐视和基恩士,他们以前是2D领域的翘楚,在3D视觉也有涉猎,但他们往往提供一个一整套的解决方案。随着3D机器视觉的越来越成熟,分工越来越模糊,反而也会变得越来越清晰。当一个技术越来越成熟时,它的分工就越来越细,而像3D视觉现在处于摸索阶段,它的分工反而是比较模糊的。
机器视觉的发展是非常旺盛的,在2017年到2018年时,整体增长了将近20%,但由于新冠疫情的影响,今年上半年需求是萎缩的,但从到9月份的数据来看,反弹非常明显。
2D机器视觉以往最主要的应用是文字识别或条码识别,用的最多的比如扫码器。
在工业自动化中,也会用2D相机去做一些抓取和分拣工作,可以看到一些支柱型机器人,比如家化产品的分拣,但是这些分拣有一个共同的特点:
原因主要是2D机器视觉的视野比较小,所以不可能拍摄很大的场景,检测的物品要求比较小。
因为扁平的物品比较多的信息在它的纹理上,还有外观形状上,因为2D机器视觉缺少深度信息,所以需要这个物品是扁平的,如果是有高度的物品或比较复杂的物品,2D机器视觉的优势就不在了。
2D机器视觉一大优点是处理速度很快,可以达到几毫秒或十几毫秒,它的精度相对比较高,因为这方面的软件算法非常成熟,成本相对3D机器要低。但是2D机器视觉的缺点也很明显,首先它的鲁棒性差,受环境光的影响比较大,往往需要配上专业的光源进行补光,还有与3D机器视觉相比,它没有深度信息,虽然2D机器视觉有些应用可以利用双目或单目加上参照物来获得深度信息的。但是它获得的深度信息并不直接,需要软件后期的处理,所以对开发人员是相当不友好的。如果遇到一些物品的遮挡,或易变形的物品,比如包装袋,效果也是很不理想的。
但最近把AI神经网络训练加进来以后,2D机器视觉对这部分柔性形变的处理能力也大大加强,所以2D机器视觉虽然相对于3D机器视觉有些许不足,但是也在稳步向前发展。
2D信息和3D信息在表达形式上主要的区别是二维信息在一张图上的像素点,只有 R、G、B三个值,深度图会多一个深度的信息,但是这个多出来的深度信息不仅仅是多出了一维,比如从三维到了四维,多出来的信息意味着在后期的软件处理可以做相当多的处理。比如可以算出相对应的点的 x、y、z坐标,还可以同时计算出点云中的某一个点的法向量的位置,法向量可能又多出三维。通过坐标的三维与法向量的三维,又可以计算出某一个点相邻位置的这些点,并把它采集起来,还可以计算出某个点的特征值,这些值的向量维度更多,也就是3D视觉不单单是加了一维的深度信息,可以把一维深度信息和RGB信息相结合,扩展出三维、六维甚至更多维的信息。这样对于未来软件的算法可以提供更更丰富的材料,可以做更高难度的物品识别和神经网络训练。
顾名思义 RGB是色彩信息, xyz就是位置信息,通过这三个结合在一起,可以很接近的模拟人眼的能力。
因为原来的2D视觉只能告诉我们一些色彩信息或者轮廓信息,但是没有深度信息,等于缺少了一只眼睛,人是通过两只眼睛才能获得一个深度的感觉。
接下来是3D结构光的原理:小孔成像。当外面有一个实物的像时,在相机的传感器上也会成一个像。作为双目相机,同一个点在相机的两个传感器上,都会有投影。如上图所示,比如 P点和Q点在左相机上看起来是同一个点,而在右相机上看起来是两个点,所以通过双目就可以把P和Q分开。如果只有单目,这两个点是无法分开的。
双目怎么样获得深度信息,最重要的一点是寻找相关性,如上图所示,如果想知道红色点的深度,或者它的xyz绝对值在哪里?我们需要确定在左边张图中素点的位置,可以用一个(x,y)坐标确定,但同样在右边图上的对应的点,它这个坐标是多少呢?需要通过算法来寻找出这两张图中所认为是同一个点的相关性,在人眼的原理中,左眼看到一个东西,右眼也看到同样一个东西,当我们知道这两个东西在左眼中是什么位置,在右眼中是什么位置,知道这个信息以后,就能通过大脑算出来这个东西的离我们的距离有多远,大概在什么位置。
以往相关性是软件后期处理来做的,那在90年代,有一个很著名的算法叫zip算法,它的主要原理是通过两张图中所有的像素点,计算来寻找出相似的点。但是这个算法对图像有一定要求,也就是只有图像的纹理、图案比较特殊或比较复杂,算法的计算比较效果会比较好。但是如果图像中出现很多同样的区域,或缺少纹理的信息,这个算法也无能为力。
现在的3D结构光已经不再通过图像的纹理来寻找相关性,可以看到前面提到了编码激光单元,会把一个结构光投射到物品上,然后相机只拍摄结构光,而这个结构光里头是进行了一些编码,我们就可以通过结构光在两个左右相机中的编码,确定出某一个像素的相关性是什么样?比如左边相机和右边相机所拍摄到区域的编码是一致的,我们可以认为这两个点代表的是同一个位置,通过这个方法,用硬件的方式来获取相关性,这样会更快更准。
现在3D双目结构光的流程如上图所示,先通过offline的calibration,可以相机双目的内外参标定好,那如何获得深度信息呢?首先会进行校正,校正以后,可以看到前面这张图中这些相关点是斜的,而在这张图里相关点是水平的。校正的过程其实就是把右边这张图校正的跟左边这张图是一致的,也就是他们都校正成水平的模式。先做校正,之后再做相关性的寻找,一旦确定相关性后,就可以做三角的计算,做完三角计算以后,它的深度图自然就出来了。
3D相机也有一定的局限性,如上图所示,b是左右两个相机双目之间的距离,间距越大,能获得的像素精度越高,视野也会越大。f是相机的焦距,f一般是不变的。这张图有一个最近的距离,叫dmax,还有一个最远的距离叫dmin,这个主要跟激光发射器编码密度相关,如果越近,密度越密集,我们就很难从左右两张图中找出某一个点的区别,比较难算出深度信息。
首先看下3D机器视觉在硬件上的分类,上图是激光线扫相机,它的原理是通过一道激光和相机之间位置进行标定过后,进行平行的移动。它可以通过一个三角的算法,把激光扫描过的区域还原成3D的信息。它的优点是精度非常高,可以达到亚毫米级。但是它的缺点也比较多,首先量程非常小,比如要扫描一个一米宽的范围,必须让激光扫过这一米范围,由于必须扫过这样的范围,导致扫描的速度比较慢,扫描速度慢又会导致实时性差,那在工业生产中会大大影响工业生产的节拍。
上图是3D相机的类比,首先是线扫激光,线扫激光精度很高,但是它的缺点是成本也很高。结构光中有动态和静态的区别,静态结构光是结构光Pattern固定,即激光编码是固定的,可以一次拍摄完成三维测量,而且可以拍摄运动型的物体。动态结构光需要相机使用投影仪来不断变换激光编码 Pattern,通过多次拍摄得到三维信息,在拍摄过程中是要求相机保持静止,所以它比较适合于用高精度的需求,并且拍摄静止的物体,它的缺点是成本比静态结构光高。
3D机器视觉应用最广泛的是视觉引导,主要的应用方式是把3D相机安装在机器人手臂上,对场景进行拍摄,拍摄完后获得3D的场景信息后,可以指导机器人去做一些喷涂、抓取或定位。在汽车制造业、物流行业、食品生产行业中有广泛的应用。
上面主要介绍的是3D硬件方面,接下来讲下3D的软件方面,现在的3D软件其实还很不成熟,国内外星空体育智能科技的差距并不大,并且业界缺少一个可复制的软件解决方案。我们都知道在2D工业视觉领域有很多企业,比如康耐视、基恩士,他们提供了很多集成且模块化的经典算法,并且软件工具相对成熟。国内的开发商只要依托于他们的工具软件,就可以快速开发2D机器视觉的应用。但是在3D机器视觉方面,这方面的软件比较少,或者几乎没有。即使是国外的大厂,目前提供的3D机器视觉的开发方案也没有一个系统性的,这也是国内厂商的一些机遇。
下面是一些典型的案例,首先是机器人引导的案例,可以看到机器人带着3D机器视觉的相机,把整个车内的场景扫描出来,然后引导机器人做一些清洁的工作。上图是扫描机器人,可以看到它把座椅的整个形态给扫描出来,然后可以对座椅进行清洁或其他方面处理。
接下来是Binpick案例,可以看到通过3D机器视觉,把里面的器件都各个定位出来,并不是每次都能识别出来,但是最终只要让它不停的识别出来就可以。
上面是第二个Binpick案例,可以看到它是2D和3D的结合,2D先粗浅的定位,然后3D再精细的定位。右边是有一个简易的人机交互界面,可以先是2D粗浅的识别,然后是3D精准定位,以上是机器人的实时的模拟,这样可以让整个3D的项目开发变得更加的简单和快捷。
而对于3D无序抓取,一旦零件发生变化,我们可能需要重新开发一套软件,一个好的3D工具软件,可以很快速的把这个零件重新建模和训练,大大缩短了无序抓取项目开发的难度和实施周期。
首先我觉得3D机视觉未来会取代2D机器视觉,但是也不是完全取代,因为2D机器视觉不会消失,3D机器视觉需要与2D机器视觉相结合,并且在我入行这十几年来,3D机器视觉的传感器类型非常少,成本非常高,并且解析力和帧率非常低,所获得的数据非常差,由于当时计算机的算力也是很差,要算一个3D的算法,计算量是非常高的,耗时也很高,所以当时在工业级的应用几乎是没有的,因为它没有可实施性。但是经过这么多年的发展,我们的计算平台甚至是工业级的电脑,计算力是成倍的增长。还有3D相机算法不断的精进,硬件的迭代的进化,3D硬件成本在飞速下降中,反而造成了软件的瓶颈,也就是在3D机器视觉整个项目的实施瓶颈其实不在硬件,而在软件。
我觉得未来的3D机器视觉软件发展轨迹与2D机器视觉是比较像的。一开始不成熟时,可能是上下游厂商跟系统经营商一起把3D软件给做出来。但未来分工会比较明确,好的3D工具软件会越来越多,并且好的三级软件需要模块化和灵活的开发,成为敏捷开发,也需要对更多的数据类型进行抽象化,也就是可以处理更多的数据类型,而不仅仅是像2D视觉里头只是处理一个图像,因为3D机器视觉里所要处理的对象是非常多的,随着3D机器视觉软件越来越成熟,越来越统一,越来越标准化,3D机器视觉在工业领域的前景是可期的。
1、本站目前拥有近 1000+ 精品收费资源,现在加入VIP会员即可全部下载。
2、本资源部分来源其他付费资源平台或互联网收集,如有侵权请联系及时处理。
中国工程院院士孙凝晖给正国级、副国级讲课的万字长稿《人工智能与智能计算的发展》