UNIVERSITAS GUNADARMA
1 TUJUAN
▪ Mengenal Machine Learning pada OpenCV
2 PERSIAPAN
- OpenCV
- Numpy
- Flask
- Pillow
- Firebase
- Firebase Admin
3 PERALATAN PRAKTIKUM
▪ Komputer
▪ Webcam
5.1 Machine Learning Alghorithms
Secara umum algoritma Machine Learning dikategorikan sebagai:
a. Supervised Learning
Supervised Machine Learning dapat menerapkan data yang ada dan data
baru pada contoh-contoh data yang sudah ditandai untuk memprediksi kejadian
masa depan. Dimulai dari analisis training data yang telah diketahui, algoritma
akan menghasilkan fungsi kesimpulan untuk membuat prediksi mengenai nilai
output. Algoritma tersebut dapat menyediakan output untuk input baru lainnya
setelah melakukan pelatihan yang cukup
b. Unsupervised Learning
c. Semi-supervised Learning
d. Reinforced Learning
Berbeda dengan Machine Learning yang dimana ketika ada kesalahan atau terdapat
prediksi yang tidak akurat masih memerlukan manusia untuk memberikan petunjuk,
Neural Networks yang berasal dari sekumpulan algoritma-algoritma Machine Learning
(digambarkan sebagai neuron) dapat mengatasi masalahnya sendiri tanpa memerlukan
petunjuk dari luar.
Kemampuan face detection dan face recognition pada computer vision merupakan salah
satu aplikasi dari Machine Learning. Dengan menggunakan Machine Learning dan
algoritmanya (formula) sebuah komputer dapat mendeteksi hinnga mengenali suatu
gambar.
1. Feature-based
2. Appearance-based
3. Knowledge-based
4. Template Matching
5. Viola-Jones Algorithm
Pada materi ini, Face Detection pada OpenCV menggunakan algoritma Viola-
Jones dan Haar Like. Sebelum mendeteksi, gambar yang diterima akan diubah dari
bentuk RGB ke bentuk gray untuk memudahkan proses serta data yang harus diproses
menjadi lebih sedikit.
PraktikumRobotika|4
.
Kemudian daerah yang telah terdeteksi akan ditandai sebagai ROI (Region of Interest),
untuk menampilkan ROI, selanjutnya ROI akan diberikan koordinat x, y, w, h untuk
membentuk sebuah kotak yang menampilkan ROI pada gambar.
Merupakan salah satu teknologi komputer yang dapat bekerja bersamaan dengan
face detection. Teknologi ini mampu mencari karakteristik yang terbaik untuk
mendeskripsikan suatu gambar yang telah diambil, dipotong, diubah ukurannya, dan
biasanya diubah menjadi gambar grayscale.
Pada dasarnya, sistem face recognition beroperasi pada dua mode, yaitu:
Mode ini pada dasarnya membandingkan input gambar wajah dengan gambar
wajah yang berhubungan dengan user serta membutuhkan autentikasi. Mode ini disebut
juga perbandingan 1x1
2. Identifikasi/pengenalan wajah
Pada mode ini input dibandingkan dengan gambar-gambar wajah dari sebuah dataset
dengan tujuan mencari user yang memiliki wajah sama dengan input. Mode ini disebut
juga perbandingan 1x1
PraktikumRobotika|5
➢ Face Recognition Algorithms
1. Eigenfaces (1991)
3. Fisherfaces (1997)
4. Scale Invariant Feature Transform (SIFT) (1999)
PraktikumRobotika|6
5.4.1 Mengumpulkan Data
Pada tahap ini kita akan membentuk sebuah dataset yang akan menyimpan
setiap gambar untuk setiap ID. ID yang dimasukkan akan dijadikan sebagai label
untuk setiap foto yang disimpan dan sebagai input index untuk menghasilkan
output id nama dari pada saat face recognition.
Dengan menggunakan gambar wajah yang disimpan pada dataset, kita dapat
membentuk sebuah file .yml yang digunakan untuk mengenali wajah yang
ditangkap webcam.
PraktikumRobotika|7
Untuk menghasilkan file .yml tersebut, kita menggunakan algoritma LBPH (Local
Binary Patterns Histogram). Proses training melewati beberapa prosedur LBP dan
HOG, yaitu:
• Prosedur LBP:
2. Gambar kemudian dipecah menjadi window dengan pixel 3x3 atau disebut
juga matriks 3x3 dengan perbedaan intensitas disetiap pixelnya (0-255)
4. Untuk setiap pixel sekeliling central pixel, tentukan nilai biner baru. 1
untuk nilai >= dari nilai central pixel, sedangkan 0 untuk nilai <= dari nilai
central pixel
5. Setiap nilai biner yang dihasilkan gabungkan sesuai dengan arah jarum
jam
7. Pada akhir prosedur, akan didapat gambar baru yang menampilkan data
karakteristik gambar original yang lebih baik
PraktikumRobotika|8
Gambar 5.8 Hasil gambar original dari prosedur LPBH.
• Prosedur HOG:
Histogram final akan menunjukan karakterisik gambar tersebut. Hasil akhir ini
yang kita sebut sebagai Training Data
Pada tahap akhir ini, kita akan mengambil gambar wajah baru melalui
webcam, ketika gambar wajah yang diambil telah disimpan dan di-train
sebelumnya. Recognizer kita akan membuat sebuah “Prediksi” atau “Confidence”.
PraktikumRobotika|9
Ketika menerima input gambar baru, recognizer akan membandingkan dua
histogram dan mengembalikan gambar ke histogram terdekatnya.
Absolute Value, dsb. Pada saat ini kita menggunakan rumus Euclidean Distance
(rumus paling umum) :
P r a k t i k u m R o b o t i k a | 10
Istilah Internet of Things pertama kali diciptakan oleh Kevin Ashton pada
tahun 1999. Upaya untuk mendefinisikan dengan benar apa itu IoT, telah
dilakukan sejak istilah tersebut pertama kali diciptakan. Menurut definisi, IoT
berarti mengimplementasikan fungsionalitas pada objek sehari-hari melalui
interkoneksi sehingga dapat mengirim dan menerima data.
Konsep Iot ini sebetulnya cukup sederhana dengan cara kerja mengacu
pada 3 elemen utama pada arsitektur IoT, yakni: Barang Fisik yang dilengkapi
modul IoT, Perangkat Koneksi ke Internet seperti Modem atau Router, dan Cloud
Data Center tempat untuk menyimpan aplikasi beserta data base.
P r a k t i k u m R o b o t i k a | 11
hanyalah menjadi pengatur dan pengawas dari mesin-mesin yang bekerja secara
langsung tersebut.
Agar sebuah mesin atau alat bisa disebut IOT(Internet of Thing) ada
unsur-unsur dasar terkait hal tersebut seperti kecerdasan buatan, konektivitas,
sensor, keterlibatan aktif serta pemakaian perangkat berukuran kecil. Berikut
penjelasan masing-masing unsur pembentuk dasar tersebut:
b. Konektivitas
c. Sensor
Pada bab kali ini kita akan menggunakan Google Cloud Platform sebagai
media penyimpanan untuk melakukan salah satu percobaan praktikum, sebelum
P r a k t i k u m R o b o t i k a | 12
itu alangkah baiknya kita lebih mengenal apa itu GCP?.
Google Cloud Platform adalah kumpulan layanan berbasis cloud modular yang
menyediakan beberapa layanan seperti komputasi, penyimpanan, jaringan,
pengembangan aplikasi, Big Data, dan masih banyak lagi, yang berjalan di
infrastruktur Cloud yang sama yang digunakan Google secara internal untuk
produk pengguna akhir, seperti Google Cari, Foto, Gmail dan YouTube,
dll.Layanan GCP dapat diakses oleh pengembang perangkat lunak, administrator
cloud, dan profesional TI melalui Internet atau melalui koneksi jaringan khusus.
Sebagian besar orang mecari layanan pusat data cloud karena ketersediaan
perkiraan biaya, spesifikasi perangkat keras, dan kontrol tingkat lanjut. Namun,
mereka tidak memiliki fitur yang diperlukan untuk menjalankan dan memelihara
sumber daya di pusat data tersebut. GCP, di sisi lain, adalah platform cloud yang
mempunyai fitur lengkap yang dibutuhkan para pengguna seperti kapasitas,
kemanan, jaringan, bandwith, dan Client Suppot
5.5.4 Firebase
P r a k t i k u m R o b o t i k a | 13
PERCOBAAN 5.1
Face Recognition with OpenCv
Langkah Kerja :
https://github.com/muropraktikum/PTA-2022-2023.git
2. Unziplah file zip yang sudah didownload, setelah di unzip maka akan ada
susunan directory kurang lebih seperti berikut
3. Pada tahap pertama mari kita membuat program untuk mendapatkan data
terkait wajah kita. Bukalah folder “Program Face Recognition”
P r a k t i k u m R o b o t i k a | 14
Code DataCollector.py
Program
import cv2
import os
cam = cv2.VideoCapture(0)
cam.set(3,640)
cam.set(4,480)
face_detector = cv2.CascadeClassifier('Cascades\haarcascade_frontalface_default.xml')
count = 0
while(True):
ret, img = cam.read()
if k == 27:
break
elif count>=30:
break
print("\n keluar...")
cam.release()
cv2.destroyAllWindows()
P r a k t i k u m R o b o t i k a | 15
5. Silahkan run program diatas dan masukkan Id gambar untuk data wajah yang
anda akan disimpan.
7. Setelah kita mendapatkan data wajah selanjutnya kita akan mentraining data
tersebut agar komputer dapat mengenali menggunakan algoritma LBPH,
Bukalah File DataTrainer.py lalu ketiklah program dibawah ini.
CODE DataTrainer.py
Program
import numpy as np
import cv2
import os
from PIL import Image
path = 'dataset'
recognizer = cv2.face.LBPHFaceRecognizer_create()
detector = cv2.CascadeClassifier('Cascades\haarcascade_frontalface_default.xml')
def getImageAndLabels(path):
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
faceSamples = []
ids = []
for imagePath in imagePaths:
PIL_img = Image.open(imagePath).convert('L') #grayscale
img_numpy = np.array(PIL_img, 'uint8')
id = int (os.path.split(imagePath)[-1].split(".")[1])
faces = detector.detectMultiScale(img_numpy)
faces,ids = getImageAndLabels(path)
recognizer.train(faces, np.array(ids))
recognizer.write('trainer/trainer.yml')
recognizer.write('trainer/trainer.yml')
Code Recognizer.py
Program
import numpy as np
import cv2
import os
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/trainer.yml')
cascadePath = "Cascades\haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);
font = cv2.FONT_HERSHEY_SIMPLEX
id = 0
#Tulislah nama anda sesuai indeks yang anda gunakan pada id data wajah kalian
#contoh jika kalian memberikan id data wajah 1 maka tulislah nama kalian pada indeks 1
cam = cv2.VideoCapture(0)
minW = 0.1*cam.get(3)
minH = 0.1*cam.get(4)
while True:
ret, img = cam.read()
gray = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor = 1.2,
minNeighbors = 5,
minSize = (int(minW),int(minH))
)
for (x,y,w,h) in faces:
cv2.rectangle(img, (x,y), (x+w, y+h), (0,255,0), 2)
id, confidence = recognizer.predict(gray[y:y+h,x:x+w])
cv2.putText(
img,
str(id),
(x+5, y-5),
font,
1,
(255,255,255),
2)
cv2.putText(
img,
str(confidence),
(x+5, y+h-5),
font,
1,
(255,255,0),
1)
cv2.imshow('camera',img)
cam.release() P r a k t i k u m R o b o t i k a | 18
cv2.destroyAllWindows()
k = cv2.waitKey(10) & 0xff #'esc' untuk keluar
if k == 27:
break
cam.release()
cv2.destroyAllWindows()
10. Jalankan Program diatas lalu tampilkan wajah kalian didepan camera
selanjutnya komputer akan mendeteksi dan mengenali wajah sesuai data
wajah yang sudah didapat.
Output :
P r a k t i k u m R o b o t i k a | 19
PERCOBAAN 5.2
Face Recognition Berbasis Web
Langkah Kerja:
3. Pada tahap pertama mari kita membuat program untuk mendapatkan data
terkait wajah kita. Bukalah File DataCollector.py lalu ketiklah program seperti
DataCollector.py percobaan sebelumnya.
4. Silahkan run program dan masukkan Id gambar untuk data wajah anda yang
akan disimpan.
5. Setelah kita mendapatkan data wajah selanjutnya kita akan mentraining data
tersebut agar komputer dapat mengenali menggunakan algoritma LBPH,
Bukalah File DataTrainer.py lalu ketiklah program sama seperti
DataTrainer.py percobaan sebelumnya.
P r a k t i k u m R o b o t i k a | 20
8. Jalnkan program Recognizer.py dan tunggu hingga selesai.
CODE main.py
Program
import flask
from flask import Flask, render_template, Response
from FaceSmileEyeDetection import VideoCamera
from Recognizer import VideoRecognizer
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
def gen(camera):
while True:
frame = camera.get_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
@app.route('/video_feed')
def video_feed():
return Response(gen(VideoCamera()),
mimetype='multipart/x-mixed-replace;boundary=frame')
@app.route('/face_recognition')
def recognizer():
return render_template('recognizer.html')
@app.route('/video_recognition')
def video_recognition():
return Response(gen(VideoRecognizer()),
mimetype='multipart/x-mixed-replace;boundary=frame')
if __name__ == '__main__':
app.run(host='0.0.0.0', port='5000', debug=True)
9. Bukalah file ‘main.py’ dan isi file dengan mengetik program di bawah ini.
P r a k t i k u m R o b o t i k a | 21
11. Buka alamat web yang tersedia pada python shell kalian seperti gambar di
bawah dengan menggunakan browser yang biasa anda gunakan.
Output :
P r a k t i k u m R o b o t i k a | 22
PERCOBAAN 5.3
Face Recognition Menggunakan Google Cloud Platform (IoT)
Langkah Kerja:
1. Pastikan PC anda sudah terinstal Python 3 (minimum versi python 3.7).
P r a k t i k u m R o b o t i k a | 23
2. Lalu pilih Select a project dan klik New Project
P r a k t i k u m R o b o t i k a | 24
5. Masukan nama service account dengan “datatraining” lalu klik create and
continue
P r a k t i k u m R o b o t i k a | 25
7. Lalu kita download file .json pada action dan pilih Manage keys, lalu pilih
add key dan klik create new key
9. Setelah men setting pada google console cloud kita buka firebase untuk
menyimpan data peserta yang akan di training dengan membuka:
console.firebase.google.com
P r a k t i k u m R o b o t i k a | 26
10. Klik Create Project
11. Pilih projek yang tersedia dan klik Continue sampai 4 step, terima Terms
Google analytics dan klik add firebase
13. Pilih Start in test mode lalu klik Next, dan pilih region Asia-southeast
P r a k t i k u m R o b o t i k a | 27
Program Pada Python:
Program DataTrainer.py
Program
#PERHATIKAN FILE .JSON SERTA PATH DARI FIREBASE STORAGE
from firebase_admin import credentials, initialize_app, storage
from PIL import Image
import numpy as np
import cv2
import os
path = 'dataset'
#Sesuaikan dengan nama path database dan file json kalian
cred = credentials.Certificate("credentials/datatraining-357313-firebase-adminsdk-hxqrb-
ae36e15102.json")
initialize_app(cred, {'storageBucket': 'datatraining-357313.appspot.com'})
recognizer = cv2.face.LBPHFaceRecognizer_create()
detector = cv2.CascadeClassifier('Cascades\haarcascade_frontalface_default.xml')
def getImageAndLabels(path):
imagePaths = [os.path.join(path, f) for f in os.listdir(path)]
faceSamples = []
ids = []
for imagePath in imagePaths:
PIL_img = Image.open(imagePath).convert('L') # grayscale
img_numpy = np.array(PIL_img, 'uint8')
P r a k t i k u m R o b o t i k a | 28
id = int(os.path.split(imagePath)[-1].split(".")[1])
faces = detector.detectMultiScale(img_numpy)
for imagePath in imagePaths:
PIL_img = Image.open(imagePath).convert('L') # grayscale
img_numpy = np.array(PIL_img, 'uint8')
id = int(os.path.split(imagePath)[-1].split(".")[1])
faces = detector.detectMultiScale(img_numpy)
for (x, y, w, h) in faces:
faceSamples.append(img_numpy[y:y + h, x:x + h])
ids.append(id)
return faceSamples, ids
fileName = "trainer.yml"
bucket = storage.bucket()
blob = bucket.blob(fileName)
blob.upload_from_filename(fileName)
blob.make_public()
print("\n URL untuk Mendownload File : ", blob.public_url)
os.remove("trainer.yml")
5. Jalankan Program diatas dan tunggulah hingga data trainer kalian selesai di
masukan kedalam Firebase kalian.
7. Setelah itu Jalankan Program Recognizer.py dan tunggullah hingga selesai. Jika
berhasil maka database di firebase berhasil terkoneksi dan cobalah untuk
mendeteksi wajah kalian.
P r a k t i k u m R o b o t i k a | 29
Program Recognizer.py
Program
from firebase_admin import credentials, initialize_app
from google.cloud import storage
import numpy as np
import cv2
import os
path = "Program Face Recognition (IoT)"
client = storage.Client('trainingdata')
bucket = client.get_bucket('datatraining-357313.appspot.com')
blob = bucket.blob("trainer.yml")
if not os.path.exists('trainer'):
os.makedirs('trainer')
blob.download_to_filename("trainer/trainer.yml")
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer/trainer.yml')
cascadePath = "Cascades\haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(cascadePath);
P r a k t i k u m R o b o t i k a | 30
font = cv2.FONT_HERSHEY_SIMPLEX
id = 0
#Tulislah nama anda sesuai indeks yang anda gunakan pada id data wajah kalian; contoh jika
kalian memberikan id data wajah 1 maka tulislah nama kalian pada indeks 1
cam = cv2.VideoCapture(0)
minW = 0.1*cam.get(3)
minH = 0.1*cam.get(4)
while True:
faces = faceCascade.detectMultiScale(
gray,
scaleFactor = 1.2,
minNeighbors = 5,
minSize = (int(minW),int(minH))
id = names[id]
else:
id = "Unknown"
P r a k t i k u m R o b o t i k a | 31
cv2.putText(
img,
str(id),
(x+5, y-5),
font,
1,
(255,255,255),
cv2.putText(
img,
str(confidence),
(x+5, y+h-5),
font,
1,
(255,255,0),
cv2.imshow('camera',img)
if k == 27:
break
cam.release()
cv2.destroyAllWindows()
P r a k t i k u m R o b o t i k a | 32
Output :
Program :
P r a k t i k u m R o b o t i k a | 33
Screenshot Output Program :
P r a k t i k u m R o b o t i k a | 34