做机器视觉哪个软件好?
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
机器人视觉有接触,但是不多,这里我推荐一下一个详细介绍的视觉软件。
在构建机器视觉系统时,开发人员可以选择众多知名公司的商用软件包。然而,在选择这类软件时,重要的是理解这些软件提供的功能、支持的硬件以及如何轻松地配置这样的软件,以解决特定的机器视觉任务。
在过去,软件的选择受到限制,许多公司只提供执行相对简单的图像处理操作的可调用库。这些包括诸如图像减法之类的点处理操作,诸如图像滤波的邻域操作,以及诸如傅立叶分析的全局操作。
尽管有用,开发人员面临的任务是理解这些功能,以及如何为机器视觉任务(如零件测量)提供解决方案。通常,需要构建软件框架来支持这些库,这使得开发这样的程序费力和耗时。
虽然这些库仍然可以从许多开放资源获取,但是视觉软件制造商已经意识到:系统集成商需要更快速地开发应用程序,来解决特定的机器视觉问题,而无需了解图像处理代码的复杂性。因此,目前许多供应商在其软件包中提供更高级别的工具,可以在交互式环境中提供更高级别的功能,如图像测量、特征提取、颜色分析、2D条形码识别和图像压缩等。
这些高级工具的例子包括加拿大Matrox Imaging公司的Matrox Imaging Library(MIL)、比利时Euresys公司的Open eVision、德国MVTec Software公司的HALCON、美国Cognex公司的VisionPro、美国国家仪器(NI)公司的Vision Builder、德国Stemmer Imaging公司的Common Vision Blox(CVB)和德国NeuroCheck公司的NeuroCheck。这类工具允许很多常用的机器视觉功能被配置而不需要大量的编程。通过这种方式,开发人员能够从低级代码开发任务中脱身出来,进而能更轻松地构建机器视觉应用程序。
为了进一步简化此任务,许多软件包具有图形界面,允许在集成开发环境(IDE)中组合高级图像处理功能。例如,Matrox的Design Assistant是一种IDE,在该开发环境下,用户可以通过构建流程图而不是编写传统程序代码来创建视觉应用程序。除了构建流程图,用户还可以在IDE中直接为应用程序设计图形操作界面。同样,NI公司的Vision Builder AI,允许开发人员在交互式菜单驱动的开发环境中使用诸如模式匹配、条形码读取和图像分类等功能来配置、评价检测和部署视觉系统(见图1)。
图1:NI公司的Vision Builder AI,允许开发人员在交互式菜单驱动开发环境中使用诸如模式匹配、条形码读取和图像分类等功能,来配置、评价检测和部署视觉系统。
在许多情况下,供应商将使用他们的软件为最终用户提供开发的软件,来解决诸如光学字符识别(OCR)等特定任务。例如为了阅读和验证由多个PCB组成的大型面板上的条形码标签,美国Microscan公司已经使用其Visionscape软件,确保面板上的每块单独电路板可以在整个生产过程中进行追踪。
一些公司甚至已经扩展了这种图形流程图界面概念,允许开发人员访问现场可编程门阵列(FPGA)的基础功能。例如,德国Silicon Software公司的VisualApplets是一种软件编程环境,其允许开发人员使用数据流模型执行FPGA编程。在公司的最新VisualApplets版本中,提供了分段、分类和压缩功能,以及快速傅立叶变换(FFT)运算,可以更有效地实现复杂的带通滤波器(见图2)。
图2:为了使开发人员能访问FPGA的基本功能,Silicon Software公司的VisualApplet是一种软件编程环境,允许开发人员使用数据流模型执行FPGA编程。
如同SiliconSoftware公司一样,NI的LabVIEW FPGA模块可以在不使用低级语言(如VHDL)的情况下,执行FPGA的高效率算法,如图像滤波、Bayer解码和色彩空间转换。通过这样做,许多计算密集型图像处理功能可以转移到FPGA,从而加速机器视觉应用。
对于那些希望开发使用各种开源和商用软件的机器视觉系统用户,目前的开发环境可以让许多不同公司的图像处理算法进行图形化组合。这样的环境允许开发人员将开源算法和商用软件包整合在一起,以集成到单一的环境中。这可以根据最有效的算法对机器视觉软件进行专门定制。
例如,新西兰ControlVision公司的机器视觉框架VisionServer 7.2,允许在图形化IDE中一起使用开源图像处理库和商用软件包,如Cognex公司的VisionPro Software。爱尔兰CG Controls公司的VS-100P框架也支持VisionPro,其使用Microsoft的.NET 4框架和Windows Presentation Foundation(WPF),使开发人员能够部署基于单相机或多相机的视觉系统。
虽然大多数商用的机器视觉软件运行在Windows和Linux等操作系统下,但是仍需开发可在特定时间段内执行任务的机器视觉系统,即支持实时操作系统(RTOS)。随后,这些RTOS允许开发人员确定捕获和处理图像以及在系统内执行I/O所需要的时间,同时利用Windows的强大功能来开发图形用户界面(GUI)。
现在,有许多公司为机器视觉软件包提供RTOS支持。例如,MIL现在可以在美国IntervalZero公司的RTX64 RTOS下运行,这是美国Kingstar公司在开发用于工业运动控制和机器视觉应用的基于PC的软件过程中所应用的。基于EtherCAT标准,机器视觉任务采用MIL,在IntervalZero的RTX64 RTOS中运行。在运行中,RTX64与Windows一起运行在其自身的专用CPU核心上,以提供确定性的环境。使用这种架构,开发人员将基于MIL的应用程序分割为在RTX64和Windows上运行(见图3)。
图3:Matrox's Imaging Library(MIL)现在可以在IntervalZero的RTX64 RTOS环境下运行,这是Kingstar在开发用于工业运动控制和机器视觉应用的基于PC的软件中所应用的。RTX64的开发在C/C ++中执行,使用Visual Studio和Windows API的子集。RTX64下的MIL支持使用GigE Vision以及所支持的Matrox图像采集卡进行图像捕获。
也可以提供其他机器视觉软件包的第三方RTOS支持。例如,运行MVTec公司的HALCON机器视觉包,可以使用德国Kithara公司的RealTime RTOS Suite完成。与其他RTOS类似,RealTime RTOS Suite在RTOS的内核中使用单独的调度程序,来决定在任何特定时间执行哪个图像处理任务。如同IntervalZero一样,该内核与Windows一起运行。
加拿大OptelVision公司最近展示了如何使用自己的运行于美国TenAsys公司的INtime专有算法,开发出一种药片检测机。TenAsys公司销售和营销副总裁Kim Hartman介绍说,INtime可以控制系统中对响应时间要求严格的I/O设备,同时允许Windows控制非实时I/O。
高性能图像处理也是嵌入式视觉领域关注的焦点。最近,丹麦Qtechnology公司首席固件工程师Ricardo Ribalda博士,展示了他的公司是如何创建了一种应用程序,使用美国AMD公司的处理器和美国Mentor Graphics公司的软件工具,对纸币进行高速扫描和验证。
今天,执行测量功能、模式匹配、OCR、色彩分析和形态操作所需的工具,都已经比较常用。这样的工具允许开发人员配置多种类型的机器视觉系统,来分类部件是否可接受或必须被拒绝。然而,在某些情况下,如果对象的特征是可变的,那么这些工具的用途就大打折扣了。在水果和蔬菜分选应用中,特定产品是好还是坏,可以依赖于许多不同的因素。
要确定这类产品是否可以接受,则依赖于呈现具有许多图像的系统,提取特定的特征并进行分类。许多不同的分类器可用于执行包括神经网络、支持向量机(SVM)、高斯混合模型(GMM)和k-最近邻(k-NN)的任务。例如,使用其HALCON软件包,MVTec开发人员可以访问所有这些分类器。
许多公司在商业产品中已经使用了这种“深度学习”技术。为了根据可接受或不可接受的缺陷对产品进行分类或分离,瑞士ViDi Systems公司的ViDi green软件允许开发人员将图像分配和标记为不同的类别,之后未经培训的图像可以被分类。在瓶子的分选应用示范中,意大利Datalogic公司最近展示了在“测试瓶子首先呈现给系统、以及图像中的关键点自动提取”后,如何能够使用k-d树分类器来识别和分类瓶子。
使用德国StemmerImaging公司的CVBManto的开发人员,也不需要在分类之前选择图像中的相关特征。使用提取的纹理、几何和颜色特征,将捕获的数据呈现给SVM进行分类。与之相似,美国Cyth Systems公司的NeuralVision系统,在设计上旨在允许那些没有图像处理经验的机器制造商,能向他们的系统中添加图像分类。
通过在提取的数据上应用多个图像分类器,开发人员可以确定提取的特征是否足够好,最终确定正在分析的产品的特定特征。否则,则可能需要提取不同类型的特征。因此,一些公司提供允许开发和测试多个分类器的软件包。荷兰PR Sys Design公司的perClass就是这样一种工具包,提供多种分类器,允许开发人员与数据进行交互式工作,选择数据中用于图像分类的最佳特征,训练多种多样的分类器并优化它们的性能(见图4)。
图4:PR Sys Design公司的perClass提供多种分类器,允许开发人员与数据交互式工作,选择数据中的最佳特征进行图像分类,训练各种类型的分类器并优化它们的性能。在该图像中,显示了关于炸薯条的高光谱缺陷探测问题。(左):从四种材料(健康土豆、土豆皮、腐烂和变绿)的超光谱图像中提取的训练数据的可视化。(右):具有超叠加颜色的测试高光谱图像(103种光谱波长之一),显示分类器的决定。
网络上现在有许多深度学习资源。其中最有趣的两个是Tombone's Computer Vision Blog(www.computervisionblog.com),一家致力于深度学习、计算机视觉和AI算法的网站,以及The Journal of Machine Learning Research(JMLR; www.jmlr.org),这是一家出版机器学习论文的论坛。
然而,虽然这种深度学习方法可以用于开发诸如手写识别、遥感和水果分选之类的应用,但是它们总是具有有限的精度,使得分类器不太适用于需要高精度测量或对准零件用于组装或加工、或用于精密机器人引导的应用。
许多开发人员选择高级商业软件包来开发机器视觉系统,因为它们的易用性和可用的技术支持。其他更雄心勃勃的开发人员,可能希望尝试在他们的项目中使用开源代码。虽然提供很少的技术支持,但不需要许可证或使用费。
这类开源软件范围涵盖C/C++和Java库、框架、工具包和最终用户软件包,其中许多可以在美国RoboRealm公司的网站上找到。虽然一些链接已经过时,但该网站确实提供了许多可用的开源机器视觉库的概览。
使用开源代码开发应用程序的两种最受欢迎的方法包括:利用诸如AForge.NET(www.aforgenet.com)之类的软件,该软件是为计算机视觉和人工智能的开发人员设计的C#框架;以及Open Source Computer Vision Library(Open CV),这是一个开源计算机视觉和机器学习软件库,提供C/C++、Python和Java接口,并支持Windows、Linux、Mac OS、iOS和Android操作系统。
对于希望从C#使用OpenCV的用户,Elad Ben-Israel已经为.NET Framework创建了一个小型OpenCV封装。代码由Managed C++编写的DLL组成,将OpenCV库封装在.NET类中,以便它们可以从C#、VB.NET或Managed C++获得。该封装可以从http://bit.ly/VSD-1704-8下载。其他.NET封装包括Emgu CV(www.emgu.com),OpenCV的跨平台.NET封装,允许从.NET兼容语言(如C#、VB、VC ++和IronPython)调用OpenCV函数。该封装包可以由Visual Studio、Xamarin Studio和Unity编译,并在Windows、Linux、Mac OS X和Android操作系统下运行。
要使用OpenCV构建计算机视觉应用程序,开发人员可以使用SimpleCV(http://simplecv.org),这是一种开源框架,允许访问多个计算机视觉库(如OpenCV),而无需了解位深度、文件格式、颜色空间或缓冲区管理协议。由于通过OpenCV自动执行整合英特尔的集成性能基元(IPP),因此自动加速了超过3000种专有优化的图像处理和计算机视觉功能。这些IPP可以在英特尔的开发者站点(http://bit.ly/VSD-1704-9)免费下载。
迄今为止,一些公司支持用OpenCV库开发,如美国WillowGarage公司、德国Kithara公司、美国国家仪器(NI)公司和新西兰ControlVision公司。
好消息!
小白学视觉知识星球
开始面向外开放啦👇👇👇
下载1:OpenCV-Contrib扩展模块中文版教程 在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。 下载2:Python视觉实战项目52讲 在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。 下载3:OpenCV实战项目20讲 在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。 交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~