IV · 计算机视觉

计算机视觉简介

微软《AI for Beginners》 · 第 06 课 · 中文翻译 · 本地镜像

计算机视觉 是一个旨在让计算机能够对数字图像进行高层次理解的学科。这是一个非常广泛的定义,因为理解可以有很多不同的含义,包括在图片中找到一个物体(目标检测)、理解发生了什么(事件检测)、用文字描述图片,或者重建3D场景。此外,还有一些与人类图像相关的特殊任务:年龄和情绪估计、人脸检测与识别,以及3D姿态估计等。

课前测验

计算机视觉最简单的任务之一是图像分类

计算机视觉通常被认为是人工智能的一个分支。如今,大多数计算机视觉任务都是通过神经网络解决的。我们将在本节中学习一种专门用于计算机视觉的神经网络类型,卷积神经网络

然而,在将图像传递给神经网络之前,许多情况下使用一些算法技术来增强图像是有意义的。

以下是一些可用于图像处理的Python库:

OpenCV

OpenCV 被认为是图像处理的事实标准。它包含许多有用的算法,用C++实现。你也可以通过Python调用OpenCV。

学习OpenCV的一个好地方是这个Learn OpenCV课程。在我们的课程中,我们的目标不是学习OpenCV,而是向你展示一些使用它的例子,以及如何使用它。

加载图像

在Python中,图像可以方便地表示为NumPy数组。例如,大小为320x200像素的灰度图像将存储在一个200x320的数组中,而相同尺寸的彩色图像将具有200x320x3的形状(对应3个颜色通道)。要加载图像,可以使用以下代码:

import cv2
import matplotlib.pyplot as plt

im = cv2.imread('image.jpeg')
plt.imshow(im)

传统上,OpenCV使用BGR(蓝-绿-红)编码来表示彩色图像,而Python中的其他工具则使用更传统的RGB(红-绿-蓝)。为了使图像显示正确,你需要将其转换为RGB颜色空间,可以通过交换NumPy数组中的维度或调用OpenCV函数来实现:

im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)

同样的cvtColor函数也可以用于执行其他颜色空间转换,例如将图像转换为灰度或HSV(色调-饱和度-亮度)颜色空间。

你还可以使用OpenCV逐帧加载视频——在练习OpenCV Notebook中有一个示例。

图像处理

在将图像传递给神经网络之前,你可能需要应用几个预处理步骤。OpenCV可以做很多事情,包括:

使用计算机视觉的示例

在我们的OpenCV Notebook中,我们提供了一些使用计算机视觉执行特定任务的示例:

盲文图像 盲文图像预处理结果 盲文符号

图片来源:OpenCV.ipynb

视频帧和帧差异图像

图片来源:OpenCV.ipynb

光流图像

图片来源:OpenCV.ipynb

✍️ 示例笔记本: OpenCV 尝试OpenCV实践

让我们通过探索OpenCV Notebook来进行一些OpenCV实验。

结论

有时,像运动检测或指尖检测这样相对复杂的任务可以完全通过计算机视觉来解决。因此,了解计算机视觉的基本技术以及像OpenCV这样的库能做什么是非常有帮助的。

🚀 挑战

观看这个视频,了解Cortic Tigers项目以及他们如何通过机器人构建一个基于模块的解决方案来普及计算机视觉任务。研究其他类似项目,这些项目帮助新学习者进入该领域。

课后测验

复习与自学

阅读更多关于光流的内容,请参考这个优秀教程

作业

在这个实验中,你将拍摄一个带有简单手势的视频,你的目标是使用光流提取上下左右的运动。

手掌运动帧