在本教程系列的第一部分中,您将学习如何使用树莓派AI摄像头来检测不同的树莓派型号。本系列由David Plowman创建,他是树莓派工程师,专注于图像处理硬件、摄像头软件和算法研究。
您可以将AI摄像头对准树莓派4,屏幕上会显示“Raspberry Pi 4”;对准树莓派Zero时显示“Raspberry Pi Zero”,依此类推。
组装在树莓派5上的树莓派AI摄像头
这是一个强大的示例,展示如何训练树莓派进行实时目标检测推理。这也是探索树莓派AI摄像头API(应用程序接口)以及模型与推理之间关系的好方法。
设置AI摄像头
将您的树莓派 AI 相机连接到兼容的树莓派电脑。我们用的是树莓派5,但是AI相机兼容所有树莓派型号。更多信息可以阅读AI相机数据表。
树莓派AI相机采用索尼IMX500图像传感器,为相机应用提供低延迟、高性能的AI能力,而无需AI HAT+(或AI Kit)。它在IMX500传感器上运行定制的神经网络模型。
树莓派AI智能相机包含一个具有AI推理能力的索尼IMX500传感器
确保系统已更新,然后安装IMX500固件:
$sudo apt install imx500-all
此命令会:
安装操作IMX500传感器所需的固件文件imx500_loader.fpk和imx500_firmware.fpk
将多个神经网络模型文件放入/usr/share/imx500-models/
安装IMX500后处理软件到rpicam-apps
安装索尼网络模型打包工具
现在重启树莓派:
$sudo reboot
让我们来测试一下是否一切正常。以下命令运行带有对象检测后处理的rpicam-hello:
$rpicam-hello -t 0s --post-process-file/usr/share/rpi-camera-assets/imx500_mobilenet_ssd.json --viewfinder-width 1920 --viewfinder-height 1080 --framerate 30
以下命令运行rpicam-hello并进行姿态估计后处理:
$rpicam-hello -t 0s --post-process-file/usr/share/rpi-camera-assets/imx500_posenet.json --viewfinder-width 1920 --view
获取代码
现在你的AI相机设置好了,你需要代码。对于本教程,最好从从GitHub复制文件开始。在终端中,输入:
$gitclonehttps://github.com/davidplowman/pi_classifier.git
进入pi_classifier目录,查看一下里面的内容:
$cdpi_classifier$ls
进入pi_classifier目录,您将看到三个文件:
demo.py:Python主程序
labels.txt:包含不同树莓派型号的标签
network.rpk:预训练的神经网络模型文件(针对IMX500传感器优化)
运行代码:
$python demo.py
屏幕会显示摄像头预览窗口。将树莓派对准摄像头,预览窗口会根据labels.txt中的选项显示对应型号。
它是如何工作的
让我们在Thonny(或您选择的代码编辑器)中打开demo.py代码并查看一下:
$thonny demo.py
parse_and_draw_classification_result
这个函数是作为回调函数提供给相机系统的,这意味着每当一个新的帧从相机到达时,它就会被自动调用,而不需要我们(应用程序)做任何额外的事情。因为我们使用的是索尼IMX500传感器,所以我们不仅获得了通常的相机图像,还获得了一个输出张量,列出了对图像运行神经网络的结果。
我们需要使用 parse_classification_result 解析神经网络结果,然后使用 draw_classification_result 将它们绘制到相机图像上。
parse_classification_result
这将分析IMX500传感器产生的输出张量,并确定图像是否属于网络训练的类别之一。有几件事需要注意。
检测树莓派3
首先,并不总是有输出张量。如果神经网络加速器没有及时完成对帧的处理,就会发生这种情况。当这种情况发生时,我们应该重用前一帧的结果;另一个框架,张量再次可用,将很快出现!
接下来,我们返回具有最高置信度值的类别。一些网络可能会告诉我们,我们应该对输出值使用softmax运算,以获得每个类的更真实的概率。
draw_classification_result
这里,我们在摄像机图像上绘制一个标签,指示设备类别和置信度值,但前提是置信度值足够高。
我们使用Picamera2的MappedArray以通常的方式访问实际的相机图像像素(而不是它的副本)。我们测量类别标签和置信度值将占据的框的大小,然后将图像的这一部分变暗,以便当我们随后将文本写在顶部时,它会更突出。
检测树莓派Zero
if __name__ == “__main__”
这部分代码只涉及配置IMX500、上传神经网络固件文件(network.rpk)以及让摄像机运行。有几件事需要指出:
1.我们首先创建IMX500相机辅助对象。这将为我们上传网络,并告诉我们IMX500是哪个摄像头。
2.NetworkIntrinsics对象是网络的助手,它会推荐我们可以使用的合适的帧速率,该帧速率应该与IMX500上的网络推断速率相匹配。
3.在启动相机之前,我们应该告诉IMX500助手,我们希望看到网络上传的进度条——否则很容易认为它可能卡住了!回想一下,网络固件在后续情况下上传更快,因为更多的固件块已经缓存在设备中。
4.最后,我们让脚本永远运行,所有的相机处理都在后台线程中进行。
下载树莓派分类器的完整demo.py代码。
https://github.com/themagpimag/rpimag-issue154/blob/master/pi_classifier/demo.py
原文地址:
https://www.raspberrypi.com/news/build-a-raspberry-pi-classifier-detect-different-raspberry-pi-models/
-
分类器
+关注
关注
0文章
153浏览量
13464 -
树莓派
+关注
关注
122文章
2031浏览量
107664
发布评论请先 登录
树莓派的种类_树莓派安装教程
树莓派3wifi配置_树莓派3开启wifi热点_树莓派3的wifi使用教程
树莓派3硬件配置_树莓派3都能装什么系统_树莓派3系统安装教程
树莓派用什么语言编程_树莓派python编程详解
浅谈香蕉派与树莓派的不同
树莓派控制步进电机

评论