工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->综合电路图->综合电路图->如何在Jetson Nano上使用YOLOv8实时检测和计数空白空间

如何在Jetson Nano上使用YOLOv8实时检测和计数空白空间

发布人:amy2025 时间:2025-08-15 收藏

在Jetson nano优化的边缘AI上使用YOLOv8实时有效地检测和计数空白空间,以实现更智能的空间管理。

1. 概述

在停车场、零售货架和仓库中,有效地管理空置空间是一个共同的挑战。本项目演示了,提供了一个由边缘人工智能驱动的经济高效的解决方案。

YOLOv8(你只看一次,版本8)。是一种最先进的物体检测模型,以其速度和准确性而闻名。它能够快速准确地实时识别物体,使其成为空空间检测应用的理想选择。通过定制YOLOv8,我们可以训练模型专门识别Empty Space,增强其有效性。

Jetson Nano是NVIDIA开发的一款功能强大但价格实惠的边缘人工智能平台,是部署基于yolov8的空白空间探测系统的绝佳选择。其紧凑的尺寸、低功耗和强大的GPU功能使其非常适合在边缘运行复杂的人工智能模型。

2.硬件配置

3. 软件配置

4.准备数据集

下载具有所需格式的数据集,如下图所示。

该数据集组织良好,包括以JSON格式注释的图像,分为三类:训练(494张图像)、测试(74张图像)和有效(140张图像)。它具有三个类(available_1, available_2, available_3)。YAML文件和其他文本文件提供了配置设置和说明,以方便在机器学习工作流程中使用数据集。

5.训练模型

要培训YOLOv8或更高版本(因为YOLOv8是Ultralytics的产品),请参阅Ultralytics文档以获取详细说明。使用空白空间数据集自定义YOLOv8,如使用YOLOv8的实时空白空间检测和计数教程所示,涉及在针对您的应用程序量身定制的特定目标数据集上训练YOLOv8。

5.1. 配置培训环境:

使用提供的YAML文件配置训练参数。该文件将包括计算机上数据集的路径、类的数量和其他必要的设置。

一个示例YAML配置可能如下所示:

5.2. 训练模型

5.3. 空间建筑

下图说明了空空间检测架构。它包括通过冻结某些层的权重来微调预训练的YOLOv8模型,并将输出通过密集层进行坠落运动分类。

5.4.训练模型

6. 评估模型的性能

评估结果表明,平均精密度(mAP)为99%,精密度为99%,召回率为99%。这些图提供了我们的模型性能的可视化,说明了它在通过训练结果图和混淆矩阵检测跌倒方面的鲁棒性。

7.Hareware设置

8.推理

这段Python代码会进行推断,实时检测某个空间是空的还是可用的。

代码

import cv2

from ultralytics import YOLO

# Load the YOLOv8 model

model = YOLO(r'D:\My-Pretrained\empty_space.onnx')

cap = cv2.VideoCapture(0)

def count_available_spaces(results):

available_count = 0

for result in results:

for label in result.boxes.cls:

if model.names[int(label)] == "available_3":

available_count += 1

return available_count

# Loop through the video frames

while cap.isOpened():

# Read a frame from the video

success, frame = cap.read()

if success:

# Run YOLOv8 inference on the frame

results = model(frame)

# Count the available spaces

available_count = count_available_spaces(results)

# Visualize the results on the frame

annotated_frame = results[0].plot()

# Display the count of available spaces on the frame

cv2.putText(annotated_frame, f"Available Spaces: {available_count}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

# Display the annotated frame

cv2.imshow("YOLOv8 Inference", annotated_frame)

# Break the loop if 'q' is pressed

if cv2.waitKey(1) & 0xFF == ord("q"):

break

else:

# Break the loop if the end of the video is reached

break

# Release the video capture object and close the display window

cap.release()

cv2.destroyAllWindows()



评论

技术专区