使用 Python 进行对象识别

2025年1月11日 | 阅读 6 分钟

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

对象识别的两个重要目标包括

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

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

那么,让我们开始吧。

用于对象识别的深度学习

深度学习技术在各种与对象识别相关的问题上都表现出了最先进的水平。以下是一些常用的深度学习方法用于对象识别:

  1. ImageAI
  2. 单次检测器 (Single Shot Detectors)
  3. YOLO (You Only Look Once)
  4. 基于区域的卷积神经网络 (Region-based Convolutional Neural Networks)

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

理解 ImageAI 库

Python 提供了一个库,旨在通过几行简单的代码脚本,赋能程序员和开发者构建具有自包含深度学习和计算机视觉功能的应用程序和系统。ImageAI 包含了几乎所有最先进的深度学习算法的 Python 实现,例如 RetinaNet, YOLOv3TinyYOLOv3

ImageAI 使用多个 API,这些 API 可以离线工作——它具有对象检测、视频检测和对象跟踪 API,无需访问互联网即可调用。ImageAI 使用预训练模型,并且可以轻松定制。

ImageAI 库的 ObjectDetection 类包含用于通过预训练模型对任何图像或一组图像执行对象检测的方法。使用 ImageAI,我们可以检测和识别八十种不同类型的常见日常物品。

设置环境

在本教程的这一部分,我们将考虑安装所需的库,包括 ImageAI

为了使用 ImageAI,我们需要安装一些依赖项。第一步是在系统上安装 Python。我们可以从 Python 官方网站下载并安装 Python 3:https://pythonlang.cn/。

成功在系统上安装 Python 后,我们需要使用 pip 安装程序安装以下依赖项

  1. OpenCV
  2. TensorFlow
  3. Keras
  4. ImageAI

安装命令如下所示

语法

现在我们需要下载包含我们将用于对象识别的分类方法的 TinyYOLOv3 模型文件。

链接如下

https://github.com/Olafenwa Moses/ImageAI/releases/download/1.0/yolo-tiny.h5

使用 ImageAI 执行对象识别

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

步骤 1

第一步是创建必要的文件夹。在本教程中,我们需要以下文件夹:

  1. Object_Recognition: 这是根文件夹。
  2. Models: 此文件夹将存储预训练模型。
  3. Input: 此文件夹将存储需要执行对象检测的图像文件。
  4. Output: 此文件夹将存储带有已检测对象的图像文件。

创建必要的文件夹后,Object Recognition 文件夹应包含以下子文件夹

步骤 2

第二步,我们将打开首选文本编辑器,在本例中为 Visual Studio Code,编写一个 Python 脚本并创建一个名为 recognizer.py 的新文件。

步骤 3

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

文件:recognizer.py

步骤 4

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

文件:recognizer.py

步骤 5

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

文件:recognizer.py

步骤 6

一旦我们实例化了 ObjectDetection 类,我们就可以调用该类中的不同函数了。该类包含以下函数以调用预训练模型

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

在本教程中,我们将使用预训练的 TinyYOLOv3 模型,因此,我们将使用 setModelTypeAsTinyYOLOv3() 函数来加载模型。

让我们考虑以下代码片段

文件:recognizer.py

步骤 7

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

让我们考虑以下代码片段

文件:recognizer.py

步骤 8

在此步骤中,我们将使用我们之前创建的 recognizer 实例调用 loadModel() 函数。此函数将加载 setModelPath() 类方法指定的路径中的模型。

让我们考虑相同的以下代码片段。

文件:recognizer.py

步骤 9

我们必须使用之前创建的 recognizer 对象调用 detectObjectsFromImage() 函数。

此函数接受两个参数:input_imageoutput_image_pathinput_image 参数是待识别图像所在的位置,而 output_image_path 参数是存储带有已检测对象的图像的位置。此函数将返回一个字典,其中包含图像中检测到的每个对象的名称和百分比概率。

其语法如下所示

文件:recognizer.py

步骤 10

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

其语法如下所示

文件:recognizer.py

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

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

文件:recognizer.py

输出

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

原始图像

Object Recognition using Python

对象识别后的图像

Object Recognition using Python

最后,我们可以看到 ImageAI 已成功识别出图像中的汽车和人物。


下一主题Python VLC 模块