# data[].attributes.headline
10518 윤동민 심화탐구보고서

# data[].attributes.subject
10518 윤동민 심화탐구보고서

# data[].attributes.headline
20308 김아연 심화탐구 파일

# data[].attributes.subject
20308 김아연 심화탐구 파일

# data[].attributes.body
20510 김택훈, 20425 정호윤, 20608 김지우

# data[].attributes.attachment_link.readable_text
import os
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0'

import numpy as np
import cv2
from keras.callbacks import ModelCheckpoint,EarlyStopping
from keras.layers import Conv2D, Flatten, MaxPooling2D,Dense,Dropout,SpatialDropout2D
from keras.models  import Sequential
from tensorflow.keras.preprocessing.image import ImageDataGenerator, img_to_array, load_img, array_to_img
import random,os,glob
import matplotlib.pyplot as plt

dt_path = 'C:/Users/jstev/Desktop/GarbageClassification/data/Garbage classification/Garbage classification'
img_list = glob.glob(os.path.join(dt_path, '*/*.jpg'))
print(len(img_list))

train=ImageDataGenerator(horizontal_flip=True,
                         vertical_flip=True,
                         validation_split=0.1,
                         rescale=1./255,
                         shear_range = 0.1,
                         zoom_range = 0.1,
                         width_shift_range = 0.1,
                         height_shift_range = 0.1,)

test=ImageDataGenerator(rescale=1/255,
                        validation_split=0.1)

train_generator=train.flow_from_directory(dt_path,
                                          target_size=(300,300),
                                          batch_size=32,
                                          class_mode='categorical',
                                          subset='training')

test_generator=test.flow_from_directory(dt_path,
                                        target_size=(300,300),
                                        batch_size=32,
                                        class_mode='categorical',
                                        subset='validation')

labels = (train_generator.class_indices)
print(labels)

labels = dict((v,k) for k,v in labels.items())
print(labels)


for image_batch, label_batch in train_generator:
  break
print(image_batch.shape, label_batch.shape)

print (train_generator.class_indices)

Labels = '\n'.join(sorted(train_generator.class_indices.keys()))

with open('labels.txt', 'w') as f:
  f.write(Labels)


model=Sequential()
#Convolution blocks

model.add(Conv2D(32,(3,3), padding='same',input_shape=(300,300,3),activation='relu'))
model.add(MaxPooling2D(pool_size=2))
#model.add(SpatialDropout2D(0.5)) # No accuracy

model.add(Conv2D(64,(3,3), padding='same',activation='relu'))
model.add(MaxPooling2D(pool_size=2))
#model.add(SpatialDropout2D(0.5))

model.add(Conv2D(32,(3,3), padding='same',activation='relu'))
model.add(MaxPooling2D(pool_size=2))

#Classification layers
model.add(Flatten())

model.add(Dense(64,activation='relu'))
#model.add(SpatialDropout2D(0.5))
model.add(Dropout(0.2))
model.add(Dense(32,activation='relu'))

model.add(Dropout(0.2))
model.add(Dense(6,activation='softmax'))

filepath="trained_model.keras"
checkpoint1 = ModelCheckpoint(filepath, monitor='val_acc', verbose=1, save_best_only=True, mode='max')
callbacks_list = [checkpoint1]

model.summary()

model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['acc']) # RMS PROP - No accuracy

#es=EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=50)

history = model.fit(train_generator,
                              epochs=100,
                              validation_data=test_generator,
                              callbacks=callbacks_list)
#41 epoch - 75% #73- 76.9%
#78 epoch - 80%

from tensorflow.keras.preprocessing import image

img_path = 'C:/Users/jstev/Desktop/GarbageClassification/data/Garbage classification/Garbage classification/plastic/plastic75.jpg'

img = image.load_img(img_path, target_size=(300, 300))
img = image.img_to_array(img, dtype=np.uint8)
img=np.array(img)/255.0

plt.title("Loaded Image")
plt.axis('off')
plt.imshow(img.squeeze())
p=model.predict(img[np.newaxis, ...])

#print("Predicted shape",p.shape)
print("Maximum Probability: ",np.max(p[0], axis=-1))
predicted_class = labels[np.argmax(p[0], axis=-1)]
print("Classified:",predicted_class)

# data[].attributes.headline
탐구 보고서 - 심화탐구 프로젝트 [CNN 딥러닝을 이용한 쓰레기 분류 프로그램 제작]

# data[].attributes.subject
탐구 보고서 - 심화탐구 프로젝트 [CNN 딥러닝을 이용한 쓰레기 분류 프로그램 제작]

# data[].attributes.body
20510 김택훈, 20425 정호윤, 20608 김지우

# data[].attributes.attachment_link.title
CNN 딥러닝을 이용한 쓰레기 분류 프로그램 제작

# data[].attributes.body
반승우-랜덤포레스트

박서준-서포트 벡터 머신

서수민-다항회귀

# data[].attributes.body
20628 조민서- 3차 다항회귀

20401 강재구- 확률적 경사 하강법

10609 박서진- 서포트 벡터 머신

10306 김도윤- 랜덤 포레스트

# data[].attributes.body
20307김보민 -다항회귀

20308김아연 - 랜덤 포레스트

10312김태우 - 확률적 경사 하강법

10518윤동민 - 서포트 벡터 머신

# data[].attributes.attachment_link.title
풍력 발전 예측 AI 프로젝트

# data[].attributes.body
20908 김준서-선형회귀

10106 모성빈-랜덤 포레스트

10109 박준석-KNN 이웃

20918 백충한-다항회귀

# data[].attributes.headline
김택훈, 정호윤, 정원용, 조성훈

# data[].attributes.subject
김택훈, 정호윤, 정원용, 조성훈

# data[].attributes.body
https://docs.google.com/presentation/d/1wucM1yv3xKuiSeR4c-navmsbtWpGEuU8aHyQiJY0ass/edit?usp=sharing

김택훈 - KNN

정호윤 - 로지스틱 회귀, SVM

정원용 - 다항회귀

조성훈 - 선형회귀

# data[].attributes.headline
제주성산 날씨 발전량 csv파일

# data[].attributes.subject
제주성산 날씨 발전량 csv파일

# data[].attributes.headline
활동 후 자기평가서(필수제출)

# data[].attributes.subject
활동 후 자기평가서(필수제출)

# data[].attributes.attachment_link.title
자율 과정 풍력발전AI 활동 자기평가서

# data[].attributes.attachment_link.description
The form 자율 과정 풍력발전AI 활동 자기평가서 is no longer accepting responses. Try contacting the owner of the form if you think this is a mistake.

# data[].attributes.headline
선형회귀, 다항회귀, k최근접이웃 회귀 모

# data[].attributes.subject
선형회귀, 다항회귀, k최근접이웃 회귀 모

# data[].attributes.attachment_link.title
풍력발전량_예측_모델1

# data[].attributes.body
10422 윤유성 - 풍력발전 예측 AI 만들기 심화 PPT

# data[].attributes.attachment_link.description
디자인 전문가가 아니어도 무료 템플릿으로 손쉽게 원하는 디자인을 할 수 있어요.

# data[].attributes.body
나는 **에 관심이 많은 ***입니다.

# data[].attributes.attachment_link.title
풍력발전 예측 AI 프로젝트 활동지

# data[].attributes.headline
임우진 전유민 윤유성 한지호

# data[].attributes.subject
임우진 전유민 윤유성 한지호

# data[].attributes.body
20725 임우진-랜덤 포레스트

20525 전유민-선형회귀

10422 윤유성-확률적 경사 하강법

10936 한지호

# data[].attributes.attachment_link.title
2024-학교-자율교육과정-풍력발전량예측AI-프로젝트 (1)