Skip to content

Penjelasan

Berikut adalah penjelasan lengkap kode Driver Monitoring System yang kamu buat + step-by-step penggunaan sebagai dokumentasi teknis. Ini bisa langsung dipakai untuk laporan project atau dokumentasi engineering.

1. Deskripsi Sistem

Program ini adalah Driver Monitoring System berbasis Computer Vision yang digunakan untuk mendeteksi:
✅ Kedipan mata (Blink Detection) ✅ Kantuk (Drowsiness Detection) ✅ Menguap (Yawn Detection) ✅ Arah kepala (Head Pose Estimation) ✅ Distraksi pengemudi ✅ Alarm suara jika mengantuk
Teknologi yang digunakan:
Table 3
Library
Fungsi
OpenCV
Pengolahan video
dlib
Face landmark detection
numpy
Perhitungan matriks
scipy
Hitung jarak landmark
pygame
Alarm suara
There are no rows in this table

2. Konfigurasi Sistem

Parameter Sistem

FACE_DOWNSAMPLE_RATIO = 1.5
RESIZE_HEIGHT = 460
Penjelasan:
FACE_DOWNSAMPLE_RATIO
Memperkecil gambar untuk mempercepat deteksi wajah
RESIZE_HEIGHT
Tinggi frame kamera
Mengontrol kecepatan sistem

Parameter Deteksi

blinkTime = 0.15
drowsyTime = 1.5
yawnTime = 1.0
Digunakan sebagai referensi waktu:
Blink detection
Drowsiness detection
Yawn detection

File Yang Digunakan

modelPath = "models/shape_predictor_68_face_landmarks.dat"
sound_path = "alarm.wav"
File wajib:

1. Model Landmark

shape_predictor_68_face_landmarks.dat
Digunakan untuk:
Deteksi posisi mata
Deteksi mulut
Deteksi kepala

2. File Alarm

alarm.wav
Digunakan untuk:
Alarm saat pengemudi mengantuk

3. Sistem Audio

pygame.mixer.init()
pygame.mixer.music.load(sound_path)
Fungsi:
Menginisialisasi audio
Load file alarm
Alarm akan aktif jika:
Driver mengantuk
atau
Menguap lama

4. Sistem Deteksi Wajah

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(modelPath)
Fungsi:
Mendeteksi wajah
Mengambil 68 titik landmark wajah
Contoh landmark:
Mata kiri : 36–41
Mata kanan : 42–47
Mulut : 48–59

5. Landmark Index

leftEyeIndex = [36, 37, 38, 39, 40, 41]
rightEyeIndex = [42, 43, 44, 45, 46, 47]
mouthIndex = [48,49,50,51,52,53,54,55,56,57,58,59]
Digunakan untuk:
Mengambil posisi mata
Mengambil posisi mulut

6. Variabel Sistem

blinkCount = 0
yawnCount = 0
Counter:
Jumlah kedipan
Jumlah menguap
eyeState = 0
mouthState = 0
Digunakan untuk:
Menghitung frame mata tertutup
Menghitung frame mulut terbuka
drowsy = False
alarm_on = False
Status:
Driver mengantuk
Alarm aktif

7. Fungsi Head Pose

get_head_pose()

Digunakan untuk:
Menghitung arah kepala
Output:
pitch = atas bawah
yaw = kiri kanan
roll = miring
Contoh:
Table 4
Nilai
Arti
yaw > 20
lihat samping
pitch negatif
menunduk
There are no rows in this table

8. Fungsi EAR (Eye Aspect Ratio)

def eye_aspect_ratio(eye):
Digunakan untuk:
Menentukan mata terbuka atau tertutup
Rumus:
EAR = (A + B) / (2C)
Jika EAR kecil:
Mata tertutup
Jika EAR besar:
Mata terbuka

9. Fungsi MAR (Mouth Aspect Ratio)

def mouth_aspect_ratio(mouth):
Digunakan untuk:
Menentukan mulut terbuka atau tertutup
Jika MAR besar:
Menganga / menguap

10. Fungsi Landmark Detection

def get_landmarks(frame):
Fungsi:
Convert ke grayscale
Resize
Deteksi wajah
Ambil landmark
Output:
68 titik wajah

11. Sistem Kamera

cap = cv2.VideoCapture(0)
Fungsi:
Mengaktifkan kamera
Jika gagal:
Program berhenti

12. Kalibrasi Otomatis

Program melakukan kalibrasi:
Calibration... Keep eyes open & mouth closed
Tujuan:
Menyesuaikan threshold tiap orang.
Data diambil:
60 frame

Adaptive Threshold

adaptiveEAR = np.mean(ear_samples) * 0.75
adaptiveMAR = np.mean(mar_samples) + 0.15
Artinya:
Threshold EAR dan MAR otomatis.
Lebih akurat dibanding threshold tetap.

13. Main Loop

Program berjalan terus:
while True:

14. Deteksi Kedipan

if ear < adaptiveEAR:
Jika mata tertutup:
eyeState bertambah
Jika terbuka:
blinkCount bertambah

15. Deteksi Kantuk

if eyeState > 15:
drowsy = True
Jika mata tertutup lama:
Driver mengantuk

16. Deteksi Menguap

if mar > adaptiveMAR:
Jika mulut terbuka lama:
yawnCount++

17. Head Direction Detection

if abs(yaw) > 20:
Jika lihat samping:
LOOKING SIDEWAYS

18. Head Down Detection

if pitch > -20:
Jika menunduk:
HEAD DOWN

19. Alarm System

Jika:
Mengantuk
atau
Menguap lama
Maka:
Alarm menyala
pygame.mixer.music.play(-1)

20. Tampilan Sistem

Yang ditampilkan:
EAR
MAR
Blink count
Want to print your doc?
This is not the way.
Try clicking the ··· in the right corner or using a keyboard shortcut (
CtrlP
) instead.