-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathimagerecognition.py
More file actions
118 lines (95 loc) · 3.62 KB
/
Copy pathimagerecognition.py
File metadata and controls
118 lines (95 loc) · 3.62 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
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
# -*- coding: utf-8 -*-
"""ImageRecognition.ipynb
Automatically generated by Colab.
Original file is located at
https://colab.research.google.com/drive/1bg2H_JuJjnRSGDcitTpiElaxOx8BKHc1
"""
import tensorflow as tf
print(tf.__version__)
!wget --no-check-certificate \
https://dicoding-academy-assets.sgp1.cdn.digitaloceanspaces.com/184/messy-vs-clean-room.zip \
-O /tmp/messy_vs_clean_room.zip
# melakukan ekstraksi pada file zip
import zipfile,os
local_zip = '/tmp/messy_vs_clean_room.zip'
zip_ref = zipfile.ZipFile(local_zip, 'r')
zip_ref.extractall('/tmp')
zip_ref.close()
base_dir = '/tmp/images'
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'val')
os.listdir('/tmp/images/train')
os.listdir('/tmp/images/val')
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale = 1./255,
rotation_range = 20,
horizontal_flip =True,
shear_range = 0.2,
fill_mode = 'nearest'
)
test_datagen = ImageDataGenerator(
rescale = 1./255
)
train_generator = train_datagen.flow_from_directory(
train_dir, # direktori data latih
target_size = (150,150), # Mengubah resolusi gambar menjadi 150x150 piksel
batch_size = 4,
# Karena ini merupakan masalah klasifikasi 2 kelas, gunakan class_mode = 'binary'
class_mode = 'binary'
)
validation_generator = test_datagen.flow_from_directory(
validation_dir, # direktori data validasi
target_size=(150, 150), # mengubah resolusi seluruh gambar menjadi 150x150 piksel
batch_size=4, # karena ini merupakan masalah klasifikasi 2 kelas gunakan class_mode = 'binary'
class_mode='binary')
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150,150,3)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(128, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Conv2D(512, (3,3), activation='relu'),
tf.keras.layers.MaxPooling2D(2,2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dense(1, activation= 'sigmoid')
])
# Untuk melihat model summar dari arsitektur yang sudah kita bangun
model.summary()
# compile model dengan 'adam' optimizer loss function 'binary_crossentropy'
model.compile(loss='binary_crossentropy',
optimizer=tf.optimizers.Adam(),
metrics=['accuracy'])
# Latih model dengan fit
model.fit(
train_generator,
steps_per_epoch=25, # Berapa batch yang akan dieksekusi tiap epoch
epochs= 20, # tambahkan epochs jika akurasi belum optimal
validation_data = validation_generator, # Menampilkan akurasi pengujian data validasi
validation_steps = 5, # Berapa batch yang akan dieksekusi tiap epoch
verbose=5
)
# Commented out IPython magic to ensure Python compatibility.
import numpy as np
from google.colab import files
from tensorflow.keras.preprocessing import image
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# %matplotlib inline
uploaded = files.upload()
for fn in uploaded.keys():
# predicting images
path = fn
img = image.load_img(path, target_size=(150,150))
imgplot = plt.imshow(img)
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
images = np.vstack([x])
classes = model.predict(images, batch_size=10)
print(fn)
if classes==0:
print('clean')
else:
print('messy')