在许多行业中,确保工人佩戴适当的安全设备是至关重要的。本文将介绍如何使用OpenCV和ImageAI这两个核心库来训练人工智能模型,以检测工人是否佩戴了安全帽。通过本教程,将学会如何使用预训练的模型以及如何开发自己的定制模型。
在开始之前,需要安装OpenCV和ImageAI库。这些库将帮助构建一个端到端的解决方案,用于检测图像或视频流中的任何对象。
为了训练模型,需要收集一组训练数据。这些数据将用于训练模型以识别安全帽。
OpenCV和ImageAI提供了一些预训练的模型,这些模型可以直接用于检测图像中的对象。
在训练模型之前,需要对图像进行预处理。这包括调整图像大小、归一化等步骤。
使用收集的训练数据,可以训练一个自定义的模型来检测安全帽。
现在已经有一个训练好的模型,可以定义一些新的代码块来使用它。首先,需要定义自定义检测模型。
from imageai.Detection.Custom import CustomObjectDetection
detector = CustomObjectDetection()
detector.setModelTypeAsYOLOv3()
detector.setModelPath("hardhat/models/detection_model-ex-020--loss-0008.462.h5")
detector.setJsonPath("hardhat/json/detection_config.json")
detector.loadModel()
这段代码块与之前使用的预训练模型检测器类似,但为配置定义了模型路径和JSON路径。这允许ImageAI从配置文件中导入对象名称。接下来,复制之前用于检测图像中人物的代码块,并稍作修改以检测验证图像中的人物:
import random
peopleImages = os.listdir("people")
randomFile = peopleImages[random.randint(0, len(peopleImages) - 1)]
detectedImage, detections = detector.detectObjectsFromImage(output_type="array", input_image="people/{0}".format(randomFile), minimum_percentage_probability=30)
convertedImage = cv.cvtColor(detectedImage, cv.COLOR_RGB2BGR)
showImage(convertedImage)
for eachObject in detections:
print(eachObject["name"], ": ", eachObject["percentage_probability"], ": ", eachObject["box_points"])
print("-------------------------------")
如果现在运行这两个代码块并查看结果图像,将看到即使只有20次迭代,模型也做得相当不错。如果多次运行随机图像代码块,将看到几乎所有戴安全帽的人物都被检测到了。
通过利用OpenCV和ImageAI这两个核心库,能够使用预训练的对象检测模型,并开发自己的定制模型来检测人们是否佩戴安全帽。
person_detector = ObjectDetection()
person_detector.setModelTypeAsYOLOv3()
person_detector.setModelPath('yolo.h5')
person_detector.loadModel()
hard_hat_detector = CustomObjectDetection()
hard_hat_detector.setModelTypeAsYOLOv3()
hard_hat_detector.setModelPath("hardhat/models/detection_model-ex-020--loss-0008.462.h5")
hard_hat_detector.setJsonPath("hardhat/json/detection_config.json")
hard_hat_detector.loadModel()
在这里,创建了两个检测器:一个用于检测所有人,一个用于检测戴安全帽的人。接下来,让加载一张随机图像并通过这两个检测器运行它:
peopleImages = os.listdir("people")
randomFile = peopleImages[random.randint(0, len(peopleImages) - 1)]
peopleOnly = person_detector.CustomObjects(person=True)
_, person_detections = detector.detectCustomObjectsFromImage(custom_objects=peopleOnly, output_type="array", input_image="people/{0}".format(randomFile), minimum_percentage_probability=30)
_, hard_hat_detections = detector.detectObjectsFromImage(output_type="array", input_image="people/{0}".format(randomFile), minimum_percentage_probability=30)
最后,将比较每张图像中的检测数量,以查看是否发现了未佩戴安全帽的人:
if len(person_detections) > len(hard_hat_detections):
print("安全帽违规检测到!已派遣警察!")
# 或者只是通过电子邮件通知老板违规情况
通过这种方式,成功地创建了一个工作的安全帽检测器。
安全帽检测程序相当简单,但可以通过以下方式扩展它:
Google Colab目前提供免费的GPU支持笔记本实例。
Paperspace Gradient提供免费的GPU支持Jupyter笔记本实例。
Azure Notebooks是另一个不错的选择,但可能需要付费才能使用GPU,除非有Azure积分。
ImageAI还提供了一些其他选项,可以提高模型的可用性: