1. Menyiapkan data
Pada artikel sebelumnya kita menggunakan CNN untuk mendeteksi wajah ( Link ) dan Menggunakan SVM untuk clasifikasi kucing atau anjing ( Link ).
Pada kesempatan ini kita akan melakukan klasifikasi wajah Leonel Messi dan Cristiano Ronaldo. Pertama kita akan mencari beberapa wajah keduanya dari internet. Kemudian memotong bagian dari wajah, dengan menggunakan program [ link ] atau [ link ]. Kemudian kita simpan dalam sebuah direktori.
Messi diambil dari beberapa link berikut:
- https://s.hs-data.com/bilder/spieler/gross/26622.jpg
- https://thumbor.forbes.com/thumbor/fit-in/416×416/filters%3Aformat%28jpg%29/https%3A%2F%2Fspecials-images.forbesimg.com%2Fimageserve%2F5ec595d45f39760007b05c07%2F0x0.jpg%3Fbackground%3D000000%26cropX1%3D989%26cropX2%3D2480%26cropY1%3D74%26cropY2%3D1564
- https://akcdn.detik.net.id/community/media/visual/2020/02/28/7ea23dda-2b72-4d8c-921d-4c31580c11f7.jpeg?w=700&q=80
Simpan dengan nama m.1.jpg, m.2.jpg, dan seterusnya
Sedangkan Cristiano Ronaldo diambil dari beberapa link berikut ini:
- https://gilabola.com/wp-content/uploads/2020/08/Ada-Ronaldo-Juventus-Bisa-Kalahkan-Lyon.jpg
- https://en.as.com/en/imagenes/2019/09/24/football/1569310945_447431_noticia_normal.jpg
- https://akcdn.detik.net.id/community/media/visual/2020/02/25/00dd7073-d4cd-4a2f-9d4c-392d5f3295cc.jpeg?w=700&q=80
Simpan dengan nama r.1.jpg, r.2.jpg, dan seterusnya
Setiap direktori akan kita beri label sesuai dengan mengubah nama menjadi kode, seperti berikut ini:
No | Nama | Kode |
1 | Leonel Messi | 1 |
2 | Ronaldo | 2 |
2. Membaca Data
Buatlah kode program python dengan nama cnn_1.py
#Sumber : https://github.com/sumedhkulkarni7/Image-Classification-using-CNN-Keras-and-Tensorflow-in-Python/blob/master/NN_project.ipynb
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
# Inisialisasi CNN
classifier = Sequential()
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
training_set = train_datagen.flow_from_directory('dataset/training_set',
target_size=(64, 64),
batch_size=32,
class_mode='binary')
test_set = test_datagen.flow_from_directory('dataset/test_set',
target_size=(64, 64),
batch_size=32,
class_mode='binary')
Code language: PHP (php)
Semua file disimpan dalam nama m.1.jpg, pada bagian ini kita memotong 3 karakter dari nama file sehingga menjadi m.1. Kemudian kita mengelompokkan file berdasarkan m atau r atau karakter lain kemudian memberi label. Pada bagian ini kita memberi label messi dengan angka 0 dan memberi label ronaldo dengan angka 1
3. Melakukan Tes Data
classifier.fit_generator(training_set,
steps_per_epoch=(2336/32),
epochs = 32,
validation_data=test_set,
validation_steps=(549/32))
import numpy as np
from keras.preprocessing import image
test_image = image.load_img('dataset/prediction/1.jpg', target_size=(64, 64))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = classifier.predict(test_image)
training_set.class_indices
if result[0][0] == 1:
prediction = 'Messi'
else:
prediction = 'Ronaldo'
print(prediction)
Code language: JavaScript (javascript)