使用OpenCV和ImageAI进行安全帽检测

在本文中,将探讨如何使用OpenCV和ImageAI这两个强大的库来训练人工智能,以检测工人是否佩戴了安全帽。这是一个重要的用例,因为许多公司必须确保工人拥有适当的安全设备。但将学到的知识远不止于此,它对于检测图像或视频流中的任何物体都非常有用。

安装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的需求选择库版本。

加载ImageAI和OpenCV

接下来,将切换到ImageAI环境,并使用pip安装OpenCV和ImageAI:

conda activateImageAI pip install opencv-python==4.1.2.30 imageai

使用的是ImageAI的最新版本2.1.5。如果这个版本发生变化,一些先决条件也可能发生变化。

安装额外的库

还需要安装一个额外的库——requests库,以便可以使用一些特定的HTML方法。使用以下命令进行安装:

pip install requests

设置笔记本

现在让在Jupyter中创建一个新的笔记本。打开Anaconda资源管理器,启动一个新的笔记本——将其命名为"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) – retrieves the web content at a specific URL .content – provides access to the raw content retrieved from the URL

很快就会使用类似的过程来获取检测模型的训练数据。

显示图像

现在已经下载了一个文件,让编写一些代码来使用OpenCV创建一个窗口,然后加载图像并在新窗口中显示它:

img = cv.imread('testimage.jpg') window_name = 'image' cv.imshow(window_name, img) cv.waitKey(0) cv.destroyAllWindows()

代码使用了许多与OpenCV库相关联的基本方法:

.imread – reads an image from a file .imshow – shows an image using an OpenCV window .waitKey – pauses until a keypress is detected .destroyAllWindows – closes any windows OpenCV created

现在运行代码,应该可以在新窗口中显示戴安全帽的人。按下任意键应该关闭窗口。将经常这样做,所以让清除这个测试,并改变代码,使用一个显示窗口函数,如下所示:

def showImage(img): window_name = 'image' cv.imshow(window_name, img) cv.waitKey(0) cv.destroyAllWindows()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485