主要内容

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

此示例显示如何使用预先训练的深卷积神经网络Googlenet实时对网络摄像头进行分类图像。

使用MATLAB®,简单的网络摄像头和深度神经网络来识别周围环境中的对象。此示例使用Googlenet,这是一百万个图像培训的预制深卷积神经网络(CNN或ConvNet),可以将图像分类为1000个对象类别(例如键盘,咖啡杯,铅笔和许多动物)。您可以下载Googlenet并使用MATLAB实时连续处理摄像机图像。

Googlenet已经了解了丰富的特征表示,有各种图像。它将图像作为输入,为图像中的对象提供标签以及每个对象类别的概率。您可以在周围环境中进行实验,以查看Googlenet如何准确分类图像。要了解有关网络对象分类的更多信息,您可以实时显示前五个类的分数,而不是仅仅是最终的类决策。

加载相机和预磨平网络

连接到相机并加载预制Googlenet网络。您可以在此步骤中使用任何预磨损网络。该示例需要MATLAB支持包为USB网络摄像头,深度学习金宝app工具箱™模型对于Googlenet网络。如果您没有安装所需的支持包,则软件提供了下载链接。金宝app

Camera =网络摄像头;net = googlenet;

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

将快照分类为摄像头

要对图像进行分类,必须将其调整为网络的输入大小。得到前两个要素输入网络的图像输入层的属性。图像输入层是网络的第一层。

InputSize = Net.Layers(1).Inputsize(1:2)
InputSize = 224 224

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

图IM =快照(相机);图像(IM)IM = IMResize(IM,InputSize);[标签,得分] =分类(网络,IM);标题({char(标签),num2str(max(得分),2)});

连续对相机进行分类图像

要持续地将图像分类,请在循环中包含先前的步骤。在图形打开时运行循环。为了停止实时预测,只需关闭数字即可。用drawn在每次迭代结束时更新图。

h =图;尽管Ishandle(h)im =快照(相机);图像(IM)IM = IMResize(IM,InputSize);[标签,得分] =分类(网络,IM);标题({char(标签),num2str(max(得分),2)});drawn结尾

展示最重要的预测

预测的类可以快速改变。因此,将顶部预测一起显示在一起可以有助于。您可以通过绘制具有最高预测分数的类来显示前五个预测及其概率。

从相机上分类快照。使用预测标签及其概率从相机显示图像。显示前五个预测的概率的直方图分数输出分类功能。

创建图形窗口。首先,调整窗口的大小宽度,并创建两个子图。

h =图;H.Position(3)= 2 * H.Position(3);AX1 =子图(1,2,1);AX2 =子图(1,2,2);

在左侧子图中,将图像和分类一起显示在一起。

IM =快照(相机);图像(AX1,IM)IM = IMRESIZE(IM,INPUTSIZE);[标签,得分] =分类(网络,IM);标题(Ax1,{char(标签),num2str(max(得分),2)});

通过选择具有最高分的类来选择前五个预测。

[〜,IDX] =排序(得分,“下降”);IDX = IDX(5:-1:1);classes = net.layers(结束).classes;classnamestop = string(类(idx));scoretop =得分(Idx);

将前五个预测显示为直方图。

Barh(Ax2,Scoretop)XLIM(AX2,[0 1])标题(AX2,'前5')Xlabel(AX2,'可能性')YTicklabels(AX2,ClassNamestop)Ax2.yaxisLocation ='正确的';

不断对图像进行分类并显示最佳预测

要连续地将图像从相机分类并显示顶部预测,请包括循环内部的上一步。在图形打开时运行循环。为了停止实时预测,只需关闭数字即可。用drawn在每次迭代结束时更新图。

创建图形窗口。首先调整窗口的大小,宽度两倍,并创建两个子图。防止轴调整大小,设置位置混合物财产'InnerPosition'

h =图;H.Position(3)= 2 * H.Position(3);AX1 =子图(1,2,1);AX2 =子图(1,2,2);Ax2.PositionConstraint =.'InnerPosition';

连续显示和分类图像以及前五个预测的直方图。

尽管ishandle(h)%显示并分类图像IM =快照(相机);图像(AX1,IM)IM = IMRESIZE(IM,INPUTSIZE);[标签,得分] =分类(网络,IM);标题(Ax1,{char(标签),num2str(max(得分),2)});%选择前五个预测[〜,IDX] =排序(得分,“下降”);IDX = IDX(5:-1:1);scoretop =得分(Idx);classnamestop = string(类(idx));%绘制直方图Barh(Ax2,Scoretop)标题(AX2,'前5')Xlabel(AX2,'可能性')XLIM(AX2,[0 1])YTicklabels(AX2,ClassNamestop)AX2.yaxisLocation ='正确的';drawn结尾

也可以看看

||

相关话题