1. 机器视觉

1.1 机器视觉的概念

  机器视觉就是使用光学非接触式感应设备自动接收并解释真实场景的图像以获得信息控制机器或流程。

  机器视觉技术是一门涉及人工智能、神经生物学、心理物理学、计算机科学、图像处理、模式识别等诸多领域的交叉学科。机器视觉主要用计算机来模拟人的视觉功能,从客观事物的图像中提取信息,进行处理并加以理解,最终用于实际检测、测量和控制。机器视觉技术最大的特点是速度快、信息量大、功能多。

  人类在生产实践的过程中,面临自身能力的局限性,因而发明和创造了许多智能机器来辅助或代替人类完成任务。智能机器能模拟人类的功能,感知外部世界并有效地解决人所不能解决的问题。人类感知外部世界主要通过视觉、触觉、听觉和嗅觉等感觉器官,其中约 80%的信息是由视觉获取的。因此,对智能机器来说,赋予机器以人类视觉功能是极其重要的。

  在现代工业自动化生产中,涉及各种各样的检查、测量和零件识别应用,例如汽车零配件尺寸检查和自动装配的完整性检查、电子装配线的元件自动定位、饮料瓶盖的印刷质量检查、产品包装上的条码和字符识别等。这类应用的共同特点是连续大批量生产,对外观质量的要求非常高。通常这种带有高度重复性和智能性的工作只能靠人工检测来完成,我们经常在一些工厂的现代化流水线后面看到数以百计甚至逾千的检测工人来执行这道工序,在给工厂增加巨大的人工成本和管理成本的同时,仍然不能保证 100%的检验合格率(“零缺陷”),而当今企业之间的竞争已经不允许哪怕是 0.1% 的缺陷存在。有些时候,如微小尺寸的精确快速测量、形状匹配、颜色辨识等,用人眼根本无法连续稳定地进行,其他物理量传感器也难有用武之地。这时,人们开始考虑把计算机的快速性和可靠性、结果的可重复性与人类视觉的高度智能化和抽象能力相结合,由此逐渐形成了一门新学科——机器视觉。

  机器视觉是研究用计算机来模拟生物宏观视觉功能的科学和技术。通俗地说,就是用机器代替人眼来做测量和判断。首先采用 CCD 照相机将被摄取目标转换成图像信号,传送给专用的图像处理系统,根据像素分布和亮度、颜色等信息转变成数字化信号;然后图像系统对这些信号进行各种运算来抽取目标的特征,如面积、长度、数量、位置等;最后根据预设的容许度和其他条件输出结果,如尺寸、角度、偏移量、个数、合格/不合格、有/无等。机器视觉的特点是自动化、客观、非接触和高精度,与一般意义上的图像处理系统相比,机器视觉强调的是精度和速度,以及工业现场环境下的可靠性。

  机器视觉是一个相当新且发展十分迅速的研究领域。人们从 20 世纪 50 年代开始研究二维图像的统计模式识别,60 年代 Roberts 开始进行三维机器视觉的研究,70 年代中,MIT 人工智能实验室正式开设“机器视觉”课程,80 年代开始,开始了全球性的研究热潮,机器视觉获得了蓬勃发展,新概念、新理论不断涌现。现在,机器视觉仍然是一个非常活跃的研究领域,与之相关的学科涉及图像处理、计算机图形学、模式识别、人工智能、人工神经元网络等。

1.2 机器视觉系统构成和分类

  典型的视觉系统一般由以下部分构成:

  (1)图像获取:光源、镜头、相机、采集卡、机械平台。
  (2)图像处理与分析:工控主机、图像处理分析软件、图形交互界面。
  (3)判决执行:电传单元、机械单元。

  视觉系统输出的并非是图像视频信号,而是经过运算处理之后的检测结果,如尺寸数据。上位机如 PC 和 PLC 实时获得检测结果后,指挥运动系统或 I/O 系统执行相应的控制动作,如定位和分选。

  机器视觉系统通常可以分为三大类:基于智能相机、基于嵌入式和基于 PC。

1.3 机器视觉的优势

  虽然人类视觉擅长对复杂、非结构化的场景进行定性解释,但机器视觉凭借速度、精度和可重复性等优势,擅长对结构化场景进行定量测量。举例来说,在生产线上,机器视觉系统每分钟能够对数百个甚至数千个元件进行检测。配备适当分辨率的相机和光学元件后,机器视觉系统能够轻松检验小到人眼无法看到的物品细节特征。

  另外,由于消除了检验系统与被检验元件之间的直接接触,机器视觉还能够防止元件损坏,也避免了机械部件磨损的维护时间和成本投入。通过减少制造过程中的人工参与,机器视觉还带来了额外的安全性和操作优势。此外,机器视觉还能够防止洁净室受到人为污染,也能让工人免受危险环境的威胁。

1.4 机器视觉系统的应用

  目前,国际上视觉系统的应用方兴未艾,而在中国,工业视觉系统尚处于概念导入期,各行业的领先企业在解决了生产自动化的问题以后,已开始将目光转向测量自动化方面。机器视觉极适用于大批量生产过程中的测量、检查和辨识,如零件装配完整性、装配尺寸精度、零件加工精度、位置/角度测量、零件识别、特性/字符识别等。其最大的应用行业为汽车、制药、电子与电气、制造、包装/食品/饮料、医学。例如对汽车仪表盘加工精度的检查,高速贴片机上对电子元件的快速定位,对管脚数目的检查,对 IC(集成电路芯片)表面印的字符的辨识,胶囊生产中对胶囊壁厚和外观缺陷的检查,轴承生产中对滚珠数量和破损情况的检查,食品包装上面对生产日期的辨识,对标签贴放位置的检查,等等。

1.5 计算机视觉与相关学科的关系

  图像处理通常是把一幅图像变换成另一幅图像,也就是说,图像处理系统输入的是图像,输出的仍然是图像,信息恢复任务则留给人来完成。

  计算机图形学(Computer Graphics):通过几何基元(如线、圆和自由曲面等)来生成图像,属于图像综合,它在可视化(Visualization)和虚拟现实(Virtual Reality)中起着很重要的作用。计算机视觉正好用于解决相反的问题,即从图像中估计几何基元和其他特征,属于图像分析。

  模式识别(Pattern Recognition):研究分类问题,确定符号、图画、物体等输入对象的类别,强调一类事物区别于其他事物所具有的共同特征,一般不关心三维世界的恢复问题。

  人工智能(Artificial Intelligence):涉及智能系统的设计和智能计算的研究,在经过图像处理和图像特征提取过程后,接下来要用人工智能方法对场景特征进行表示,并分析和理解场景。

  媒体计算(Multimedia Computing):文字、图形、图像、动画、视频、音频等各类感觉媒体的共性的基础计算理论、计算方法,以及媒体系统实现技术,以实现下一代计算机能听、能看、会说、会学习为目标。

  认知科学与神经科学(Cognitive Science and Neuroscience)将人类视觉作为主要的研究对象,计算机视觉中已有的许多方法与人类视觉极为相似,许多计算机视觉研究者对研究人类视觉计算模型比研究计算机视觉系统更感兴趣,希望计算机视觉更加自然化,更加接近生物视觉。

2.OpenCV 概述

2.1 OpenCV 介绍

  OpenCV 是一个基于 BSD 许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在 Linux、Windows、Android 和 Mac OS 操作系统上。它轻量级而且高效,由一系列 C 函数和少量 C++类构成,同时提供了 Python、Ruby、MATLAB 等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

  OpenCV 用 C++语言编写,它具有 C++、Python、Java 和 MATLAB 接口,并支持 Windows、Linux、Android 和 Mac OS。OpenCV 主要倾向于实时视觉应用,并在可用时利用 MMX 和 SSE 指令,如今也提供对于 C#、Ch、Ruby、GO 的支持。

  OpenCV 提供的视觉处理算法非常丰富,并且它部分以 C 语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整地编译链接生成执行程序,所以很多人用它来做算法的移植,OpenCV 的代码经过适当改写,可以正常地运行在 DSP 系统和 ARM 嵌入式系统中。

  OpenCV 是一个开放源代码的计算机视觉应用平台,由英特尔公司下属研发中心俄罗斯团队发起该项目,开源 BSD 证书。OpenCV 的目标是实现实时计算机视觉,也就是用摄像机和计算机代替人眼对目标进行识别、跟踪以及测量等,并进一步进行图像处理。而图像处理又称为影像处理,是用计算机对图像进行分析,以达到所需结果的技术,一般包括图像压缩、增强和复原、匹配识别三部分。目前所说的图像处理一般指数字图像处理(Digital Image Processing)。计算机视觉与图像处理的区别主要在于:计算机视觉的侧重点在于使用计算机来模拟人的视觉,对客观事物进行“感知”;而图像处理的侧重点在于“处理”,提取所需要的有效信息。这两者相辅相成,使得机器可以在一定程度上模拟人的一些行为,使机器更加人性化、智能化。

  OpenCV 由于其开源特性以及强大的社区支持,使得其发展极其迅速。OpenCV 1.0 正式版本于 2006 年发布,可以运行在 Mac OS 以及 Linux 平台上,但是主要提供 C 的接口;到 2009 年发布了 OpenCV 2.0 版本,其代码已显著优化,同时带来了全新的 C++函数的接口,将 OpenCV 的能级无限放大,使开发者使用起来更加方便。同时,增加了新的平台支持,包括 iOS 和 Android,通过CUDA 和 OpenGL 实现了 GPU 加速;在编程语言方面,为 Python 和 Java 用户提供了接口。2014年 8 月,OpenCV 3.0 Alpha 发布,宣告 OpenCV 3 时代登场,其最重大的革新之处在于 OpenCV 3.0改变了项目架构的方式。之前的 OpenCV 是一个相对整体的项目,各个模块都是以整体的形式构建,然后组合在一起,而 OpenCV 3 抛弃了整体架构,使用内核+插件的架构形式,使 OpenCV 更加轻量化。当前,OpenCV 随着工业 4.0 与机器人无人机的发展,已经在应用领域得到了广泛的应用,当前越来越多从事机器视觉与图像处理的开发者选择 OpenCV 作为开发工具实现应用开发。

2.2 OpenCV 应用

  计算机视觉市场巨大且持续增长,这方面没有标准 API,如今的计算机视觉软件大概有以下三种:

(1)研究派代码(慢,不稳定,独立并与其他库不兼容)。

(2)耗费很高的商业化工具(比如 Halcon、MATLAB+Simulink)。

(3)依赖硬件的一些特别的解决方案(比如视频监控、制造控制系统、医疗设备)。

  这是如今的现状,而标准的 API 将简化计算机视觉程序和解决方案的开发,OpenCV 致力于成为这样的标准 API。

  OpenCV 致力于真实世界的实时应用,通过优化 C 代码的编写对其执行速度带来了可观的提升,并且可以通过购买 Intel 的 IPP 高性能多媒体函数库(Integrated Performance Primitives)得到更快的处理速度。

  OpenCV 的应用领域非常广泛,比如人机互动、物体识别、图像分割、人脸识别、动作识别、运动跟踪、机器人、运动分析、机器视觉、结构分析、汽车安全驾驶、军工、卫星导航等。可以说学好 OpenCV,就业和职业发展前景非常广阔!

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐