主要内容

在树莓派硬件上部署边缘检测算法

本示例向您展示如何使用MATLAB®支持包在树莓派硬件上部署边缘检测函数作为独立的可执行文件。万博1manbetx在本例中,您将学习如何从连接到树莓派硬件的网络摄像头获取实时图像,对获取的图像运行边缘检测功能,并在连接到同一树莓派硬件的监视器上显示结果。

您还可以从MATLAB®Online™部署边缘检测功能。看到在MATLAB中在线连接树莓派硬件板将树莓派硬件连接到MATLAB Online,并部署MATLAB函数。

有关此示例的简要概述,请参见在树莓派硬件上部署边缘检测算法视频。

先决条件

在你开始这个例子之前,我们建议你完成这些例子:

所需的产品s manbetx 845

  • 树莓派硬件。在MATLAB®Online™上工作时,确保硬件连接到互联网。

  • 一个万博1manbetx受支持的USB摄像头或者一个树莓派相机模块

  • 连接到树莓派硬件的显示器

  • MATLAB编码器许可证

步骤1:在存储的图像上创建并运行边缘检测算法

1.复制edgeDetection函数并粘贴到MATLAB编辑器中。函数实现了一个算法来读取peppers.png从计算机文件中,应用边缘检测算法对peppers.png,并将结果显示为MATLAB图。该算法由一个3 × 3的Sobel算子组成,该算子应用于水平和垂直方向的图像,然后针对一个常数值设置阈值。

定义用于边缘检测的卷积核kern = [1 2 1;0 0 0;-2 -1];%从文件中读取图像并应用img = imread('pepper .png');H = conv2(img(:,:,2),kern,'same');V = conv2(img(:,:,2),kern','same');E =根号下(h。*h + v *v);edgeImg = uint8((e > 100) * 240);imshow (edgeImg); end

2.将函数保存为edgeDetection.m到具有写访问权限的文件夹。

3.运行edgeDetection函数通过使用MATLAB命令窗口中的run命令。运行该函数时,MATLAB开始执行边缘检测算法peppers.png文件存储在您的计算机。

运行edgeDetection

步骤2:修改边缘检测算法,使用来自硬件的Live Image

在部署之前,运行edgeDetection推荐使用硬件的实时输入输出(IO)来实现功能。

使用live IO可以:

  • 验证MATLAB函数是否与预期的硬件通信。

  • 检测在部署期间很难诊断的运行时错误,例如外设冲突。

1.要使用实时IO,必须修改该功能以使用连接到硬件的网络摄像头捕获实时图像。

function edgeDetection() %创建到树莓派硬件的连接r =树莓派;
%创建连接到树莓派相机模块,捕获实时%图像,然后显示图像w = webcam(r);
%定义用于边缘检测的卷积核kern = [1 2 1;0 0 0;-2 -1];%对树莓派摄像头模块捕获的图像运行边缘检测算法。对于k = 1:1000 img =快照(w);H = conv2(img(:,:,2),kern,'same');V = conv2(img(:,:,2),kern','same');E =根号下(h。*h + v *v);edgeImg = uint8((e > 100) * 240); imshow(edgeImg); end end

2.运行edgeDetection函数通过使用MATLAB命令窗口中的run命令。当您运行该函数时,MATLAB连接到硬件,并开始对连接到硬件的网络摄像头捕获的图像执行边缘检测算法。

运行edgeDetection

4.观察输出并微调边缘检测阈值,以适应相机和环境的特性,如果需要的话。

步骤3:将编译指令添加到MATLAB函数中

添加% # codegen指令(或pragma)edgeDetection函数签名,表示您打算在硬件上部署该函数。添加此指令将指导MATLAB代码分析器帮助您诊断和修复在部署过程中可能导致错误的违规行为。

函数edgeDetection() %#代码源

步骤4:准备部署边缘检测函数

1.检查edgeDetection函数使用代码分析器检查任何错误和警告,请遵循中的步骤使用代码分析器检查MATLAB函数并在进行下一步之前修复它们。

在本例中,指示器的绿色表示MATLAB函数没有错误或警告。

2.调试edgeDetection函数并将所有不受支持的调用替换为代码生成支持的调用。万博1manbetx

在本例中,图像代码生成不支持第18行使用的函数。万博1manbetx部署edgeDetection函数如果没有任何修改,将导致可执行文件不能像预期的那样运行。

若要修复此不支持的函数调用错万博1manbetx误,请替换图像使用代码生成支持的等效调用。万博1manbetx的功能图像通过使用displayImage树莓派硬件的MATLAB支持包提供的函数。万博1manbetx

function edgeDetection() %#codegen %创建到树莓派硬件的连接r =树莓派;
%创建连接到树莓派相机模块,捕获实时%图像,然后显示图像w = webcam(r);
%定义用于边缘检测的卷积核kern = [1 2 1;0 0 0;-2 -1];%对树莓派摄像头模块捕获的图像运行边缘检测算法。对于k = 1:1000 img =快照(w);H = conv2(img(:,:,2),kern,'same');V = conv2(img(:,:,2),kern','same');E =根号下(h。*h + v *v);edgeImg = uint8((e > 100) * 240); displayImage(r,edgeImg,'Title','Edge Detection'); end end

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

1.属性创建硬件配置对象targetHardware函数在MATLAB命令窗口。

board = targetHardware('Raspberry Pi')
董事会=
带有属性的targetHardware:
名称:树莓派DeviceAddress:“192.168.1.2”用户名:“Pi”密码:“*********”BuildDir:“/home/ Pi”BuildAction:“构建,加载和运行”

请注意:您可以从MATLAB®Online™部署边缘检测算法。看到在MATLAB中在线连接树莓派硬件板对于这些步骤。

创建硬件配置对象

board = targetHardware('Raspberry Pi')
董事会=
带有属性的targetHardware:
名称:“树莓派”DeviceAddress:“00000000a9f2c18c”用户名:“密码:”BuildDir:“/home/matlabrpi”EnableRunOnBoot: 0 BuildAction:“构建,加载和运行”CoderConfig: [1x1编码器。CodeConfig]

In MATLAB Online™DeviceAddressSerialNumber显示的硬件的raspilist

2.验证DeviceAddress用户名,密码输出中列出的属性。如果需要,可以使用点符号语法更改属性的值。

例如,将设备地址更改为173.21.22.327,输入:

董事会。DeviceAddress = '173.21.22.327'

步骤6:在硬件上部署MATLAB函数

方法将MATLAB函数部署为硬件上的独立可执行文件部署函数。

部署(板、“edgeDetection”)
代码生成成功:查看报告

部署函数的代码生成edgeDetection函数。代码生成结束后,MATLAB生成代码生成报告。使用此报告调试edgeDetection函数用于生成代码中的任何构建错误和警告。

在成功生成代码之后,支持包将加载代码并在硬件上作为独立的可执行文件运行。万博1manbetx可执行文件开始从网络摄像头获取实时图像,在获取的图像上运行边缘检测算法,然后在监视器上显示结果。

另请参阅