Artificial Intelligence With Python 简明教程

AI with Python – Computer Vision

计算机视觉关注于使用计算机软件和硬件建模和复制人类视觉。在本章中,您将详细了解这一点。

Computer Vision

计算机视觉是一门学科,研究如何根据场景中结构的性质,从其二维图像中重建、解释并理解三维场景。

Computer Vision Hierarchy

计算机视觉分为以下三个基本类别:

  1. Low-level vision - 它包括用于特征提取的处理图像。

  2. Intermediate-level vision - 它包括对象识别和三维场景解释

  3. High-level vision - 它包括诸如活动、意图和行为的场景概念描述。

Computer Vision Vs Image Processing

图像处理研究图像到图像转换。图像处理的输入和输出都是图像。

计算机视觉是从它们的图像中构建物理对象的明确有意义的描述。计算机视觉的输出是对三维场景中结构的描述或解释。

Applications

计算机视觉在以下领域有应用:

Robotics

  1. Localization-determine robot location automatically

  2. Navigation

  3. Obstacles avoidance

  4. Assembly (peg-in-hole, welding, painting)

  5. 操控(例如,PUMA 机器人机械手)

  6. 人机交互 (HRI):智能机器人与人进行交互并为其提供服务

Medicine

  1. 分类和检测(例如,病变或细胞分类和肿瘤检测)

  2. 2D/3D segmentation

  3. 三维人体器官重建(MRI 或超声波)

  4. Vision-guided robotics surgery

Security

  1. 生物识别(虹膜、指纹、面部识别)

  2. 监视——检测某些可疑活动或行为

Transportation

  1. Autonomous vehicle

  2. 安全,例如驾驶员警觉监控

Industrial Automation Application

  1. Industrial inspection (defect detection)

  2. Assembly

  3. 条形码和包装标签读取

  4. Object sorting

  5. Document understanding (e.g. OCR)

Installing Useful Packages

对于使用 Python 的计算机视觉,可以使用名为 OpenCV (开源计算机视觉)的流行库。它是一个编程函数库,主要针对实时计算机视觉。它使用 C 编写,而它的主界面使用 C。可以使用以下命令安装此软件包 −

pip install opencv_python-X.X-cp36-cp36m-winX.whl

此处 X 代表机器上安装的 Python 版本以及你拥有的 win32 或 64 位。

如果使用 anaconda 环境,则使用以下命令安装 OpenCV −

conda install -c conda-forge opencv

Reading, Writing and Displaying an Image

大多数 CV 应用程序需要获取图像作为输入,并生成图像作为输出。在本节中,你将学习如何使用 OpenCV 提供的函数读取和写入图像文件。

OpenCV functions for Reading, Showing, Writing an Image File

OpenCV 为此提供了以下函数 −

  1. imread() function − 这是读取图像的函数。OpenCV imread() 支持各种图像格式,如 PNG、JPEG、JPG、TIFF 等。

  2. imshow() function − 这是在窗口中显示图像的函数。窗口会自动适应图像大小。OpenCV imshow() 支持各种图像格式,如 PNG、JPEG、JPG、TIFF 等。

  3. imwrite() function − 这是写入图像的函数。OpenCV imwrite() 支持各种图像格式,如 PNG、JPEG、JPG、TIFF 等。

Example

此示例展示了以一种格式读取图像的 Python 代码 − 以另一种格式在窗口中显示,并写入同一图像。请考虑以下所示步骤 −

按所示导入 OpenCV 软件包 −

import cv2

现在,要读取特定图像,请使用 imread() 函数 −

image = cv2.imread('image_flower.jpg')

要显示图像,请使用 imshow() 函数。可以看到图像的窗口名称为 image_flower

cv2.imshow('image_flower',image)
cv2.destroyAllwindows()
image flower

现在,我们可以使用 imwrite() 函数将同一图像写入其他格式(例如 .png) −

cv2.imwrite('image_flower.png',image)

输出 True 表示图像已成功写入当前文件夹的 .png 文件中。

True

注 - destroyallWindows() 函数仅销毁我们创建的所有窗口。

Color Space Conversion

在 OpenCV 中,图像不是使用传统的 RGB 颜色存储的,相反,它们以相反的顺序存储,即 BGR 顺序。因此,读取图像时的默认颜色代码是 BGR。s0 颜色转换函数用于将图像从一种颜色代码转换为其他颜色代码。

Example

考虑这个例子,将图像从 BGR 转换为灰度。

导入 s1 软件包,如下所示:

import cv2

现在,要读取特定图像,请使用 imread() 函数 −

image = cv2.imread('image_flower.jpg')

现在,如果我们使用 s2 函数查看此图像,则我们可以看到此图像为 BGR。

cv2.imshow('BGR_Penguins',image)
penguine

现在,使用 s3 函数将此图像转换为灰度。

image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_penguins',image)
grey penguine

Edge Detection

人类在看到草图后,可以轻松识别许多类型的物体及其姿势。这就是为什么边缘在人类生活中以及在计算机视觉的应用中都起着重要作用。OpenCV 提供了一个非常简单且有用的函数,称为 Canny(),用于检测边缘。

Example

以下示例说明了边缘的清晰识别。

导入 OpenCV 软件包,如下所示:

import cv2
import numpy as np

现在,要读取特定图像,请使用 s4 函数。

image = cv2.imread('Penguins.jpg')

现在,使用 s5 函数来检测已读取图像的边缘。

cv2.imwrite(‘edges_Penguins.jpg’,cv2.Canny(image,200,300))

现在,要显示带有边缘的图像,请使用 imshow() 函数。

cv2.imshow(‘edges’, cv2.imread(‘‘edges_Penguins.jpg’))

此 Python 程序将创建一个名为 s6 的图像,并进行边缘检测。

edges penguins

Face Detection

人脸检测是计算机视觉的一个令人着迷的应用,它使它更加真实和具有未来感。OpenCV 具有执行人脸检测的内置功能。我们将使用 s7 级联分类器进行人脸检测。

Haar Cascade Data

我们需要数据来使用 Haar 级联分类器。您可以在我们的 OpenCV 软件包中找到此数据。安装 OpenCV 后,您可以看到名为 s8 的文件夹。不同的应用程序会有不同的 .xml 文件。现在,将它们全部复制以供不同的用途,然后将它们粘贴到当前项目下的新文件夹中。

Example

以下是使用 Haar 级联检测下图中显示的阿米塔布·巴乍的 Python 代码:

ab face

导入 s1 软件包,如下所示:

import cv2
import numpy as np

现在,使用 s9 来检测人脸:

face_detection=
cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/
haarcascade_frontalface_default.xml')

现在,要读取特定图像,请使用 s10 函数:

img = cv2.imread('AB.jpg')

现在,将它转换为灰度,因为它会接受灰色图像 −

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

现在,使用 face_detection.detectMultiScale 执行实际的人脸检测

faces = face_detection.detectMultiScale(gray, 1.3, 5)

现在,在整张脸部周围绘制一个矩形 −

for (x,y,w,h) in faces:
   img = cv2.rectangle(img,(x,y),(x+w, y+h),(255,0,0),3)
cv2.imwrite('Face_AB.jpg',img)

以此 Python 程序将创建一个名为 Face_AB.jpg 的图像,图像中包含所示的人脸检测结果

face ab

Eye Detection

眼部检测是计算机视觉的另一项了不起的应用,它使屏幕显示效果更真实并且更具未来感。OpenCV 具有执行眼部检测的内置功能。我们将使用 Haar cascade 分类器来进行眼部检测。

Example

以下示例提供了使用 Haar 级联来检测下图中提供的大巴哈昌的脸部的 Python 代码 −

haar ab face

导入 OpenCV 软件包,如下所示:

import cv2
import numpy as np

现在,使用 s9 来检测人脸:

eye_cascade = cv2.CascadeClassifier('D:/ProgramData/cascadeclassifier/haarcascade_eye.xml')

现在,要读取特定图像,请使用 imread() 函数

img = cv2.imread('AB_Eye.jpg')

现在,将它转换为灰度,因为它会接受灰色图像 −

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

现在,借助 eye_cascade.detectMultiScale 执行实际的人脸检测

eyes = eye_cascade.detectMultiScale(gray, 1.03, 5)

现在,在整张脸部周围绘制一个矩形 −

for (ex,ey,ew,eh) in eyes:
   img = cv2.rectangle(img,(ex,ey),(ex+ew, ey+eh),(0,255,0),2)
cv2.imwrite('Eye_AB.jpg',img)

以此 Python 程序将创建一个名为 Eye_AB.jpg 的图像,图像中包含所示的眼部检测结果

eye ab