为了让计算机“看”见,我们需要的不仅仅是巧妙的算法。一个完整的计算机视觉(CV)系统需要硬件与软件共同发挥作用。可以将其比作人类视觉:我们的眼睛(硬件)捕获光线,而我们的大脑(处理和“软件”)则对所见进行理解。
主要构成要素
从宏观角度看,一个计算机视觉系统通常由以下几部分构成:
- 输入设备: 用于捕获视觉信息。通常是摄像头或传感器。
- 处理单元: 运行分析视觉数据所需计算的硬件。
- 软件: 执行实际视觉任务的算法和程序。
- 输出: 呈现或使用分析结果的方式。
计算机视觉系统中各组件如何配合运作的简化示意图。
我们来详细看看每个组件。
输入设备:捕获视觉场景
第一步始终是获取图像或视频数据。
- 摄像头: 最常见的输入设备。可以是从笔记本电脑内置的普通网络摄像头,到复杂的工业相机,或是智能手机上的摄像头。标准相机捕获可见光,通常以熟悉的颜色格式存储,例如RGB(红、绿、蓝)。
- 专用传感器: 根据不同应用,可能会使用其他类型的传感器。例如:
- 深度传感器(如:Kinect, LiDAR): 这些设备测量距离,提供场景的三维信息。
- 热像仪: 这些设备检测红外辐射(热量),而不是可见光。
- 多光谱相机: 捕获电磁波谱更宽或不同范围的信息。
在本入门课程中,我们将主要使用传统相机捕获的标准数字图像。输入设备提供原始像素数据,供系统其他部分进行分析。
处理硬件:计算引擎
分析图像需要大量的计算。像素需要处理,模式需要识别,并且要执行各种计算。
- 中央处理器(CPU): 每台计算机都有CPU。它是运行操作系统和大多数应用程序的通用主力。CPU非常适合处理顺序任务和管理整个系统。许多基本的计算机视觉任务都可以在现代CPU上良好运行。
- 图形处理器(GPU): GPU最初是为视频游戏中的图形渲染而设计的,现在已成为处理要求更高的计算机视觉任务,特别是涉及深度学习任务的必要设备。为什么?因为图像处理通常涉及在许多像素上同时执行相同的简单计算。GPU擅长这种并行处理,它们包含数千个更简单的核心,旨在共同运作。这使得它们在许多计算机视觉算法中比CPU快得多。
- 专用硬件(进阶): 对于特定、高性能应用(例如在移动设备或实时系统中运行复杂模型),可能会使用TPU(张量处理单元)、FPGA(现场可编程门阵列)或专用AI加速器等专用硬件。这些硬件旨在对机器学习和计算机视觉中常见的特定数学运算实现极高的效率,但它们超出了本入门课程的范围。
我们即将设置的开发环境通常会使用您计算机的CPU,但像OpenCV这样的库通常会进行优化,以便在GPU可用并正确配置时,能更好地发挥其性能。
软件:系统背后的智能
仅凭硬件无法解读图像。软件提供指令和逻辑。
- 操作系统(OS): 负责管理硬件资源并允许其他软件运行(例如Windows、macOS、Linux),它是系统的核心支撑。
- 编程语言: 我们需要一种语言来编写指令。Python目前是计算机视觉最流行的语言,因为它易于使用且拥有广泛的库支持。其他语言如C++也被广泛使用,尤其是在性能要求高的场景。
- 计算机视觉库: 这些是预先编写好的代码集合,提供可直接用于常见计算机视觉任务的函数。您无需从头开始编写代码来加载图像、应用滤镜或检测边缘,而是可以使用库提供的函数。我们将使用的最主要的库是OpenCV(开源计算机视觉库)。其他还包括scikit-image、Pillow(用于基本图像处理)以及像TensorFlow和PyTorch这样的深度学习框架(它们具备丰富的计算机视觉功能)。
- 算法/应用程序: 这是您可能编写(或使用)的特定代码,用于解决某个具体问题,例如人脸识别、字符识别或对象跟踪。这些代码会调用计算机视觉库提供的函数来处理输入图像并生成结果。
输出:呈现结果
分析完成后,系统需要以有用的方式呈现结果。这可能包括:
- 显示图像,并用边界框突出显示检测到的对象。
- 输出文本,例如对象的分类(“猫”、“狗”)。
- 生成数值数据,如特征的坐标或对象的大小。
- 在另一个系统中触发操作(例如,如果检测到障碍物则停止机器人)。
本课程侧重
在本课程中,虽然我们承认硬件的重要性,但主要侧重于软件组件。您将学习使用Python和OpenCV库来加载、处理和分析图像,并借助您计算机的计算能力(主要使用CPU,但如果您有GPU,这些原理同样适用)。我们将在下一节开始设置这个软件环境。