В этом примере показано, как классифицировать изображения от веб-камеры в режиме реального времени с помощью предварительно обученной глубокой сверточной нейронной сети GoogLeNet.
Используйте MATLAB®, простую веб-камеру и глубокую нейронную сеть, чтобы идентифицировать объекты в вашей среде. Этот пример использует GoogLeNet, предварительно обученную глубокую сверточную нейронную сеть (CNN или ConvNet), который был обучен на более чем миллионе изображений и может классифицировать изображения в 1 000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и многие животные). Можно загрузить GoogLeNet и использовать MATLAB для, постоянно обрабатывают изображения камеры в режиме реального времени.
GoogLeNet изучил богатые представления функции для широкого спектра изображений. Это берет изображение в качестве входа и обеспечивает метку для объекта в изображении и вероятностях для каждой из категорий объектов. Можно экспериментировать с объектами в среде, чтобы видеть, как точно GoogLeNet классифицирует изображения. Чтобы узнать больше о предметной классификации сети, можно показать музыку к лучшим пяти классам в режиме реального времени вместо только итогового решения класса.
Свяжите с камерой и загрузите предварительно обученную сеть GoogLeNet. Можно использовать любую предварительно обученную сеть на этом шаге. Пример требует Пакета Поддержки MATLAB для Веб-камер USB и Модели Deep Learning Toolbox™ для Сети GoogLeNet. Если у вас нет необходимых пакетов поддержки установленными, то программное обеспечение обеспечивает ссылку на загрузку.
camera = webcam; net = googlenet;
Если вы хотите запустить пример снова, первый показ команда clear camera
где camera
связь с веб-камерой. В противном случае вы видите ошибку, потому что вы не можете создать другую связь с той же веб-камерой.
Чтобы классифицировать изображение, необходимо изменить размер его к входному размеру сети. Получите первые два элемента InputSize
свойство изображения ввело слой сети. Входной слой изображений является первым слоем сети.
inputSize = net.Layers(1).InputSize(1:2)
inputSize = 224 224
Отобразите изображение от камеры с предсказанной меткой и ее вероятностью. Необходимо изменить размер изображения к входному размеру сети прежде, чем вызвать classify
.
figure im = snapshot(camera); image(im) im = imresize(im,inputSize); [label,score] = classify(net,im); title({char(label),num2str(max(score),2)});
Чтобы классифицировать изображения от камеры постоянно, включайте предыдущие шаги в цикле. Запустите цикл, в то время как фигура открыта. Чтобы остановить живое предсказание, просто закройте фигуру. Используйте drawnow
в конце каждой итерации, чтобы обновить фигуру.
h = figure; while ishandle(h) im = snapshot(camera); image(im) im = imresize(im,inputSize); [label,score] = classify(net,im); title({char(label), num2str(max(score),2)}); drawnow end
Предсказанные классы могут измениться быстро. Поэтому может быть полезно отобразить главные предсказания вместе. Можно отобразить лучшие пять предсказаний и их вероятности путем графического вывода классов с самыми высокими баллами предсказания.
Классифицируйте снимок состояния от камеры. Отобразите изображение от камеры с предсказанной меткой и ее вероятностью. Отобразите гистограмму вероятностей лучших пяти предсказаний при помощи score
выход classify
функция.
Создание Окна фигуры. Во-первых, измените размер окна, чтобы иметь дважды ширину и создать два подграфика.
h = figure; h.Position(3) = 2*h.Position(3); ax1 = subplot(1,2,1); ax2 = subplot(1,2,2);
В левом подграфике отобразите изображение и классификацию вместе.
im = snapshot(camera); image(ax1,im) im = imresize(im,inputSize); [label,score] = classify(net,im); title(ax1,{char(label),num2str(max(score),2)});
Выберите лучшие пять предсказаний путем выбора классов с самыми высокими баллами.
[~,idx] = sort(score,'descend');
idx = idx(5:-1:1);
classes = net.Layers(end).Classes;
classNamesTop = string(classes(idx));
scoreTop = score(idx);
Отобразите лучшие пять предсказаний как гистограмму.
barh(ax2,scoreTop) xlim(ax2,[0 1]) title(ax2,'Top 5') xlabel(ax2,'Probability') yticklabels(ax2,classNamesTop) ax2.YAxisLocation = 'right';
Чтобы классифицировать изображения от камеры постоянно и отобразить главные предсказания, включайте предыдущие шаги в цикле. Запустите цикл, в то время как фигура открыта. Чтобы остановить живое предсказание, просто закройте фигуру. Используйте drawnow
в конце каждой итерации, чтобы обновить фигуру.
Создание Окна фигуры. Сначала измените размер окна, чтобы иметь дважды ширину и создать два подграфика. Чтобы препятствовать тому, чтобы оси изменили размер, установите PositionConstraint
свойство к 'innerposition'
.
h = figure;
h.Position(3) = 2*h.Position(3);
ax1 = subplot(1,2,1);
ax2 = subplot(1,2,2);
ax2.PositionConstraint = 'innerposition';
Постоянно отображайте и классифицируйте изображения вместе с гистограммой лучших пяти предсказаний.
while ishandle(h) % Display and classify the image im = snapshot(camera); image(ax1,im) im = imresize(im,inputSize); [label,score] = classify(net,im); title(ax1,{char(label),num2str(max(score),2)}); % Select the top five predictions [~,idx] = sort(score,'descend'); idx = idx(5:-1:1); scoreTop = score(idx); classNamesTop = string(classes(idx)); % Plot the histogram barh(ax2,scoreTop) title(ax2,'Top 5') xlabel(ax2,'Probability') xlim(ax2,[0 1]) yticklabels(ax2,classNamesTop) ax2.YAxisLocation = 'right'; drawnow end