조현아

7_throw_filter_1

% 맨처음 방향 (frame1) 으로 일괄 orientation normalize
% => 1번프레임이 아니라 프레임들의 중앙값
% 키로 모든방향 normalize
% 노멀라이즈시 최소값 빼는게 아니라 joint1-> 0.5/0.5/0.5로 가도록
% 실험할때 전방향 노멀라이즈도 해봐야겠다..
path_name ='/home/hyuna/Documents/actionGAN_work/7_cleansed_skeleton/';
dinfo=dir('/home/hyuna/Documents/actionGAN_work/7_cleansed_skeleton/*.skeleton');
%txt=fullfile(dir_to_search, '*.skeleton');
%dinfo=dir(txt);
count=[0,0,0];
label=-1;
for d = 1: length(dinfo)
file_name = dinfo(d).name;
% disp(name);
name = strcat(path_name,file_name(1:20),'.skeleton');
[token,remainder] = strtok(file_name,'A');
class = str2num(remainder(2:4));
%class=remainder(2:4);
if class == 7
bodyinfo = read_skeleton_file(name);
frame_num = size(bodyinfo,2);
else
continue;
end
if isempty(bodyinfo) || isempty(bodyinfo(1).bodies())
disp("empty body");
newdir='/home/hyuna/Documents/actionGAN_work/7_emptybody.txt';
txtfile=fopen(newdir,'a');
fprintf(txtfile, file_name(1:20));
fprintf(txtfile, '\n');
fclose(txtfile);
count(1)=count(1)+1;
continue;
end
%initialize
cur_subject_x = zeros(frame_num, 25);
cur_subject_y = zeros(frame_num, 25);
cur_subject_z = zeros(frame_num, 25);
tot_x = zeros(frame_num,25);
tot_y = zeros(frame_num,25);
tot_z = zeros(frame_num,25);
joint_5 = zeros(1,3);
joint_9 = zeros(1,3);
joint_1 = zeros(1,3);
joint_3 = zeros(1,3);
%get total joints information
for FN = 1:frame_num
cur_body = bodyinfo(FN).bodies(1);
joints = cur_body.joints;
for JN = 1:25
tot_x(FN,JN) = joints(JN).x;
tot_y(FN,JN) = joints(JN).y;
tot_z(FN,JN) = joints(JN).z;
end
end
%Orientation normalization 1 : in space
%get median values
M_x = median(tot_x);
M_y = median(tot_y);
M_z = median(tot_z);
%set 3 points for make plane
joint_5 = [M_x(5) M_y(5) M_z(5)];
joint_9 = [M_x(9) M_y(9) M_z(9)];
joint_1 = [M_x(1) M_y(1) M_z(1)];
joint_3 = [M_x(3) M_y(3) M_z(3)];
%find RIGID TRNASFORMATION matrix
d1 = joint_1 - joint_5;
d2 = joint_1 - joint_9;
n1 = cross(d1,d2); % because we will parallel transform, don't need to find belly
u1 = n1/norm(n1);
u2 = [0 0 1];
cs1 = dot(u1,u2)/norm(u1)*norm(u2);
ss1 = sqrt(1-cs1.^2);
v1 = cross(u1,u2)/norm(cross(u1,u2));
R1 = [v1(1)*v1(1)*(1-cs1)+cs1 v1(1)*v1(2)*(1-cs1)-v1(3)*ss1 v1(1)*v1(3)*(1-cs1)+v1(2)*ss1];
R1(2,:) = [v1(1)*v1(2)*(1-cs1)+v1(3)*ss1 v1(2)*v1(2)*(1-cs1)+cs1 v1(2)*v1(3)*(1-cs1)-v1(1)*ss1];
R1(3,:) = [v1(1)*v1(3)*(1-cs1)-v1(2)*ss1 v1(2)*v1(3)*(1-cs1)+v1(1)*ss1 v1(3)*v1(3)*(1-cs1)+cs1];
%1-3 number tolls to parallel x axis. Rigid transformation on plane surface
%Z axis coords oyler angle transform
t = joint_3 - joint_1;
d3 = R1(1,:) * t.';
d3(1,2) = R1(2,:) * t.';
d3(1,3) = R1(3,:) * t.';
u3 = d3(1:2)/norm(d3(1:2));
v3 = [u3(1) -u3(2)];
v3(2,:) = [u3(2) u3(1)];
u4 = [1 0].';
csss = v3\u4;
cs2 = csss(1);
ss2 = csss(2);
R2 = [cs2 -ss2 0];
R2(2,:) = [ss2 cs2 0];
R2(3,:) = [0 0 1];
%apply rigid transformation
for FN = 1:frame_num
cur_body = bodyinfo(FN).bodies(1);
joints = cur_body.joints;
for JN = 1:25
a = R1(1,:) * [joints(JN).x joints(JN).y joints(JN).z].';
b = R1(2,:) * [joints(JN).x joints(JN).y joints(JN).z].';
c = R1(3,:) * [joints(JN).x joints(JN).y joints(JN).z].';
cur_subject_x(FN,JN) = R2(1,:) * [a b c].';
cur_subject_y(FN,JN) = R2(2,:) * [a b c].';
cur_subject_z(FN,JN) = R2(3,:) * [a b c].';
end
end
%orientation normalize 2 (with plane surface)
if cur_subject_x(1,4) < cur_subject_x(1,1)
cur_subject_x = 0 - cur_subject_x;
end
if cur_subject_y(1,9) > cur_subject_y(1,5)
cur_subject_y = 0 - cur_subject_y;
end
% for save origin subjects before data augment
clear_subject_x = cur_subject_x;
clear_subject_y = cur_subject_y;
clear_subject_z = cur_subject_z;
% patch_num*25
% reds(head-spine) shoud be parallel to z
% 4 3 21 2 1
red=[4,3,21,2,1];
max_t=[];
echo off;
for j = 1: length(red)-1
theta_per_patch=[]
for patch = 1:frame_num
u = [clear_subject_x(patch, red(j+1))-clear_subject_x(patch, red(j)),clear_subject_y(patch, red(j+1))-clear_subject_y(patch, red(j)),clear_subject_z(patch, red(j+1))-clear_subject_z(patch, red(j))];
% v = axis z
v = [0,0,1];
% angle between [vector joint to joint] and [axis z]
theta = atan2(norm(cross(u,v)),dot(u,v));
%if theta > 90
%theta = theta - 90;
%end
%print all the theta and max of it.
%disp(theta);
theta_per_patch=[theta_per_patch, theta];
end
% maximum theta for each bones through all the patches
% max_t[4]
max_t = [max_t,max(theta_per_patch)];
clear theta_per_patch;
end
%disp("max");
%disp(max_t);
% usually 1.6<max angle<=1.8
if max_t(max_t>1.8) %bad
label=0;
else
label=1;
end
% green, blue(arms) should be located in almost the same position at the
% beginning and end of motion.
green=[5,6,7,8,23,22];
blue=[9,10,11,12,25,24];
%print a distance between starting and ending coords
g_distance = []
for j = 1: length(green)
x_=clear_subject_x(1, green(j))-clear_subject_x(frame_num, green(j));
y_=clear_subject_y(1, green(j))-clear_subject_y(frame_num, green(j));
z_=clear_subject_z(1, green(j))-clear_subject_z(frame_num, green(j));
d=sqrt(x_*x_+y_*y_+z_*z_);
g_distance=[g_distance,d];
end
disp(file_name(1:20));
disp(g_distance);
b_distance = []
for j = 1: length(blue)
x_=clear_subject_x(1, blue(j))-clear_subject_x(frame_num, blue(j));
y_=clear_subject_y(1, blue(j))-clear_subject_y(frame_num, blue(j));
z_=clear_subject_z(1, blue(j))-clear_subject_z(frame_num, blue(j));
d=sqrt(x_*x_+y_*y_+z_*z_);
b_distance=[b_distance,d];
end
disp(b_distance);
% only use just 2 joints at the tip of arms(hands)
g_end=g_distance(end-1:end);
b_end=b_distance(end-1:end);
if g_end(g_end>0.7) %bad
label=0;
else
label=1;
end
if b_end(b_end>0.7) %bad
label=0;
else
label=1;
end
% save good and bad examples seperately
newdir='';
if label==0 % bad
newdir='/home/hyuna/Documents/actionGAN_work/7_arms_bad.txt';
count(2)=count(2)+1;
else
newdir='/home/hyuna/Documents/actionGAN_work/7_arms_good.txt';
count(3)=count(3)+1;
copyfile(name,'/home/hyuna/Documents/actionGAN_work/7_arms_cleansed_skeleton');
end
txtfile=fopen(newdir,'a');
fprintf(txtfile, file_name(1:20));
fprintf(txtfile, '\n');
fclose(txtfile);
end
% number of [emptybody, bad, good]
disp(count);
This file is too large to display.
S001C001P007R001A007
S001C002P007R001A007
S001C003P003R002A007
S002C001P008R001A007
S002C001P013R001A007
S002C001P013R002A007
S002C002P008R001A007
S002C002P013R001A007
S002C002P013R002A007
S002C002P014R002A007
S002C003P003R002A007
S002C003P008R001A007
S002C003P012R001A007
S002C003P013R001A007
S002C003P013R002A007
S003C003P017R001A007
S004C001P020R002A007
S004C002P020R001A007
S004C002P020R002A007
S004C003P007R001A007
S005C001P017R002A007
S005C002P017R002A007
S005C003P017R002A007
S006C001P008R001A007
S006C002P017R002A007
S006C003P017R002A007
S007C001P016R001A007
S007C001P016R002A007
S007C001P027R002A007
S007C002P016R001A007
S007C002P016R002A007
S007C003P016R001A007
S008C001P025R002A007
S008C001P035R002A007
S008C002P035R001A007
S008C002P035R002A007
S008C003P035R001A007
S009C001P016R001A007
S009C002P016R001A007
S009C003P016R001A007
S010C001P013R002A007
S010C002P013R002A007
S012C001P037R001A007
S012C001P037R002A007
S012C002P037R001A007
S012C002P037R002A007
S012C003P037R001A007
S012C003P037R002A007
S013C001P007R001A007
S013C001P016R002A007
S013C001P019R001A007
S013C001P037R001A007
S013C001P037R002A007
S013C002P007R001A007
S013C002P019R001A007
S013C002P037R001A007
S013C002P037R002A007
S013C003P007R001A007
S013C003P016R002A007
S013C003P017R001A007
S013C003P018R001A007
S013C003P019R001A007
S013C003P037R001A007
S013C003P037R002A007
S014C001P007R001A007
S014C001P037R002A007
S014C002P007R001A007
S014C002P037R002A007
S014C003P007R001A007
S014C003P008R001A007
S014C003P037R001A007
S014C003P037R002A007
S015C001P007R001A007
S015C001P016R001A007
S015C001P019R001A007
S015C001P019R002A007
S015C001P037R002A007
S015C002P007R002A007
S015C002P016R001A007
S015C002P019R002A007
S015C003P016R001A007
S015C003P016R002A007
S015C003P017R002A007
S015C003P019R002A007
S015C003P037R002A007
S016C001P007R001A007
S016C001P008R001A007
S016C001P019R001A007
S016C001P019R002A007
S016C001P039R002A007
S016C002P019R001A007
S016C002P019R002A007
S016C002P039R001A007
S016C002P039R002A007
S016C002P040R001A007
S016C003P007R002A007
S016C003P019R001A007
S017C001P003R001A007
S017C001P016R001A007
S017C001P016R002A007
S017C001P020R001A007
S017C001P020R002A007
S017C002P003R002A007
S017C002P007R002A007
S017C002P009R001A007
S017C002P009R002A007
S017C002P016R001A007
S017C002P016R002A007
S017C002P020R001A007
S017C002P020R002A007
S017C003P003R002A007
S017C003P009R001A007
S017C003P016R001A007
S017C003P017R002A007
S017C003P020R001A007
This diff is collapsed. Click to expand it.