此示例演示如何使用Raspberry Pi的MATLAB®支持包为图像分类算法生成和部署代码™ 硬件。该算法使用ResNet-50神经网络识别图像,该图像通过Raspberry Pi命令行作为输入传递。金宝app
当你生成预测代码时,Raspberry Pi支持包会在硬件上构建可执行文件。金宝app使用ResNet-50,可执行文件将图像分为1000个对象类别,如键盘、咖啡杯、铅笔和许多动物。可执行程序预测对象,并输出它的标签以及对象类别的相关概率。
注意:你不能使用macOS在树莓派硬件上生成和部署深度学习代码。
树莓派硬件(推荐型号4)
传输线
以太网电缆
显示器连接树莓派硬件和HDMI线(可选)
使用配置Raspberry Pi网络硬件设置屏幕上。在硬件设置过程中,确保下载用于深度学习的MathWorks®Raspbian图像。如果选择自定义硬件上的现有映像,请确保选择安装ARM计算库的选项,而不是MathWorks Raspbian映像。
提示:在开始这个示例之前,我们建议您完成入门MATLAB支持包树莓派硬件金宝app和从Raspberry Pi的命令行向MATLAB函数发送输入的例子。
将USB电缆的微型端连接到Raspberry Pi,将USB电缆的常规端连接到计算机。等待硬件上的PWR LED开始闪烁。
在MATLAB®命令窗口中,创建与Raspberry Pi硬件的连接。
r = raspi
r = raspi属性:DeviceAddress:“172.31.164.186”端口:18734 BoardName:覆盆子π模型B +的AvailableLEDs:{“led0”}AvailableDigitalPins:(4、5、6、12、13、14、15、16、17、18、19日,20日,21日,22日,23日,24日,25日,26日,27日]AvailableSPIChannels:{‘CE0’,‘CE1} AvailableI2CBuses:{“i2c-1”}AvailableWebcams: {} I2CBusSpeed: 100000支持的外设金宝app
在这个例子中raspi_fileRead_resnet
函数加载ResNet-50深度学习神经网络对输入图像进行分类。该函数使用OpenCV调整图像的大小,以适应网络预期的大小。然后,它将图像分类为对象类别,并输出对象预测的标签以及每个对象类别的概率。
有关该函数的更多信息,请在MATLAB命令窗口中输入此命令。
类型raspi_fileRead_resnet
函数raspi_fileRead_resnet(fileName)%#codegen%版权所有2020 MathWorks,Inc.断言(all(size(fileName)<=50));断言(isa(fileName,'char');%initializednn和输入大小net=coder.loadDeepLearningNetwork('resnet50');inputSize=[224224,3];%net.Layers(1).inputSize;%Read图像imgSizeAdjusted=readResizedImg(文件名,inputSize);%Classify输入图像[label,score]=net.Classify(imgSizedJusted);labelStr=cellstr(label);maxScore=max(score);outputStr=sprintf('label:%s\nScore:%f',labelStr{:},maxScore);%Print将标签和分数打印到标准输出fprintf('%s\n',outputStr);结束
属性可以修改函数编辑
命令
编辑raspi_fileRead_resnet
属性创建硬件配置对象靶材
函数。
板=目标硬件(“树莓π”);
验证设备地址
,用户名
,密码
输出中列出的属性。如果需要,请使用点符号语法更改属性值。例如,将设备地址更改为172.18.186.123
进来
董事会。DeviceAddress =“172.18.186.123”
设置CoderConfig。GenCodeOnly
属性的板对象真正的
.这使得支持包只在主机上生成和运行图金宝app像分类算法代码。
board.CoderConfig.TargetLang =“C++”;board.CoderConfig.GenCodeOnly = true;
创建一个arm计算机
深度学习配置对象。指定Raspberry Pi的体系结构。
dlcfg =编码器。DeepLearningConfig (“arm-compute”);dlcfg。ArmArchitecture =v7的;
执行此命令将显示Raspberry Pi上ARM计算库的版本。
r.system ($ ARM_COMPUTELIB / lib / libarm_compute的字符串。所以| grep arm_compute_versio | cut -d\ -f 1')
ans='arm\U计算版本=v20.02.1'
复制版本号并将其分配给ARM计算机版本
深度学习配置对象的属性。
dlcfg.ArmComputeVersion='20.02.1'
ArmComputeVersion: '20.02.1' ArmArchitecture: 'armv7' DataType: 'fp32' CalibrationResultFile: " TargetLib: 'arm-compute'
设置DeepLearningConfig
代码生成配置对象对深度学习配置对象的属性。
board.CoderConfig.DeepLearningConfig = dlcfg
board = targehardware with properties: Name: 'Raspberry Pi' DeviceAddress: '172.31.164.186'用户名:' Pi'密码:'*********' BuildDir: '/home/ Pi' EnableRunOnBoot: 0 BuildAction: 'Build, load, and run' CoderConfig: [1×1编码器。CodeConfig]
控件在硬件上部署该功能部署
函数。这个部署
函数开始生成raspi_fileRead_resnet
函数。一旦代码生成完成,MATLAB就会生成一个代码生成报告。使用此报告可调试函数,以查看生成代码中的任何错误和警告。
成功生成代码后,更新main.cpp
文件以接受命令行参数。
部署(董事会),“raspi_fileRead_resnet”)
代码生成成功:查看报告
本节介绍如何修改main.cpp
文件使用Raspberry Pi的命令行提供输入。预修改的main.cpp
文件可供您使用。您可以选择使用预修改的文件或使用本节中的步骤手动更新文件。
使用预先修改过的main.cpp
文件,在MATLAB命令窗口中输入命令。
拷贝文件(“main.cpp”(pwd“\codegen\exe\raspi\u fileRead\u resnet”])复制文件([pwd,“\ codegen \ exe \ raspi_fileRead_resnet \ \ main.h的例子],[pwd,“\codegen\exe\raspi\u fileRead\u resnet”])
要手动更新文件,请复制生成的文件main.cpp
和main.h
文件级别比文件层次结构中的当前级别高一个级别。打开main.cpp
来自生成的代码部分代码生成报告,并通过在代码中标记的点上添加代码来更新文件。
要在硬件上生成和部署代码,请设置CoderConfig。GenCodeOnly
财产的董事会
对象假
然后使用部署
函数。自部署
功能覆盖main.cpp
在上一节中编辑的文件中,在部署之前禁用文件的创建。
board.CoderConfig.CustomSource=[“codegen”,filesep,“exe”,filesep,“raspi_fileRead_resnet”,filesep,“main.cpp”];board.CoderConfig.GenerateExampleMain =“不生成”;board.CoderConfig.GenCodeOnly = false
board = targehardware with properties: Name: 'Raspberry Pi' DeviceAddress: '172.31.164.186'用户名:' Pi'密码:'*********' BuildDir: '/home/ Pi' EnableRunOnBoot: 0 BuildAction: 'Build, load, and run' CoderConfig: [1×1编码器。CodeConfig]
部署(董事会),“raspi_fileRead_resnet”)
正在部署代码。这可能需要几分钟。代码生成成功:查看报告
这个部署
函数开始生成raspi_fileRead_resnet
函数。
成功生成代码后,支持包将对象分类算法作为独立的可执行文件加载到硬件上。金宝app可执行文件的位置显示在MATLAB命令窗口中。注意位置,以便以后使用。
成功生成代码生成报告后,单击查看报告在MATLAB命令窗口.
上MATLAB编码器报告查看器窗口,建立日志选项卡,复制生成的elf的位置。
复制图像文件到硬件进行预测,使用putFile。
在这个例子中,coffeemug.png
是可执行文件的图像输入,可执行文件的位置与您在上一步中注意到的位置相同。
4.您可以提供您选择的输入图像,并使用以下语法将其复制到生成的elf的位置:
R.putfile ('','<从代码生成报告>中复制的生成elf的目标位置')
在这个例子中,coffeemug.png
是可执行文件的图像输入,可执行文件的位置为/home/pi/MATLAB_ws_R2021a / C /用户/文件/ MATLAB / / raspberrypiio-ex31623069例子
.
r.putFile(“coffeemug.png”、“/ home /π/ MATLAB_ws / R2021a / C /用户/文件/ MATLAB /例子/ raspberrypiio-ex31623069”)
要使用Raspberry Pi打开SSH终端,请在MATLAB命令窗口中使用此命令。
openShell(r)
在终端中输入树莓派的用户名和密码登录。
将当前目录更改为保存可执行文件的目录。
cd /home/pi/MATLAB_ws/R2021a/C/Users/Documents/MATLAB/Examples/raspberrypiio-ex31623069
在树莓派上运行可执行文件,提供coffee.png
映像作为可执行文件的输入。
sudo。/ raspi_fileRead_resnet。精灵coffeemug.png
可执行文件开始对图像文件中的对象进行分类,然后预测对象并显示其标签以及与对象类别关联的概率。