Data_Augumentation.py
3.08 KB
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
"""
부족한 데이터를 증강
frequncy를 나타내는 mel-spectrogram에서 데이터 증강(뒤틀림, 뒤집기)을 사용하면
학습이 더 안될 것 같아서 실제로 사용은 안 함
@FUNCTION data_augumentation : 데이터를 증강하는 함수
@FUNCTION save_into_folder : 증강된 데이터들을 이름에 맞게 폴더별로 정리하는 함
"""
import os
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
"""
Data Augmentation
@brief : 모델이 적은 이미지에서 최대한 많은 정보를 뽑아내서 학습할 수 있도록
데이터를 증강시킴
@param dataset_path(str) : dog_sounds converted into mel_spectrogram
"""
def data_augumentation(dataset_path):
datagen = ImageDataGenerator(
rotation_range=40, # 이미지 회전 범위(degree)
width_shift_range=0.2, # 이미지를수 수평 또는 수직으로 랜덤하게 평행 이동
height_shift_range=0.2,
rescale=1./225, # 0-1범위로 변환
shear_range=0.2, # 임의 전단 변환(shearing transformation) 범위
zoom_range=0.2, # 임의 확대/축소 범위
horizontal_flip=False, # 소리에 대한 이미지이기 때문에 뒤집지 않음
fill_mode='nearest') # 이미지를 회전 이동하거나 축소할 때 생기는 공간을 채움
for i, (dirpath, dirnames, filenames) in enumerate(os.walk(dataset_path)):
if dirpath is not dataset_path:
for f in filenames:
file_path = os.path.join(dirpath, f)
img = load_img(file_path) # PIL 이미지
i = 0
x = img_to_array(img) # (x, x, 3) 크기의 Numpy 배열
x=x.reshape((1,)+x.shape) # (1, x, x, 3) 크기의 Numpy 배열
# 임의 변환된 이미지를 배치 단위로 생성해서
# 이미지 20장을 생성하고 마침
for batch in datagen.flow(x, batch_size=1, save_to_dir="C:/Users/nokh9/Desktop/dog_sound_train", save_prefix=f, save_format='.jpg'):
print("{}, data_augument:{}".format(file_path, i))
i += 1
if i > 10:
break
"""
split categories
@brief 증강된 이미지를 카테고리 별로 나누어서 저장
@param dataset_path(str) : dog_sound argumented
"""
def save_into_folder(dataset_path):
num = 1
for filename in os.listdir(dataset_path):
find_category = filename.split('_')[0]
des_path = os.path.join(dataset_path, find_category)
if not os.path.exists(des_path):
os.makedirs(des_path)
num = 1
os.rename(dataset_path+filename, des_path + '/' + find_category + str(num) + '.jpg')
num += 1
# 메인 함수
if __name__ == "__main__":
data_augumentation("C:/Users/nokh9/Desktop/dog_sound_mel")
save_into_folder("C:/Users/nokh9/Desktop/dog_sound_train/")