%cam = webcam('Integrated Webcam'); %cam= webcam('webcam c170'); clear all clc %path=['D:\Papers\2018\14-shape hand detection\kinect_leap_dataset\acquisitions\P7\G9\' num2str(ii) '_rgb.png']; %data=imread(path); Falg=1; for pers=1:10 show_objct=1; for i=1:1 disp('person'); disp(pers); disp('hand'); disp(i); final_res=0; path=['D:\Papers\2018\14-shape hand detection\kinect_leap_dataset\acquisitions\P' num2str(pers) '\G9\' num2str(i) '_rgb.png']; data=imread(path); % data = snapshot(cam); [r c d]=size(data); data = uint8(data); subplot(2,2,1);imshow(data); hand_rgb=zeros(r,c,3); r_clr_min=118-15; r_clr_max=159+0; g_clr_min=89-15; g_clr_max=103+0; b_clr_min=58-15; b_clr_max=98+0; for d=1:3 for row=1:r for col=1:c if ((data(row,col,1)>=r_clr_min) && (data(row,col,1)<=r_clr_max) && ((data(row,col,2)>=g_clr_min) && (data(row,col,2)<=g_clr_max)) && ((data(row,col,3)>=b_clr_min) && (data(row,col,3)<= b_clr_max)) ) hand_rgb(row,col,1)= data(row,col,1 ); end if ((data(row,col,1)>=r_clr_min) && (data(row,col,1)<=r_clr_max) && ((data(row,col,2)>=g_clr_min) && (data(row,col,2)<=g_clr_max)) && ((data(row,col,3)>=b_clr_min) && (data(row,col,3)<= b_clr_max)) ) hand_rgb(row,col,2)= data(row,col,2 ); end if ((data(row,col,1)>=r_clr_min) && (data(row,col,1)<=r_clr_max) && ((data(row,col,2)>=g_clr_min) && (data(row,col,2)<=g_clr_max)) && ((data(row,col,3)>=b_clr_min) && (data(row,col,3)<= b_clr_max)) ) hand_rgb(row,col,3)= data(row,col,3 ); end end end end %Cb_min=77-1; %Cb_max=120-1; %Cr_min=137-1; %Cr_max=163-1; %data_ycbcr=rgb2ycbcr(data); %for y=1:c % for x=1:r % if ((data_ycbcr(x,y,2)>=Cb_min) && (data_ycbcr(x,y,2)<=Cb_max) ) % hand_rgb(x,y,1)= data_ycbcr(x,y,2); % end % if ((data_ycbcr(x,y,3) >= Cr_min) && (data_ycbcr(x,y,3)<= Cr_max ) ) % hand_rgb(x,y,2)= data_ycbcr(x,y,3); % end %end %end % change to black and white subplot(2,2,2);imshow(hand_rgb);title('Extracted Skin RGB Color with ycbcr'); hand=hand_rgb; bw=im2bw(hand,0.5); % preprocesing bw=medfilt2(bw,[3,3]); %bw = imcomplement(bw); % bw=bwareaopen(bw,300); % se = strel('disk',3); % bw=imerode(bw,se); % bw=bwareaopen(bw,700); se = strel('disk',3); bw=imdilate(bw,se); % bw=imfill(bw,'hole'); % subplot(2,2,3); imshow(bw); bw=bwareaopen(bw,700); %bw=imfill(bw,'hole'); subplot(2,2,3);imshow(bw);title('after processing bw img'); % label any object in the image [bw_label,Num]=bwlabel(bw); if Num~=0 for objct=1:Num % extract all first order features of all object stats=regionprops(bw_label,'all'); % search about the lagest object % max_obj_count=1; % Max_Obj_Area= stats(1).Area; %for m=1:length(stats) % if(stats(m).Area>Max_Obj_Area) % Max_Obj_Area=stats(m).Area; % max_obj_count=m; % end %end % from here start constructing two hands hand_1_object=stats(objct).Image; % subplot(2,2,4);imshow(data); % rectangle('Position',bb_1,'EdgeColor','r','LineWidth',2) % imshow(hand_1_object); %%%%%%%%%%%%%%%%%%% % num_arr=hand_1_object; flip_num=0; % go to the top left object [right_crv_x,right_crv_y,left_crv_x,left_crv_y,ref_pt]=scan_curve_extractor_v2(num_arr); %%% fst_value= num_arr(ref_pt(1,2),ref_pt(1,1)); % computing nuber of flips on the right curve. [y_num,x_num] = size(num_arr); flip_num_right=0; for p=1:length(right_crv_y)-2 if y_num > right_crv_y(p)&& x_num > right_crv_x(p) if ( fst_value ~= num_arr(right_crv_y(p),right_crv_x(p))) fst_value= num_arr(right_crv_y(p),right_crv_x(p)); flip_num_right=flip_num_right+1; end end end flip_num_right; % computing nuber of flips on the left curve. flip_num_left=0; fst_value= num_arr(ref_pt(1,2),ref_pt(1,1)); for k=1:length(left_crv_y)-2 if y_num > left_crv_y(k)&& x_num > left_crv_x(k) if ( fst_value ~= num_arr(left_crv_y(k),left_crv_x(k))) fst_value= num_arr(left_crv_y(k),left_crv_x(k)); flip_num_left=flip_num_left+1; end end end flip_num_left; rslt=0; flip_num=flip_num_left+flip_num_right; % counting ouptu if (flip_num >= 6) disp('Hand Detected');rslt=1; bb_1=stats(objct).BoundingBox; subplot(2,2,1);imshow(data); hold on; rectangle('Position',bb_1,'EdgeColor','b','LineWidth',2); hold off; show_objct=objct; else disp(' No detection');rslt=0; end final_res(objct)=rslt; end %^& % path_w=['E:\Papers\4\dataset3\frame_' num2str(ii+100) '_rslt-' num2str(rslt) '.jpeg']; %imwrite(data,path_w, 'jpg'); %%%%%%%%%%%%%%%%%%%%%%%% else title('No Hand Detected', 'Color','r');rslt=0; end %%%%%% %num_arr_2=stats(show_objct).Image; %[right_crv_x,right_crv_y,left_crv_x,left_crv_y,ref_pt]=scan_curve_extractor(num_arr_2); res(pers,i)=max(final_res); end end accu= sum(sum(res))/ (i*pers) %clear cam