您的位置:

Python 对象识别

物体识别是属于计算机视觉更广泛领域的一项技术。这项技术能够识别图像和视频中存在的物体,并对其进行跟踪。物体识别又称物体检测,有多种应用,如人脸识别、车辆识别、行人计数、自动驾驶车辆、安全系统等等。

物体识别的两个重要目标包括:

  1. 图像中存在的所有对象的识别
  2. 寻求关注的对象的过滤

在下面的教程中,我们将了解如何使用 ImageAI 库在 Python 编程语言中执行对象识别。在本教程结束之前,我们将使用 Python 中的 ImageAI 库创建一个基本的对象识别模型。

所以,让我们开始吧。

面向对象识别的深度学习

深度学习技术已经显示出与对象识别相关的不同问题的技术水平。用于对象识别的深度学习的一些常用方法如下:

  1. 形象
  2. 单发探测器
  3. YOLO(你只看一次)
  4. 基于区域的卷积神经网络

但是,在本教程中,我们将了解 ImageAI 是什么,以及如何在执行对象识别时使用它。

了解 imageio 库

Python 提供了一个库,该库旨在让程序员和开发人员能够借助一些简单的编码脚本构建具有独立深度学习和计算机视觉功能的应用和系统。 ImageAI 由几乎所有最先进的深度学习算法的 Python 实现组成,如视网膜、YOLOv3 和tinyyov3。

ImageAI 利用了几个离线工作的 API——它有对象检测、视频检测和对象跟踪 API,不需要访问互联网就可以调用。 ImageAI 采用预先训练好的模型,可以轻松定制。

图像库的对象检测类由方法组成,以便在预训练模型的帮助下对任何图像或图像集执行对象检测。借助 ImageAI ,我们可以检测并识别 80 种不同类型的常见日常物品。

设置环境

在本节教程中,我们将考虑安装所需的库,包括 ImageAI 。

为了利用 ImageAI ,我们必须安装一些依赖项。第一步是在系统上安装 Python。我们可以从 Python 官网:https://www.python.org/下载安装 Python 3。

一旦我们在系统上成功安装了 Python,我们必须借助 pip 安装程序安装以下依赖项:

  1. OpenCV
  2. 张量流
  3. 形象

其安装命令如下所示:

语法:


# installing OpenCV
$ pip install opencv-python

# installing TensorFlow
$ pip install tensorflow

# installing Keras
$ pip install keras

# installing ImageAI
$ pip install imageAI

现在我们必须下载tinyyyov3模型文件,其中包含我们将用于对象识别的分类方法。

相同的链接可以在下面找到:

https://github . com/olafenwamos/imageai/releases/download/1.0/yolo-tiny . H5

使用 imageio 执行对象识别

在本节中,我们将讨论如何利用 Python 中的 ImageAI 库。为了更好地理解和清晰,执行对象识别的过程分为几个步骤。

第一步

第一步是创建必要的文件夹。对于本教程,我们需要如下所示的文件夹:

  1. Object_Recognition: 这将是根文件夹。
  2. 模型:该文件夹将存储预先训练好的模型。
  3. 输入:这个文件夹会存储我们要进行物体检测的图像文件。
  4. 输出:该文件夹将存储带有检测对象的图像文件。

一旦我们创建了必要的文件夹,对象识别文件夹应该有以下子文件夹:


?   Input
?   Models
?   Output
3 directories, 0 files

第二步

对于第二步,我们将打开首选的文本编辑器,在本例中是 Visual Studio Code,以编写 Python 脚本并创建一个新的文件识别器

第三步

现在,让我们开始从 ImageAI 库中导入 ObjectDetection 类。其语法如下所示:

文件:recognizer.py


# importing the required library
from imageai.Detection import ObjectDetection

第四步

现在已经导入了所需的 ImageAI 库和 ObjectDetection 类,接下来要做的就是创建类 ObjectDetection 的实例。让我们考虑下面的代码片段。

文件:识别器. py


# instantiating the class
recognizer = ObjectDetection()

第五步

让我们使用下面的代码片段指定模型、输入图像和输出图像的路径。

文件:识别器. py


# defining the paths
path_model = "./Models/yolo-tiny.h5"
path_input = "./Input/images.jpg"
path_output = "./Output/newimage.jpg"

第六步

一旦我们实例化了 ObjectDetection 类,我们现在就可以从该类中调用不同的函数。为了调用预先训练的模型,该类由以下函数组成:

  1. setModelTypeAsRetinaNet()
  2. setModelTypeAsYOLOv3()
  3. setModelTypeAsTinyYOLOv3()

出于本教程的目的,我们将使用预训练的 TinyYOLOv3 模型,因此,我们将使用setmodeltypastayyolov3()函数来加载模型。

让我们考虑下面的代码片段:

文件:识别器. py


# using the setModelTypeAsTinyYOLOv3() function
recognizer.setModelTypeAsTinyYOLOv3()

第七步

现在,我们将调用函数 setModelPath() 。该函数将接受一个字符串,该字符串包含预训练模型的路径。

让我们考虑下面的代码片段:

文件:识别器. py


# setting the path to the pre-trained Model
recognizer.setModelPath(path_model)

第八步

在这一步中,我们将从识别器实例中调用 loadModel() 函数。该函数将在 setModelPath() 类方法的帮助下,从上面指定的路径加载模型。

让我们考虑下面的代码片段。

文件:识别器. py


# loading the model
recognizer.loadModel()

第九步

我们必须在前面创建的识别器对象的帮助下调用detectobjectsfroimage()函数。

该功能接受两个参数:输入 _ 图像和输出 图像 路径。输入 _ 图像参数是我们识别的图像所处的路径,而输出 图像 路径参数是存储带有检测对象的图像的路径。这个函数将返回包含图像中检测到的每个对象的名称和百分比概率的措辞。

其语法如下所示:

文件:识别器. py


# calling the detectObjectsFromImage() function
recognition = recognizer.detectObjectsFromImage(
    input_image = path_input,
    output_image_path = path_output
    )

步骤 10

最后,我们可以通过遍历字典中的每个元素来访问字典元素。

其语法如下所示:

文件:识别器. py


# iterating through the items found in the image
for eachItem in recognition:
    print(eachItem["name"] , " : ", eachItem["percentage_probability"])

对象识别模型的完整 Python 脚本

让我们考虑下面的对象识别模型脚本。

文件:识别器. py


# importing the required library
from imageai.Detection import ObjectDetection

# instantiating the class
recognizer = ObjectDetection()

# defining the paths
path_model = "./Models/yolo-tiny.h5"
path_input = "./Input/images.jpg"
path_output = "./Output/newimage.jpg"

# using the setModelTypeAsTinyYOLOv3() function
recognizer.setModelTypeAsTinyYOLOv3()
# setting the path of the Model
recognizer.setModelPath(path_model)
# loading the model
recognizer.loadModel()
# calling the detectObjectsFromImage() function
recognition = recognizer.detectObjectsFromImage(
    input_image = path_input,
    output_image_path = path_output
    )

# iterating through the items found in the image
for eachItem in recognition:
    print(eachItem["name"] , " : ", eachItem["percentage_probability"])

输出:

car  :  88.85036110877991
car  :  85.83406209945679
bus  :  70.04978060722351
car  :  80.88288903236389
car  :  55.334705114364624
person  :  61.084866523742676
car  :  68.46083402633667
person  :  56.165677309036255
person  :  71.58655524253845
car  :  59.49597954750061
person  :  55.276620388031006
person  :  69.08922791481018
person  :  59.92640256881714
car  :  82.73208141326904
person  :  54.69227433204651
person  :  67.25137233734131
car  :  68.9003050327301
person  :  77.32996344566345
person  :  53.02640199661255
person  :  81.33729696273804
person  :  83.60849618911743
person  :  50.34937262535095

实际图像:

物体识别后的图像:

最后,我们可以观察到 ImageAI 已经成功地识别了图像中的汽车和人。