使用 Python 的 AI – 计算机视觉

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

计算机视觉

计算机视觉是一门研究如何根据场景中存在的结构的属性,从 2d 图像中重建、中断和理解 3d 场景的学科。

计算机视觉层次结构

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

  • 低级视觉 − 它包括用于特征提取的过程图像。

  • 中级视觉 − 它包括对象识别和 3D 场景解释

  • 高级视觉 −它包括场景的概念描述,如活动、意图和行为。

计算机视觉与图像处理

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

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

应用

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

机器人技术

  • 定位 - 自动确定机器人位置

  • 导航

  • 避障

  • 装配(钻孔、焊接、喷漆)

  • 操作(例如 PUMA 机器人操作器)

  • 人机交互 (HRI):智能机器人与人互动并为人服务

医学

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

  • 2D/3D 分割

  • 3D 人体器官重建(MRI 或超声)

  • 视觉引导机器人手术

安全

  • 生物识别(虹膜、指纹、人脸识别)
  • 监视 - 检测某些可疑活动或行为

运输

  • 自动驾驶汽车
  • 安全,例如驾驶员警觉监控

工业自动化应用

  • 工业检测(缺陷检测)
  • 装配
  • 条形码和包装标签读取
  • 对象排序
  • 文档理解(例如 OCR)

安装有用的软件包

对于使用 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

读取、写入和显示图像

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

用于读取、显示、写入图像文件的 OpenCV 函数

OpenCV 为此提供了以下函数 −

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

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

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

示例

此示例显示了用于读取一种格式的图像的 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() 只是销毁了我们创建的所有窗口。

颜色空间转换

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

示例

考虑此示例将图像从 BGR 转换为灰度。

按所示导入 OpenCV 包 −

import cv2

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

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

现在,如果我们使用 imshow() 函数查看此图像,则我们可以看到此图像处于 BGR 中。

cv2.imshow('BGR_Penguins',image)
企鹅

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

image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray_penguins',image)
灰色企鹅

边缘检测

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

示例

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

按图所示导入 OpenCV 包 −

import cv2
import numpy as np

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

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

现在,使用 Canny () 函数检测已读取图像的边缘。

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

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

cv2.imshow('edges', cv2.imread(''edges_Penguins.jpg'))

此 Python 程序将创建一个名为edges_penguins.jpg 带边缘检测。

edges penguins

人脸检测

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

Haar 级联数据

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

示例

以下是使用 Haar Cascade 检测下图中显示的 Amitabh Bachan 脸部的 Python 代码 −

ab face

导入 OpenCV 包,如下所示 −

import cv2
import numpy as np

现在,使用 HaarCascadeClassifier 检测人脸 −

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

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

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

眼睛检测

眼睛检测是计算机视觉的另一个应用,它使其更加逼真和具有未来感。OpenCV 具有内置功能来执行眼睛检测。我们将使用 Haar 级联 分类器进行眼睛检测。

示例

以下示例给出了使用 Haar Cascade 检测下图中 Amitabh Bachan 脸部的 Python 代码 −

Haar AB Face

导入 OpenCV 包,如下所示 −

import cv2
import numpy as np

现在,使用 HaarCascadeClassifier 检测脸部 −

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