딥러닝 데이터를 늘리기 위한 이미지 제너레이터 만들기

5) 이미지 제너레이터 만들기 - 미리보기 기능 추가

잡동사니123 2023. 2. 27. 21:13

필요한 클래스 변수 추가

  • __init__ 함수에 필요한 변수를 넣는다
self.axes = []

# 원하는 레이아웃에 matplotlib를 연동되게 해주는 부분 미리 세팅
self.fig = plt.Figure()
self.canvas = FigureCanvas(self.fig)
self.plt_layout.addWidget(self.canvas)

 

필요한 클래스 함수 추가 및 이벤트 함수와 연동하기

  • 기능을 구현할 클래스 함수를 추가한다. WindowClass 안에 함수를 넣는다.
def preview(self):
    # 여기에 미리보기 제공하는 기능 구현할 예정

 

  • 이벤트를 구현하기 위한 코드이다. __init__ 함수안에 넣어준다.
self.preview_button.clicked.connect(self.preview)  # 미리보기 버튼 클릭 이벤트

 

preview 함수 기능인 파일 열기 기능 구현

  • 제너레이터에 넣을 속성값을 프로그램에서 가져온다. 미리보기는 고정적으로 9개를 보여줄 예정이므로 count는 가져오지 않는다.
# 제너레이터에 넣을 속성값 프로그램에서 가져오기
horizontalFlip = self.horizontalFlip_comboBox.currentText() == 'True'
widthShiftRange = self.widthShiftRange_SpinBox.value()
heightShiftRange = self.heightShiftRange_spinBox.value()
rotationRange = self.rotationRange_spinBox.value()
shearRange = self.shearRange_spinBox.value()
zoomRange = self.zoomRange_spinBox.value()
verticalFlip = self.verticalFlip_comboBox.currentText() == 'True'
fillMode = self.fillMode_comboBox.currentText()

 

  • ImageDataGenerator를 이용해 제너레이터 준비, 속성값에 그대로 대입하기
datagen = ImageDataGenerator(horizontal_flip=horizontalFlip, width_shift_range=widthShiftRange,
    height_shift_range=heightShiftRange, rotation_range=rotationRange,
    shear_range=shearRange, zoom_range=zoomRange,
    vertical_flip=verticalFlip, fill_mode=fillMode)

 

  • 이미지를 불러온후, 변형의 과정을 거쳐 실제 프로그램에 그리기
# 실제 프로그램에서 이미지 예시를 matplotlib를 이용해 보여주는 코드
img = load_img(self.files_root[0])  # 파일들중 첫번쨰 사진 불러오기
img = img.resize((500, 500))  # 이미지 크기 500X500으로 맞추기
x = img_to_array(img)  # numpy 배열로 변형
x = x.reshape((1,) + x.shape)

idx = 0
axes = []
for batch in datagen.flow(x, batch_size=1):
    axes.append(self.fig.add_subplot(3, 3, idx + 1))
    axes[idx].imshow(array_to_img(batch[0]))
    idx += 1
    if idx == 9:
        break

self.canvas.draw()  # 이미지를 실제로 프로그램에 그려주는 코드

 

  • 위의 코드까지 다 입력한 후 실행한 결과