Deteksi dan estimasi jarak speed bump (polisi tidur) adalah fitur penting untuk meningkatkan keselamatan dan kenyamanan pengendara kendaraan roda dua. Menggunakan algoritma deep learning, kita dapat membuat sistem yang mampu mendeteksi speed bump dalam waktu nyata dan mengestimasi jaraknya dari kendaraan. Artikel ini akan membahas desain dan implementasi sistem ini.
Komponen Utama
- Kamera: Kamera yang dipasang pada kendaraan roda dua untuk menangkap gambar jalan.
- Deep Learning Framework: TensorFlow, Keras, atau PyTorch untuk membangun dan melatih model.
- Dataset: Gambar dan video speed bump untuk melatih model.
- Model: Convolutional Neural Network (CNN) untuk deteksi objek dan regresi untuk estimasi jarak.
- Python: Bahasa pemrograman untuk pengembangan sistem.
Langkah-langkah Implementasi
- Persiapan Dataset
- Kumpulkan dataset gambar dan video yang berisi speed bump dengan berbagai jarak dan kondisi jalan.
- Anotasi dataset untuk menandai lokasi speed bump dan jaraknya dari kamera.
- Preprocessing Data
- Normalisasi dan augmentasi data untuk meningkatkan performa model.
- Bagi dataset menjadi set pelatihan, validasi, dan pengujian.
- Desain Arsitektur Model
- Gunakan CNN untuk mendeteksi speed bump dalam gambar.
- Tambahkan lapisan regresi untuk mengestimasi jarak speed bump dari kamera.
- Pelatihan Model
- Latih model menggunakan dataset yang telah disiapkan.
- Gunakan loss function yang sesuai untuk deteksi objek dan regresi.
- Implementasi Sistem Deteksi dan Estimasi Jarak
- Integrasikan model dengan sistem kamera pada kendaraan roda dua.
- Buat skrip Python untuk menangkap gambar secara real-time, melakukan deteksi dan estimasi jarak.
Implementasi Algoritma
Berikut adalah contoh implementasi dalam Python menggunakan TensorFlow dan Keras.
python
Salin kode
import cv2 import numpy as np import tensorflow as tf from tensorflow.keras.models import Model from tensorflow.keras.layers import Input, Conv2D, MaxPooling2D, Flatten, Dense # Fungsi untuk membuat model CNN def create_model(input_shape): inputs = Input(shape=input_shape) x = Conv2D(32, (3, 3), activation='relu')(inputs) x = MaxPooling2D((2, 2))(x) x = Conv2D(64, (3, 3), activation='relu')(x) x = MaxPooling2D((2, 2))(x) x = Conv2D(128, (3, 3), activation='relu')(x) x = MaxPooling2D((2, 2))(x) x = Flatten()(x) x = Dense(256, activation='relu')(x) # Output untuk deteksi objek (klasifikasi) detection_output = Dense(1, activation='sigmoid', name='detection')(x) # Output untuk estimasi jarak (regresi) distance_output = Dense(1, name='distance')(x) model = Model(inputs, [detection_output, distance_output]) model.compile(optimizer='adam', loss={'detection': 'binary_crossentropy', 'distance': 'mse'}, metrics={'detection': 'accuracy', 'distance': 'mse'}) return model # Fungsi untuk preprocessing gambar def preprocess_image(image, target_size): image = cv2.resize(image, target_size) image = image / 255.0 # Normalisasi return image # Buat model input_shape = (128, 128, 3) # Misalkan ukuran input gambar adalah 128x128x3 model = create_model(input_shape) # Latih model dengan data yang sudah diproses # Assume X_train, y_train_detection, y_train_distance are prepared # model.fit(X_train, {'detection': y_train_detection, 'distance': y_train_distance}, epochs=10, batch_size=32) # Fungsi untuk deteksi dan estimasi jarak speed bump def detect_and_estimate_distance(model, image): preprocessed_image = preprocess_image(image, (128, 128)) preprocessed_image = np.expand_dims(preprocessed_image, axis=0) detection, distance = model.predict(preprocessed_image) is_speed_bump = detection[0][0] > 0.5 # Threshold untuk deteksi estimated_distance = distance[0][0] return is_speed_bump, estimated_distance # Implementasi dengan kamera cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() if not ret: break is_speed_bump, estimated_distance = detect_and_estimate_distance(model, frame) if is_speed_bump: cv2.putText(frame, f"Speed Bump Detected! Distance: {estimated_distance:.2f}m", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) cv2.imshow('Speed Bump Detection', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows()
Penjelasan Kode
- Arsitektur Model:
create_modelmembuat CNN dengan dua output: satu untuk deteksi speed bump (klasifikasi) dan satu untuk estimasi jarak (regresi).- Model dikompilasi dengan loss function
binary_crossentropyuntuk deteksi danmean squared error (mse)untuk regresi.
- Preprocessing Gambar:
- Gambar diubah ukurannya dan dinormalisasi sebelum digunakan sebagai input model.
- Fungsi Deteksi dan Estimasi Jarak:
detect_and_estimate_distancemelakukan deteksi dan estimasi jarak speed bump dalam gambar input.
- Integrasi dengan Kamera:
- Skrip menangkap gambar dari kamera secara real-time, melakukan deteksi dan estimasi jarak, lalu menampilkan hasilnya pada frame video.
Kesimpulan
Menggunakan deep learning untuk deteksi dan estimasi jarak speed bump pada kendaraan roda dua memberikan solusi yang efisien dan real-time untuk meningkatkan keselamatan pengendara. Implementasi ini menggabungkan teknik deteksi objek dan regresi untuk menyediakan informasi penting kepada pengendara, sehingga mereka dapat merespons secara tepat saat mendekati speed bump. Dengan dataset yang tepat dan pelatihan model yang baik, sistem ini dapat diimplementasikan secara luas untuk berbagai kondisi jalan dan lingkungan.