Multiple Labels in an Image

Hello, I am currently doing a project and inventory categorization and I can detect each type of inventory, but I can only output each detected image labeled on separate images. I want to know how to label all the detected images on one image. I am currently using insertObjectAnnotation to label my detected items. Can someone please shed some light on how I can put all the labeled products on one image. Thank you.

 Respuesta aceptada

sixwwwwww
sixwwwwww el 3 de Dic. de 2013

1 voto

you can store labels for all of your items in a cell array of strings and then you can use this cell array of strings in place of single label. For more information see:
I hope it helps. Good luck!

20 comentarios

Cady
Cady el 3 de Dic. de 2013
Thanks for your quick response. Can you explain in more detail how this would be done with something like this:
detectedImg = insertObjectAnnotation(img, 'rectangle', bbox, 'Orbit');
detectedImg1 = insertObjectAnnotation(img, 'rectangle', bbox1, 'Monster');
detectedImg2 = insertObjectAnnotation(img, 'rectangle', bbox2, 'GobStoppers');
detectedImg3 = insertObjectAnnotation(img, 'rectangle', bbox3, 'Jolly Ranchers');
detectedImg4 = insertObjectAnnotation(img, 'rectangle', bbox4, 'M&Ms');
sixwwwwww
sixwwwwww el 3 de Dic. de 2013
I assume that bbox, bbox1 ... are 1x4 vectors since they are referring to rectangle. In this case you can do like this:
BoxPositions = [bbox; bbox1; bbox2; bbox3; bbox4];
BoxLabels = {'Orbit', 'Monster', 'GobStoppers', 'Jolly Ranchers', 'M&Ms'};
detectedImg = insertObjectAnnotation(img, 'rectangle', BoxPositions, BoxLabels);
Good luck!
Cady
Cady el 3 de Dic. de 2013
Thank you very much for your help. Receiving this error for some reason though:
Error using insertObjectAnnotation>crossCheckInputs (line 254)
The length of LABEL must be equal to the number of rows in POSITION.
sixwwwwww
sixwwwwww el 3 de Dic. de 2013
can you show me your values for bbox, bbox1...?
Cady
Cady el 3 de Dic. de 2013
Example for bbox:
detector = vision.CascadeObjectDetector('OrbitNew.xml');
img = imread(image);
bbox = step(detector, img);
Cady
Cady el 3 de Dic. de 2013
bbox is a 5x4, sorry for the confusion.
sixwwwwww
sixwwwwww el 3 de Dic. de 2013
what value you get for bbox in the workspace? is it 1x4 vector of double values?
Cady
Cady el 3 de Dic. de 2013
bbox = 5x4, bbox1 = 1x4, bbox2 = 2x4, bbox3 = 1x4, bbox4 = 4x4
Cady
Cady el 3 de Dic. de 2013
I assume for your method to work, they all have to be the same size vectors?
sixwwwwww
sixwwwwww el 3 de Dic. de 2013
in this case you have to do as follows:
count = 0;
count = count + size(bbox, 1);
BoxLabels(1:count) = {'Orbit'};
prevCount = count;
count = count + size(bbox1, 1);
BoxLabels(prevCount:count) = {'Monster'};
prevCount = count;
count = count + size(bbox2, 1);
BoxLabels(prevCount:count) = {'GobStoppers'};
prevCount = count;
count = count + size(bbox3, 1);
BoxLabels(prevCount:count) = {'Jolly Ranchers'};
prevCount = count;
count = count + size(bbox4, 1);
BoxLabels(prevCount:count) = {'M&Ms'};
BoxPositions = [bbox; bbox1; bbox2; bbox3; bbox4];
detectedImg = insertObjectAnnotation(img, 'rectangle', BoxPositions, BoxLabels);
Cady
Cady el 3 de Dic. de 2013
works great thank you very for your time, but now its incorrectly labeling some products. For example, it will detect 3 m&ms in the photo but the 4th m&m will be detected as jolly ranchers, etc.
sixwwwwww
sixwwwwww el 3 de Dic. de 2013
Basically it all depends upon your bbox, bbox1 stuff. If you share your complete code then maybe I can look at it a bit
Cady
Cady el 3 de Dic. de 2013
Editada: Cady el 4 de Dic. de 2013
clc;clear
imnumber = {'Newsstand56.jpg', 'Newsstand30.jpg', 'Newsstand48.jpg'};
for i=1:length(imnumber)
image=imnumber{i};
%Orbit
detector = vision.CascadeObjectDetector('OrbitNew.xml');
img = imread(image);
bbox = step(detector, img);
detectedImg = insertObjectAnnotation(img, 'rectangle', bbox, 'Orbit');
numBox = size(bbox, 1);
Orb = 8 - numBox;
%figure; imshow(detectedImg);
%Monster
detector = vision.CascadeObjectDetector('Monster.xml');
img = imread(image);
bbox1 = step(detector, img);
detectedImg1 = insertObjectAnnotation(img, 'rectangle', bbox1, 'Monster');
numBox1 = size(bbox1, 1);
Mon = 6-numBox1;
%figure; imshow(detectedImg1);
%GobStoppers
detector = vision.CascadeObjectDetector('GobStopp.xml');
img = imread(image);
bbox2 = step(detector, img);
detectedImg2 = insertObjectAnnotation(img, 'rectangle', bbox2, 'GobStoppers');
numBox2 = size(bbox2, 1);
Gob = 6-numBox2;
%figure; imshow(detectedImg2);
%Jolly Ranchers
detector = vision.CascadeObjectDetector('Jolly.xml');
img = imread(image);
bbox3 = step(detector, img);
detectedImg3 = insertObjectAnnotation(img, 'rectangle', bbox3, 'Jolly Ranchers');
numBox3 = size(bbox3, 1);
Jolly = 6 - numBox3;
%figure; imshow(detectedImg3);
%M&Ms
detector = vision.CascadeObjectDetector('M&Ms.xml');
img = imread(image);
bbox4 = step(detector, img);
detectedImg4 = insertObjectAnnotation(img, 'rectangle', bbox4, 'M&Ms');
numBox4 = size(bbox4, 1);
MM = 6 - numBox4;
%figure; imshow(detectedImg4);
OrderLog(i,2)=Orb;
OrderLog(i,3)=Gob;
OrderLog(i,4)=Mon;
OrderLog(i,5)=Jolly;
OrderLog(i,6)=MM;
OrderLog(i,1)=i;
end
OrderLog
Cady
Cady el 3 de Dic. de 2013
When I detect them separately in the image, it works fine. But when using what you supplied, it detects incorrectly
Cady
Cady el 4 de Dic. de 2013
If you'd like me to supply the images and xml files, I can send them to you
sixwwwwww
sixwwwwww el 4 de Dic. de 2013
can you send me files as well? Also try this code and I am suggesting same thing in your case:
faceDetector = vision.CascadeObjectDetector;
I = imread('visionteam.jpg');
bboxes = step(faceDetector, I);
IFaces = insertObjectAnnotation(I, 'rectangle', bboxes, 'Face');
figure, imshow(IFaces), title('Detected faces');
bodyDetector = vision.CascadeObjectDetector('UpperBody');
bodyDetector.MinSize = [60 60];
bodyDetector.ScaleFactor = 1.05;
bboxBody = step(bodyDetector, I);
IBody = insertObjectAnnotation(I, 'rectangle',bboxBody,'Upper Body');
figure, imshow(IBody), title('Detected upper bodies');
BoxPositions = [bboxes; bboxBody];
BoxLabels(1:6) = {'Face'};
BoxLabels(7:18) = {'Upper Body'};
a = insertObjectAnnotation(I, 'rectangle', BoxPositions,BoxLabels);
figure, imshow(a)
you can directly run this code and thats the ans you should also according to the suggested manner
sixwwwwww
sixwwwwww el 4 de Dic. de 2013
Also maybe you can attach files here I can try to look at them
Cady
Cady el 4 de Dic. de 2013
Won't let me attach xml files unfortunately
Cady
Cady el 4 de Dic. de 2013
If I can send them to you I would greatly appreciate the further help
Image Analyst
Image Analyst el 4 de Dic. de 2013
Try zipping them before attaching.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 3 de Dic. de 2013

Comentada:

el 4 de Dic. de 2013

Community Treasure Hunt

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

Start Hunting!

Translated by