-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathskin_move.py
138 lines (130 loc) · 7.69 KB
/
skin_move.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import os
import cv2
import shutil
import numpy as np
import random
def skin_move(skin_model, max_file, folder_list, move_folder):
folder_path = "SkinData/DataBox/"
move_path = "SkinData/data/"
if os.path.exists(f"{move_path}{move_folder}"):
shutil.rmtree(f"{move_path}{move_folder}")
os.mkdir(f"{move_path}{move_folder}")
image_count = 0
for number, folder in enumerate(folder_list):
files = os.listdir(f"{folder_path}{folder}")
random.shuffle(files)
count = 0
for file in files:
try:
img = cv2.imread(f'{folder_path}{folder}/{file}', cv2.IMREAD_UNCHANGED)
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGRA)
h, w = img.shape[:2]
if h == 32:
moves = []
for i in range(h):
for j in range(w):
b, g, r, a = img[i, j]
if 16 <= i <= 31 and 0 <= j <= 15:
moves.append([i+32, j+16, b, g, r, a])
elif 16 <= i <= 31 and 40 <= j <= 53:
moves.append([i+32, j-8, b, g, r, a])
new_image = np.zeros((64, 64, 4), dtype=np.uint8)
new_image[:32, :] = img
img = new_image
for item in moves:
img[item[0],item[1]] = item[2:]
h, w = img.shape[:2]
alpha = 0
for i in range(h):
for j in range(w):
b, g, r, a = img[i, j]
if (a != 0) and ((16 <= i <= 19 and 50 <= j <= 51) or (20 <= i <= 31 and 54 <= j <= 55)):
if int(b)+int(g)+int(r) != 0:
alpha += 1
alex_or_steve = False # False: steve / True: alex
if alpha <= 24:
alex_or_steve = True
if skin_model == "alex" and not alex_or_steve:
move_hand = []
for i in range(h):
for j in range(w):
b, g, r, a = img[i, j]
if 16 <= i <= 31 and 47 <= j <= 48:
move_hand.append([i,j-1,b,g,r,a])
elif 16 <= i <= 31 and 50 <= j <= 55:
move_hand.append([i,j-2,b,g,r,a])
elif 48 <= i <= 63 and 39 <= j <= 40:
move_hand.append([i,j-1,b,g,r,a])
elif 48 <= i <= 63 and 42 <= j <= 47:
move_hand.append([i,j-2,b,g,r,a])
elif 32 <= i <= 47 and 47 <= j <= 48:
move_hand.append([i,j-1,b,g,r,a])
elif 32 <= i <= 47 and 50 <= j <= 55:
move_hand.append([i,j-2,b,g,r,a])
elif 48 <= i <= 63 and 55 <= j <= 56:
move_hand.append([i,j-1,b,g,r,a])
elif 48 <= i <= 63 and 58 <= j <= 63:
move_hand.append([i,j-2,b,g,r,a])
for item in move_hand:
img[item[0],item[1]] = item[2:]
elif skin_model == "steve" and alex_or_steve:
move_hand = []
for i in range(h):
for j in range(w):
b, g, r, a = img[i, j]
if 16 <= i <= 31 and j == 45:
move_hand.append([i,j+1,b,g,r,a])
elif 16 <= i <= 31 and 46 <= j <= 47:
move_hand.append([i,j+1,b,g,r,a])
elif 16 <= i <= 31 and 48 <= j <= 53:
move_hand.append([i,j+2,b,g,r,a])
elif 48 <= i <= 63 and j == 37:
move_hand.append([i,j+1,b,g,r,a])
elif 48 <= i <= 63 and 38 <= j <= 39:
move_hand.append([i,j+1,b,g,r,a])
elif 48 <= i <= 63 and 40 <= j <= 45:
move_hand.append([i,j+2,b,g,r,a])
elif 32 <= i <= 47 and j == 45:
move_hand.append([i,j+1,b,g,r,a])
elif 32 <= i <= 47 and 46 <= j <= 47:
move_hand.append([i,j+1,b,g,r,a])
elif 32 <= i <= 47 and 48 <= j <= 53:
move_hand.append([i,j+2,b,g,r,a])
elif 48 <= i <= 63 and j == 53:
move_hand.append([i,j+1,b,g,r,a])
elif 48 <= i <= 63 and 54 <= j <= 55:
move_hand.append([i,j+1,b,g,r,a])
elif 48 <= i <= 63 and 56 <= j <= 61:
move_hand.append([i,j+2,b,g,r,a])
for item in move_hand:
img[item[0],item[1]] = item[2:]
for i in range(h):
for j in range(w):
b, g, r, a = img[i, j]
if skin_model == "alex":
if (0 <= i <= 7 and 8 <= j <= 23) or (8 <= i <= 15 and 0 <= j <= 31) or (16 <= i <= 19 and 4 <= j <= 11) or (16 <= i <= 19 and 20 <= j <= 35) or (16 <= i <= 19 and 44 <= j <= 49) or (20 <= i <= 31 and 0 <= j <= 53) or (48 <= i <= 51 and 20 <= j <= 27) or (48 <= i <= 51 and 36 <= j <= 41) or (52 <= i <= 63 and 16 <= j <= 45):
img[i,j] = [b,g,r,255]
elif not ((0 <= i <= 7 and 40 <= j <= 55) or (8 <= i <= 15 and 32 <= j <= 63) or (32 <= i <= 35 and 4 <= j <= 11) or (32 <= i <= 35 and 20 <= j <= 35) or (32 <= i <= 35 and 44 <= j <= 49) or (36 <= i <= 47 and 0 <= j <= 53) or (48 <= i <= 51 and 4 <= j <= 11) or (48 <= i <= 51 and 52 <= j <= 57) or (52 <= i <= 63 and 0 <= j <= 15) or (52 <= i <= 63 and 48 <= j <= 61)):
img[i,j] = [0,0,0,0]
if skin_model == "steve":
if (0 <= i <= 7 and 8 <= j <= 23) or (8 <= i <= 15 and 0 <= j <= 31) or (16 <= i <= 19 and 4 <= j <= 11) or (16 <= i <= 19 and 20 <= j <= 35) or (16 <= i <= 19 and 44 <= j <= 51) or (20 <= i <= 31 and 0 <= j <= 55) or (48 <= i <= 51 and 20 <= j <= 27) or (48 <= i <= 51 and 36 <= j <= 43) or (52 <= i <= 63 and 16 <= j <= 47):
img[i,j] = [b,g,r,255]
elif not ((0 <= i <= 7 and 40 <= j <= 55) or (8 <= i <= 15 and 32 <= j <= 63) or (32 <= i <= 35 and 4 <= j <= 11) or (32 <= i <= 35 and 20 <= j <= 35) or (32 <= i <= 35 and 44 <= j <= 51) or (36 <= i <= 47 and 0 <= j <= 55) or (48 <= i <= 51 and 4 <= j <= 11) or (48 <= i <= 51 and 52 <= j <= 59) or (52 <= i <= 63 and 0 <= j <= 15) or (52 <= i <= 63 and 48 <= j <= 63)):
img[i,j] = [0,0,0,0]
img = cv2.cvtColor(img, cv2.COLOR_BGRA2RGBA)
cv2.imwrite(f'{move_path}{move_folder}/image{image_count}.png', img)
image_count += 1
if count == max_file[number]-1:
break
count += 1
except Exception as e:
print("error")
skin_model = "alex" # alex or steve
folder_list = ["alex","steve"]
max_file = [2,8]
move_folder = ""
for i in range(len(folder_list)):
move_folder += f"{folder_list[i]}"
if i+1 != len(folder_list):
move_folder += "_"
skin_move(skin_model, max_file, folder_list, move_folder)