Hi, I am trying to put annotate my object in an image but I am having errors.

2 次查看(过去 30 天)
I am trying to put a rectangle on the object that is being classified. I am using insertObjectAnnotation however I am receiving some errors. My code is as followed:
clear
net = googlenet; % Load the neural net
net.Layers
% while true
labelType =''
[file,path]=uigetfile({'*.jpg;*.jpeg;*.bmp;*.png;*.tif'},'Choose an image');
s=[path,file];
I=imread(s);
% I = imread('car1.jpeg');
sz = net.Layers(1).InputSize ;
inputSize = net.Layers(1).InputSize
size(I)
I = imresize(I,inputSize(1:2));
imshow(I)
hold on
movegui(imshow(I),[500,490]);
[label, score] = classify(net, I); % Classify the picture
% label = classify(net, I); % Classify the picture
if (label == 'convertible')
labelType = 'Vehicle Recognised'
elseif (label == 'moped')
labelType = 'Vehicle Recognised'
elseif (label == 'tank')
labelType = 'Vehicle Recognised'
elseif (label == 'sports car')
labelType = 'Vehicle Recognised'
elseif (label == 'moving van')
labelType = 'Vehicle Recognised'
elseif (label == 'trailer truck')
labelType = 'Vehicle Recognised'
elseif (label == 'garbage truck')
labelType = 'Vehicle Recognised'
elseif (label == 'trailer truck')
labelType = 'Vehicle Recognised'
elseif (label == 'minivan')
labelType = 'Vehicle Recognised'
elseif (label == 'beach wagon')
labelType = 'Vehicle Recognised'
elseif (label == 'ambulance')
labelType = 'Vehicle Recognised'
elseif (label =='cab')
labelType = 'Vehicle recognised';
else
labelType = 'No Vehicle Recognised'
end
label_str = cell(3,1);
conf_val = [85.212 98.76 78.342];
for ii=1:3
label_str{ii} = ['Confidence: ' num2str(conf_val(ii),'%0.2f') '%'];
end
position = [23 373 60 66;35 185 77 81;77 107 59 26];
PositionWhereRectangleShouldBe = [100 100 50 50];
I = insertObjectAnnotation(I, 'rectangle', PositionWhereRectangleShouldBe, label_str, score);
figure
imshow(I);
% imshow(I); % Show the picture
% message = strcat(labelType,'-', char(label))
title({char(message),num2str((score),3)}); % Show the label
title(char(message)); % Show the label
I=imread(s);
BW = im2bw(I,0.2);
se = strel('rectangle', [2 20]);
BW_opened = imclose(BW,se);
% figure, imshow(BW_opened,[])
s=regionprops(BW_opened,'Area','BoundingBox');
[hh,ii] = sort([s.Area],'descend');
out = imcrop(I,s(ii(2)).BoundingBox);
figure,imshow(out);
movegui(imshow(out),[300,400]);
out_path = 'C:\Users\Student\Desktop\Vehicle number plate recognition\test images'; % Give path here
fullFileName = fullfile(out_path, 'test_image.jpg');
imwrite(out, fullFileName);
load imgfildata;
picture=imread(fullFileName);
[~,cc]=size(picture);
picture=imresize(picture,[300 500]);
if size(picture,3)==3
picture=rgb2gray(picture);
end
se=strel('rectangle',[5,5]);
a=imerode(picture,se);
figure,imshow(a);
movegui(imshow(a),[800,350]);
b=imdilate(a,se);
threshold = graythresh(picture);
picture =~im2bw(picture,threshold);
percentageBlack = (1-nnz(picture)/numel(picture))*100
picture = bwareaopen(picture,50);
if (percentageBlack < 50)
picture = imcomplement(picture);
end
[L,Ne]=bwlabel(picture);
propied=regionprops(L,'BoundingBox');
hold on
pause(1)
for n=1:size(propied,1)
rectangle('Position',propied(n).BoundingBox,'EdgeColor','g','LineWidth',1)
end
hold off
% figure
final_output=[];
t=[];
for n=1:Ne
[r,c] = find(L==n);
n1=picture(min(r):max(r),min(c):max(c));
n1=imresize(n1,[42,24]);
% imshow(n1)
pause(0.2)
x=[ ];
totalLetters=size(imgfile,2);
for k=1:totalLetters
y=corr2(imgfile{1,k},n1);
x=[x y];
end
t=[t max(x)];
if max(x)>.45
z=find(x==max(x));
out=cell2mat(imgfile(2,z));
final_output=[final_output out];
end
end
file = fopen('number_Plate.txt', 'wt');
fprintf(file,'%s\n',final_output);
fclose(file);
winopen('number_Plate.txt')
drawnow;
%end
but I am having an error of:
_Error using insertObjectAnnotation
Expected a string scalar or character vector for the parameter name.
Error in insertObjectAnnotation
Error in insertObjectAnnotation
Error in insertObjectAnnotation
Error in GoogleNet (line 56) I = insertObjectAnnotation(I, 'rectangle', PositionWhereRectangleShouldBe, label_str, score);_
  1 个评论
Florian Morsch
Florian Morsch 2018-8-6
PositionWhereRactangleShouldBe was an example, not something you should write into your code. You already have a "position" variable in your code, but didnt use it in the first place. Right now the rectangle will be placed at the random location [100 100] with width and heigth [50 50] which i gave as example, you wont mark your object with it.

请先登录,再进行评论。

回答(1 个)

Image Analyst
Image Analyst 2018-8-6
Maybe try using rectangle() or line() or plot() instead if you're having trouble with it and don't need it burned into the image.
  2 个评论
Syafiqah Daud
Syafiqah Daud 2018-8-6
Hi, I've tried that but i got an error of:
'Index exceeds array bounds.
Error in GoogleNet (line 52) label_str{ii} = ['Confidence: ' num2str(conf_val(ii),'%0.2f') '%'];'
Image Analyst
Image Analyst 2018-8-6
Apparently conf_val does not have ii elements in it. What is the value of ii, and what is the length of conf_val when you get the error?

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Computer Vision Toolbox 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by