目标检测

材料

范例

在本范例中,我们将使用开发板通过板载摄像头传感器(JX-F37P)检测 80 种不同类型的目标,例如人、自行车、汽车、笔记本电脑等。

以下范例展示了目标检测和屏幕显示(On-Screen Display)的使用方式。两个范例的主要区别在于目标检测结果的处理位置。"ObjectDetectionCallback" 使用回调函数,而 "ObjectDetectionLoop" 在循环函数中处理结果。

  1. ObjectDetectionLoop

  2. ObjectDetectionCallback

File -> Examples -> AmebaNN -> ObjectDetectionLoop 中打开其中一个目标检测范例。

../../_images/image0113.png

在突出显示的代码片段中,将 "ssid" 填入您的 WiFi 网络 SSID,并将 "pass" 填入网络密码。

../../_images/image0213.png

使用 modelSelect() 函数选择神经网络(NN)任务和模型。该函数接受 4 个参数:神经网络任务、目标检测模型、人脸检测模型和人脸识别模型。如果所选神经网络任务不需要某些模型,请用 "NA_MODEL" 替换。请注意,在调用 begin() 函数之前,必须调用 modelSelect() 函数。

  • 有效的神经网络任务: OBJECT_DETECTIONFACE_DETECTIONFACE_RECOGNITION

  • 有效的目标检测模型:

    • YOLOv3-tiny 模型: DEFAULT_YOLOV3TINYCUSTOMIZED_YOLOV3TINY

    • YOLOv4-tiny 模型: DEFAULT_YOLOV4TINYCUSTOMIZED_YOLOV4TINY

    • YOLOv7-tiny 模型: DEFAULT_YOLOV7TINYCUSTOMIZED_YOLOV7TINY

  • 有效的人脸检测模型: DEFAULT_SCRFDCUSTOMIZED_SCRFD

  • 有效的人脸识别模型: DEFAULT_MOBILEFACENETCUSTOMIZED_MOBILEFACENET

如果您想使用自己的神经网络模型,请选择自定义选项(例如 CUSTOMIZED_YOLOV4TINY/ CUSTOMIZED_SCRFD/ CUSTOMIZED_MOBILEFACENET)。要了解 AI 模型转换的流程,请参考 AI 模型转换工具 。此外,请参考 AI 模型部署指南 了解如何安装和使用转换后的模型。

小技巧

请注意,对于从 PyTorch 训练的 Yolov7 目标检测模型,您需要额外执行一个重参数化步骤。Realtek 已在 Yolov7_reparam_scripts 文件夹(位于 ~/NeuralNetwork/Yolov7_reparam_scripts)中提供了两个脚本。

运行命令: python reparam_yolov7-tiny.py --weights weights/best.pt --custom_yaml custom/yolov7-tiny-deploy.yaml --output best_reparam.pt

您也可以参考 自定义 YOLOv7-tiny 模型重参数化指南 获取指导。

../../_images/image0312.png

编译代码并上传至 Ameba。按下重置按钮后,等待开发板连接到 WiFi 网络。开发板的 IP 地址和 RTSP 网络端口号将显示在串口监视器中。

检测到的目标结果可以使用 VLC 验证。您可以从 此处 下载 VLC 媒体播放器。

软件安装完成后,打开 VLC 媒体播放器,进入 Media -> Open Network Stream

../../_images/image048.png

请确保您的 PC 与开发板连接到同一网络以进行串流。由于使用 RTSP 作为串流协议,请在 VLC 媒体播放器中输入 rtsp://{IPaddress}:{port} 作为网络 URL,将 {IPaddress} 替换为开发板的 IP 地址,{port} 替换为串口监视器中显示的 RTSP 端口,例如 rtsp://192.168.1.154:554。默认 RTSP 端口号为 554。

../../_images/image058.png

接下来,单击"播放"开始 RTSP 串流以查看结果。摄像头的视频流将显示在 VLC 媒体播放器中。

包含目标名称和置信度分数的边界框将绘制在 RTSP 视频流上,以突出显示已识别的目标。

../../_images/image066.png

预训练模型总共可以识别 80 种不同类型的目标。目标可以在 ObjectClassList.h 中找到。每个目标的索引号是固定的,不应更改。要停用对某些目标的检测,请将筛选值设置为 0。例如,将筛选值设置为 0 以排除检测自行车。

../../_images/image075.png

代码参考

您可以根据 WiFi 网络质量调整视频比特率,取消注释以下突出显示的代码即可。

../../_images/image085.png