%%Leemos la imagen inicial I = imread('grupo.png'); figure,imshow(I); %% Detector de personas peopleDetector = vision.PeopleDetector('ClassificationModel','UprightPeople_128x64'); peopleDetector.WindowStride = [6 6]; peopleDetector.MinSize = [128 64]; %%Tamaņo minimo de las personas [bboxes, scores] = step(peopleDetector,I); I_people = insertObjectAnnotation(I,'rectangle',bboxes,scores); figure, imshow(I_people); %% Detector de rostros % Se crea el detector de objetos faceDetector = vision.CascadeObjectDetector('FrontalFaceCART'); % Detect faces bbox = step(faceDetector, I); % Draw boxes around detected faces and display results shapeInserter = vision.ShapeInserter('BorderColor','Custom','CustomBorderColor',[255 255 0]); %%Se define el color de la caja I_faces = step(shapeInserter, I, int32(bbox)); imshow(I_faces); %% Se numeran los rostros encontrados I_faces = insertObjectAnnotation(I,'rectangle',bbox,[1:size(bbox,1)]); imshow(I_faces); %% Detect Upper Bodies in the image % Create a detector object bodyDetector = vision.CascadeObjectDetector('UpperBody'); bodyDetector.MinSize = [128 128]; %%Tamaņo minimo del cuerpo de la persona bodyDetector.ScaleFactor = 1.05; bbox_body = step(bodyDetector, I); % Draw bounding boxes I_body = insertObjectAnnotation(I,'rectangle',bbox_body,1:size(bbox_body,1)); figure, imshow(I_body); %% Remove false detections by looking for face bbox_face = zeros(size(bbox_body)); for i=1:length(bbox_body) Icrop = imcrop(I,bbox_body(i,:)); bbox = step(faceDetector,Icrop); if ~isempty(bbox) bbox_face(i,:) = bbox + [bbox_body(i,1:2)-1 0 0]; end end I_faces2 = insertObjectAnnotation(I,'rectangle',bbox_face,1:size(bbox_face,1)); figure, imshow(I_faces2);