65.9K
CodeProject 正在变化。 阅读更多。
Home

边缘设备的实时 AI 人员检测:在树莓派上启动 SSD

2020年10月8日

CPOL

2分钟阅读

viewsIcon

8060

downloadIcon

54

在本文中,我们将了解如何在设备上安装 Python-OpenCV 并运行代码。

在本系列文章的上一篇中,我们编写了使用 SSD 模型检测图像中人员的 Python 代码。在本文中,我们将介绍在树莓派设备上安装 Python-OpenCV,然后了解如何在设备上启动我们的 Python 代码。

首先,下载并安装树莓派操作系统 - 树莓派设备系列的官方操作系统。我们使用了带有桌面和推荐软件的 Raspberry Pi OS (32 位)。可以使用磁盘镜像工具将操作系统安装到设备的 SD 卡上。对于我们的 Windows 桌面,我们使用了 Win32DiskImager。首次启动时,系统会要求更新所有预安装的系统包 - 我们建议您这样做。更新可能需要几分钟。

现在是时候在设备上安装 Python-OpenCV 了。为此有两种主要方法:在设备上编译 OpenCV 源代码,或在系统上安装现有的软件包。为了简单起见,我们使用了后者。幸运的是,树莓派上的 Python 包得到了很好的支持。在安装 OpenCV 库之前,我们需要安装一些先决条件,例如 HD5 和 Qt 包。之后,您需要设置一个虚拟环境以供进一步使用 OpenCV 包。我们安装了 virtualenvvirtualenvwrapper 工具,然后激活了一个名为 ‘cv’ 的虚拟环境。然后,我们在该环境中安装了 opencv-contrib-python 包。强烈建议使用此软件包,因为它包含所有必需的 OpenCV 模块。

现在我们可以使用虚拟环境在树莓派设备上启动我们在上一篇文章中开发的用于人员检测的 Python 代码。类与桌面应用程序相同。我们只需要更改 DNN 模型和图像位置的路径。这是为 Pi 3 设备修改后的代码

# testing SSD
proto_file = r"/home/pi/Desktop/PI_RPD/mobilenet.prototxt"
model_file = r"/home/pi/Desktop/PI_RPD/mobilenet.caffemodel"
ssd_net = CaffeModelLoader.load(proto_file, model_file)
print("Caffe model loaded from: "+model_file)
 
proc_frame_size = 300
# frame processor for MobileNet
ssd_proc = FrameProcessor(proc_frame_size, 1.0/127.5, 127.5)
person_class = 15
 
ssd = SSD(ssd_proc, ssd_net)
 
im_dir = r"/home/pi/Desktop/PI_RPD/test_images"
im_name = "woman_640x480_01.png"
im_path = os.path.join(im_dir, im_name)
image = cv2.imread(im_path)
print("Image read from: "+im_path)
 
obj_data = ssd.detect(image)
persons = ssd.get_objects(image, obj_data, person_class, 0.5)
person_count = len(persons)
print("Person count on the image: "+str(person_count))
Utils.draw_objects(persons, "PERSON", (0, 0, 255), image)
 
res_dir = r"/home/pi/Desktop/PI_RPD/results"
res_path = os.path.join(res_dir, im_name)
cv2.imwrite(res_path, image)
print("Result written to: "+res_path)

如果我们的代码位于单个 Python 文件中,例如 pi_rpd_run_img.pi3.py,我们可以使用两个后续命令从终端启动它

workon cv
python /home/pi/Desktop/PI_RPD/pi_rpd_run_img.pi3.py

这是终端响应的屏幕截图

如上图所示,代码在树莓派设备上的运行方式与在台式计算机上运行的方式相同。而且,正如预期的那样,它在测试图像中产生相同的人员检测结果

因此,我们已经证明我们可以使用 SSD 模型在树莓派设备上检测图像中的人员,其精度与在台式机或笔记本电脑上相同。区别在于速度。是的,边缘设备的性能可能是一个问题。

后续步骤

下一篇文章中,我们将测试 MibileNet 和 SqueezeNet 模型在树莓派设备上的准确性和性能。我们将选择更好的选项并将其用于在视频片段上进行进一步测试,然后以实时模式进行测试。

© . All rights reserved.