主要内容

使用深度学习对网络摄像头图像进行分类

这个例子展示了如何使用预训练的深度卷积神经网络GoogLeNet对网络摄像头中的图像进行实时分类。

使用MATLAB®、一个简单的网络摄像头和一个深度神经网络来识别周围的物体。本例使用GoogLeNet,这是一种经过预训练的深度卷积神经网络(CNN或ConvNet),已对100多万张图像进行了训练,可将图像分类为1000个对象类别(如键盘、咖啡杯、铅笔和许多动物)。您可以下载GoogLeNet并使用MATLAB连续实时处理相机图像。

GoogLeNet已经学习了大量图像的丰富特征表示。它将图像作为输入,并为图像中的对象和每个对象类别的概率提供标签。你可以在你周围的物体上进行实验,看看GoogLeNet对图像分类的准确程度。要了解更多有关网络对象分类的信息,您可以实时显示前五名班级的分数,而不仅仅是最后的班级决定。

加载摄像机和预训练网络

连接摄像头并加载一个预训练的GoogLeNet网络。在此步骤中,您可以使用任何预训练的网络。该示例需要USB网络摄像头的MATLAB支持包和深度学习工具箱™ 模型金宝app谷歌网. 如果未安装所需的支持软件包,则软件会提供下载链接。金宝app

摄像头=网络摄像头;净=googlenet;

如果您想再次运行示例,请先运行该命令清晰摄像头哪里相机就是网络摄像头的连接。否则,您将看到一个错误,因为您无法创建另一个连接到相同的网络摄像头。

从相机中对快照进行分类

要对图像进行分类,必须将其调整为网络的输入大小。获取InputSize网络图像输入层的属性。图像输入层是网络的第一层。

inputSize=net.Layers(1).inputSize(1:2)
输入大小=224 224

显示来自相机的图像与预测标签及其概率。在调用之前,必须将图像调整为网络的输入大小分类.

图im =快照(相机);image(im) im = imresize(im,inputSize);(标签,分数)=(净,im)进行分类;标题({char(标签),num2str (max(分数),2)});

连续分类图像从相机

要连续对来自摄影机的图像进行分类,请在循环中包含前面的步骤。在图形打开时运行循环。要停止实时预测,只需关闭数字。使用drawnow在每次迭代结束时更新图。

h =图;ishhandle (h) im =快照(相机);image(im) im = imresize(im,inputSize);(标签,分数)=(净,im)进行分类;标题({char(标签),num2str (max(分数),2)});drawnow终止

显示前预测

预测的类可以快速变化。因此,将顶部预测显示在一起可能会有所帮助。通过绘制预测得分最高的类,可以显示前五名预测及其概率。

对相机中的快照进行分类。显示带有预测标签及其概率的相机图像。使用分数的输出分类作用

创建图形窗口。首先,将窗口的宽度调整为原来的两倍,并创建两个子图。

h =图;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);

在左边的子图中,图像和分类一起显示。

im=快照(摄像头);图像(ax1,im)im=imresize(im,inputSize);[label,score]=分类(net,im);标题(ax1,{char(label),num2str(max(score),2)});

通过选择得分最高的班级,选择前五名预测。

[~, idx] =排序(得分,“下降”); idx=idx(5:-1:1);classes=净层(end).classes;classNamesTop=string(classes(idx));scoreTop=分数(idx);

以直方图的形式显示前5个预测。

barh(ax2,scoreTop)xlim(ax2,[01])title(ax2,“前五名”)xlabel(ax2,“概率”)yticklabels(ax2,classNamesTop)ax2.YAxisLocation=“对”

连续对图像进行分类并显示顶部预测

若要连续对来自摄影机的图像进行分类并显示顶部预测,请在循环中包含前面的步骤。在图形打开时运行循环。若要停止实时预测,只需关闭图形。使用drawnow在每次迭代结束时更新图。

创建图形窗口。首先调整窗口的大小,使其宽度为原来的两倍,并创建两个子图。若要防止轴调整大小,请设置位置约束财产“innerposition”.

h =图;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);ax2。PositionConstraint =“innerposition”

连续显示和分类图像与直方图的前5个预测。

ishandle (h)%显示和分类图像im=快照(摄像头);图像(ax1,im)im=imresize(im,inputSize);[label,score]=分类(net,im);标题(ax1,{char(label),num2str(max(score),2)});%选择前五个预测[~, idx] =排序(得分,“下降”);idx = idx (5: 1:1);scoreTop =分数(idx);classNamesTop =字符串(类(idx));绘制直方图barh(ax2,得分榜)头衔(ax2,“前五名”)xlabel(ax2,“概率”)xlim(ax2,[0 1])yticklabels(ax2,classNamesTop)ax2.YAxisLocation=“对”;drawnow终止

另见

||

相关的话题