为对象检测安装 OpenCV 和 ImageAI
在本文中,我们将设置好使用 OpenCV 构建硬质安全帽检测器所需的一切。
在本系列文章中,我们将学习如何使用 Python、OpenCV(一个开源计算机视觉库)和 ImageAI(一个用于视觉的深度学习库)来训练 AI,以检测工人是否佩戴了硬质安全帽。在此过程中,我们将创建一个可用于现实生活的端到端解决方案——这不仅仅是一项学术练习!
这是一个重要的用例,因为许多公司必须确保工人拥有适当的安全设备。但我们学到的东西不仅仅限于检测硬质安全帽。在系列文章结束时,您将能够使用 AI 检测图像或视频流中的几乎任何类型的对象。
您目前正在阅读第 1 篇,共 6 篇
- 为对象检测安装 OpenCV 和 ImageAI
- 为 OpenCV 和 ImageAI 对象检测查找训练数据
- 使用预训练模型通过OpenCV和ImageAI检测对象
- 为使用 OpenCV 和 ImageAI 的对象检测准备图像
- 使用OpenCV和ImageAI训练自定义模型
- 使用OpenCV和ImageAI检测自定义模型对象
1. 安装 OpenCV 和 ImageAI 用于对象检测
在开始使用计算机视觉来改善工作场所安全之前,我们需要安装必要的工具:OpenCV 和 ImageAI。
OpenCV 是一个开源计算机视觉库,提供 C++、Python、Java 和 MATLAB 接口。ImageAI 是一个机器学习库,可以简化 AI 训练和图像中的对象检测。这两个库可以极大地简化图像和视频中许多对象检测问题的解决方案。我们将直接开始我们的解决方案,使用 Python 在 Jupyter Notebook(在 Windows 上)中设置这些库。
设置计算机视觉开发环境
我将假设您已经安装了 Anaconda Python 数据科学平台(您可以在此处获取个人版)并使用基本的默认设置进行了配置。
为了创建 Jupyter Notebook 来开始编写我们的检测器,我们必须使用 Anaconda 安装特定版本的 OpenCV、Tensorflow、Keras 和 ImageAI。从开始菜单中找到并运行 Anaconda 命令提示符,然后输入以下命令:
conda create -n ImageAI -c anaconda keras=2.3.1 tensorflow=1.15.0 tensorflow-gpu=1.15.0 jupyter
第一个命令将 Keras、TensorFlow(CPU 和 GPU 版本)、Jupyter 以及所有必需的组件安装到一个虚拟环境中。我们选择库版本是基于 ImageAI 的需求。
使用虚拟环境可以使这些依赖项保持独立,从而不会影响您的全局 Python 环境。
加载 ImageAI 和 OpenCV
接下来,我们将切换到 ImageAI 环境,并使用 `pip` 命令通过以下命令安装 OpenCV 和 ImageAI:
conda activate ImageAI
pip install opencv-python==4.1.2.30 imageai
我们使用的是最新版本的 ImageAI,2.1.5。如果此版本发生变化,一些必需的组件也可能随之改变。
我们还需要安装另一个项目——`requests` 库——以便使用一些特定的 HTML 方法。请使用以下命令进行安装:
pip install requests
设置我们的 Notebook
现在让我们在 Jupyter 中创建一个新的 Notebook。打开 Anaconda Explorer,启动一个新的 Notebook——我将其命名为“Hard-Hat-Detector”——并将以下代码块添加到初始化我们的库中:
import cv2 as cv
from imageai.Detection import ObjectDetection as od
import numpy as np
import requests as req
import os as os
这里的两个关键导入是 OpenCV(在 `cv` 变量中)和 ImageAI 的检测组件(在 `od` 变量中)。其他三个库是通用的 Python 特定库:numpy 用于处理大型数组和矩阵;`requests` 允许您处理 HTTP 请求;os 用于处理与操作系统相关的函数。
测试 OpenCV
现在让我们进行测试,以确保我们可以使用 OpenCV 库。首先,我们来获取一张戴着硬质安全帽的人的随机图片进行数据获取测试:
url = 'https://p7.hiclipart.com/preview/124/937/193/architectural-engineering-engineer.jpg'
r = req.get(url)
with open('testimage.jpg', 'wb') as outfile:
outfile.write(r.content)
这段代码使用 `requests` 库从 hiclipart.com 获取图片,并将其保存为 Jupyter Notebook 目录下的一个文件。它使用了 `requests` 库的两个方法:
- `.get(url)` – 在特定 URL 处检索网页内容
- `.content` – 提供对从 URL 检索到的原始内容的访问
稍后,我们将使用类似的过程来获取用于训练我们检测模型的训练数据。
现在我们已经下载了文件,让我们编写一些代码来使用 OpenCV 创建一个窗口,然后加载该图像并在新窗口中显示它:
img = cv.imread('testimage.jpg') window_name = 'image' cv.imshow(window_name, img) cv.waitKey(0) cv.destroyAllWindows()
我们的代码使用 OpenCV 库的一些基本方法:
- `.imread` – 从文件中读取图像
- `.imshow` – 使用 OpenCV 窗口显示图像
- `.waitKey` – 暂停直到检测到按键
- `.destroyAllWindows` – 关闭 OpenCV 创建的任何窗口
现在运行我们的代码,戴着硬质安全帽的人应该会显示在一个新窗口中。按下任意键将关闭窗口。我们将需要频繁执行此操作,因此让我们清除这些测试代码,并将我们的代码更改为使用一个显示窗口函数,如下所示:
def showImage(img): window_name = 'image' cv.imshow(window_name, img) cv.waitKey(0) cv.destroyAllWindows()
这样,我们就可以通过将图像传递给 `showImage` 函数来随时显示图像。
接下来
至此,我们已经设置好了使用 OpenCV 构建硬质安全帽检测器所需的一切。
接下来,我们将看看如何找到用于训练和使用我们 AI 模型的数据集。