主要内容

在树莓派硬件上使用ResNet-50识别实时视频中的对象

这个例子向您展示了如何通过使用MATLAB®树莓派硬件支持包部署图像分类算法来预测树莓派实时视频流中的对象。金宝app该算法使用ResNet-50神经网络来识别连接树莓派硬件的摄像头捕捉到的物体。

当您生成用于预测的代码时,Raspberry Pi支持包会在硬件上构建可执行文件。金宝app使用ResNet-50,可执行文件将图像分为1000个对象类别,如键盘、咖啡杯、铅笔和动物。然后可执行文件输出图像中对象的标签以及每个对象类别的概率。

你可以在树莓派的硬件上对周围的物体进行实验,看看ResNet-50对图像的分类有多精确。

注意:你不能使用macOS在树莓派硬件上生成和部署深度学习代码。

所需的硬件

  • 树莓派硬件(推荐型号4)

  • 一个金宝app受支持的USB摄像头或者一个树莓派相机模块

  • USB电缆

  • 以太网电缆

  • 显示器连接树莓派硬件和HDMI线(可选)

先决条件

配置树莓派网络硬件设置屏幕上。在此过程中,请确保下载用于深度学习的MathWorks Raspbian图像。如果选择自定义硬件上的现有映像,请确保选择安装ARM计算库的选项,而不是MathWorks Raspbian映像。

步骤1:连接树莓派硬件

提示:在开始这个示例之前,我们建议您完成入门MATLAB支持包树莓派硬件金宝app的例子。

将USB数据线的micro端连接树莓派,USB数据线的regular端连接电脑。等待硬件上PWR指示灯开始闪烁。

要将视频设备连接到硬件,请执行下列任一操作:

  • 如果你有摄像头,将摄像头连接到硬件上的USB端口。请注意,一些网络摄像头耗电太多,可能需要USB集线器供电。

  • 如果安装了树莓派摄像机模块,请使用CSI线缆将摄像机模块与硬件连接。摄像机模块与硬件的连接方法请参考厂商提供的操作手册。

在MATLAB命令窗口中,创建到树莓派硬件的连接。

r = raspi;

第二步:打开对象分类算法

本例使用ResNet-50网络使用ARM计算库显示图像分类,并在输出中返回预测得分。

有关该函数的更多信息,请在MATLAB命令窗口中输入此命令。

类型raspi_webcam_resnet
function raspi_webcam_resnet() %#codegen % Copyright 2020 The MathWorks, Inc. %Create raspi & webcam obj raspiObj = raspi();凸轮=摄像头(raspiObj, 1);%初始化DNN和输入大小net = code . loaddeeplearningnetwork ('resnet50');inputSize = [224, 224,3];% net.Layers .InputSize (1);%初始化文本显示textToDisplay = '......';%主循环启动= tic;fprintf('进入while循环。\n');while true %Capture image from webcam img = snapshot(cam);elapsedTime = toc(开始); %Process frames at 1 per second if elapsedTime > 1 %Resize the image imgSizeAdjusted = imresize(img,inputSize(1:2)); %Classify the input image [label,score] = net.classify(imgSizeAdjusted); maxScore = max(score); labelStr = cellstr(label); textToDisplay = sprintf('Label : %s \nScore : %f',labelStr{:},maxScore); start = tic; end %Display the predicted label img_label = insertText(img,[0,0],textToDisplay); displayImage(raspiObj,img_label); end end

属性可以修改函数编辑命令。

编辑raspi_webcam_resnet

步骤3:创建硬件配置对象

属性创建硬件配置对象targetHardware函数。

董事会= targetHardware (“树莓π”);

验证DeviceAddress用户名,密码输出中列出的属性。如果需要,可以使用点符号语法更改属性的值。例如,将设备地址修改为172.18.185.123,输入,

董事会。DeviceAddress =“172.18.185.123”

属性将生成代码的语言设置为c++TargetLang财产。

board.CoderConfig.TargetLang =“c++”
board = targehardware with properties: Name: 'Raspberry Pi' DeviceAddress: '172.18.182.234'用户名:' Pi'密码:'*********' BuildDir: '/home/ Pi' EnableRunOnBoot: 0 BuildAction: 'Build, load, and run' CoderConfig: [1×1编码器。CodeConfig]

创建一个arm-compute深度学习配置对象。指定树莓派的架构。

dlcfg =编码器。DeepLearningConfig (“arm-compute”);dlcfg。ArmArchitecture =v7的

在MATLAB命令窗口中执行此命令。该命令显示树莓派上ARM计算库的版本信息。

r.system ($ ARM_COMPUTELIB / lib / libarm_compute的字符串。所以| grep arm_compute_versio | cut -d\ -f 1'
Ans = 'arm_compute_version=v19.05 '

复制版本号并将其分配给ArmComputeVersion深度学习配置对象的属性。

dlcfg。ArmComputeVersion =“19.05”

设置DeepLearningConfig属性将代码生成配置对象转换为深度学习配置对象。

board.CoderConfig.DeepLearningConfig = dlcfg
board = targehardware with properties: Name: 'Raspberry Pi' DeviceAddress: '172.18.182.234'用户名:' Pi'密码:'*********' BuildDir: '/home/ Pi' EnableRunOnBoot: 0 BuildAction: 'Build, load, and run' CoderConfig: [1×1编码器。CodeConfig]

步骤4:硬件部署

属性将函数作为独立的可执行文件部署到硬件上部署函数。

部署(板、“raspi_webcam_resnet”
部署代码。这可能需要几分钟。/home/pi/ matlab_ws / r2020a / l / work /raspi_example/Examples/ raspberrypio -ex56701774警告:函数'raspi_webcam_resnet'不会由于无限循环而终止。Warning in ==> raspi_webcam_resnet Line: 42 Column: 1代码生成成功(with warnings):查看报告

部署函数开始生成raspi_webcam_resnet函数。一旦代码生成完成,MATLAB就会生成一个代码生成报告。使用此报告调试raspi_webcam_resnet函数用于生成代码中的任何构建错误和警告。

成功生成代码后,支持包将对象分类算法作为独立的可执行文件加载并在硬件上运行。金宝app可执行文件开始对获取的视频中的对象进行分类,并显示预测的标签及其相关概率。要查看树莓派屏幕,使用VNC查看器并在硬件上执行远程会话来获取显示。您也可以从显示器连接HDMI电缆到硬件。

另请参阅

基于树莓派的深度学习静态图像分类