Josephine 1606903085
M. Syafieq Ridho 1606895051
Naufal Alharits S. 1606874173
Departemen Fisika
Fakultas Matematika Dan Ilmu Pengetahuan Alam
Universitas Indonesia
2019
DAFTAR ISI
i
2
BAB 1
PENDAHULUAN
1.1. Latar Belakang
Pemantauan kecepatan kendaraan digunakan oleh polisi untuk melakukan
penegakan hukum lalu lintas. Dengan meningkatnya kebutuhan di kehidupan
perkotaan sehari-hari, dengan bertambahnya jumlah orang dan juga meningkatnya
jumlah kendaraan maka over speeding menjadi alasan utama kecelakaan.
Pengendalikan kecepatan kendaraan telah menjadi salah satu masalah yang sangat
penting untuk manajemen lalu lintas.
Dari beberapa dekade terakhir, alat yang digunakan untuk mengukur kecepatan
kendaraan bergerak adalah radar Doppler. Radar Doppler sendiri adalah sebuah
perangkat genggam yang mengirim sinar radio ke Gerakan kendaraan lalu menghitung
kecepatan kendaraan dengan mengukur perubahan frekuensi gelombang yang
dipantulkan. Itu merupakan perangkat andal selama tidak ada kendaraan lain di bidang
pandang.
BAB 2
TINJAUAN PUSTAKA DAN METODE
2.1. Tinjauan Pustaka dan Metode
Haarcascade classifier untuk mengidentifikasi kendaraan
Haarcascade adalah sebuah algoritma machine learning yang dapat digunakan
untuk mendeteksi obyek pada gambar ataupun video. Algoritma ini juga menggunakan
konsep dari fitur yang diajukan oleh Paul Viola dan Michael Jones pada paper mereka
dengan judul “Rapid Object Detection using a Boosted Cascade od Simple Features”
yang dipublikasikan pada tahun 2001. Metode machine learning ini memiliki dasar
pendekatan dimana fungsi cascade dilatih dengan gambar positif dan negatif.
Selanjutnya digunakan untuk mendeteksi obyek di gambar yang lain. Biasanya metode
ini digunakan untuk mendeteksi wajah dan bagian tubuh pada suatu gambar tetapi dapat
juga digunakan untuk obyek lain.
Antara semua fitur yang dikalkukasi, hampir semua akan mendapatkan hasil
yang irelevan. Contohnya dapat dilihat pada gambar dibawah. Pada gambar kiri, fitur
yang dipilih fokus pada properti bahwa biasanya daerah mata akan cenderung memiliki
warna yang lebih gelap dibandingkan bagian pipi. Pada gambar kanan, fitur yang
dipilih fokus pada properti bahwa biasanya daerah mata akan cenderung memiliki
warna yang lebih gelap dibandingkan batang hidung. Tetapi jika fitur ini diaplikasikan
pada daerah pipi, maka hasil yang didapatkan akan menjadi irelevan.
Bagaimana caranya untuk memilih fitur yang terbaik dari sekian banyak fitur
yang didapatkan dari 1 gambar? hal ini dapat dicapai dengan menggunakan konsep
yang disebut dengan adaboost.
6
Adaboost training
Boosting adalah pembelajaran metode ensemble meta algoritma untuk terutama
mengurangi bias, dan juga varians. Berbeda halnya dengan bagging dan random forest
yang mendapatkan hasil prediksi dari proses bootsrap, boosting mengacu pada
kumpulan algoritma yang dapat mengkorversi weak learners untuk strong learners.
Prinsip utama dari boosting adalah menyesuaikan urutan weak learners hanya sedikit
lebih baik daripada tebakan acak, sementara strong learners dekat dengan kinerja
sempurna seperti pohon keputusan kecil. Setiap kali pembuatan pohon, data yang
digunakan tetap seperti semula tetapi memiliki sebaran bobot yang berbeda dalam tiap
iterasi. Penggunaan bobot juga dilakukan pada saat proses penggabungan prediksi
akhir dari banyak pohon yang dihasilkan melalui klasifikasi atau penjumlahan regresi.
Boosting juga dikenal dengan sebutan AdaBoost. Pada proses deteksi, terdapat kotak
dari ukuran target yang dipindahkan ke seluruh gambar dan untuk setiap daerah dari
gambar, nilai haar feature akan dihitung. Perbedaan ini lalu akan dibandingkan dengan
threshold yang sudah dipelajari yang memisahkan obyek dan non obyek. Karena haar
feature adalah classifier lemah, dibutuhkan banyak haar feature untuk mendeskripsikan
obyek dengan akurasi yang tinggi dan disusun menjadi cascade classifier untuk
membentuk classifier yang lebih kuat.
Cascade classifier
Cascade calssifier terdiri dari beberapa tahap yang adalah gabungan dari weak
learners. Weak learners yang ada adalah pengklasifikasi sederhana yang dapat disebut
decision stumps. Setiap tahap dilatih tengan teknik yang disebut dengan boosting.
Boosting memiliki kemampuan untuk melatih klasifikasi dengan akurasi tinggi dengan
mengambil rata-rata yang ada pada keputusan yang dibuat oleh weak learners. Setiap
tahap dari klasifikasi menglabel daerah yang ditentukan dari lokasi kotak yang
bergerak dengan nilai positif atau negatif. Nilai positif mengindikasikan bahwa obyek
telah ditemukan dan negatif mengindikasikan bahwa tidak ada obyek yang ditemukan.
Jika dinilai negatif, maka klasifikasi dari daerah tersebut sudah selesai dan detektor
akan bergerak ke daerah selanjutnya. Jika dinilai positif, maka klasifikasi akan
7
Agar sistem dapat bekerja dengan baik, setiap tahap harus memiliki persentase
false negatif yang rendah. Pada saat sebuah tahap salah melabel obyek sebagai negatif,
maka klasifikasi akan berhenti dan kesalahan tidak bisa diperbaiki lagi. Tetapi, setiap
tahap boleh memiliki persentase false positif yang tinggi. Karena walaupun detektor
salah menglabel non obyek sebagai positif, kesalahan ini dapat diperbaiki di tahap
selanjutnya. Menambah tahap dapat mengurangi persentase dari false positive tetapi
juga mengurangi persentase dari true positif.
Cascade classifier training membutuhkan set dari sampel positif dan negatif.
Set positif harus disediakan dengan menandai daerah yang ingin dijadian nilai positif
tersebut. Hal ini dapat dilakukan dengan menggunakan image labeler untuk menglabel
obyek dengan batasnya. Selanjutnya, image labeler akan memberikan tabel output yang
dapat digunakan untuk mengidentifikasi sampel positif. Untuk mendapatkan akurasi
detektor yang dapat diterima, jumlah tahap, jenis fitur, dan parameter yang lain harus
ditentukan.
self.tracker.update(image)
pts = self.tracker.get_position()
(x,y,xb,yb) = (pts.left(),pts.top(),pts.right(),pts.bottom())
#return the points of the form (x,y,w,h)
return np.int0((x,y,(xb-x),(yb-y)))
Kalkukasi kecepatan
Untuk menghitung kecepatan kendaraan(mobil), dilakukan dengan metode
berdasarkan perpindahan objek pada video yang bergantung pada frame per second dan
pixel per meter, sehingga dalam kalkulasi tersebut didapatkan sebuah estimasi untuk
menentukan kecepatan mobil. Terdapat ppm (pixels per meter), d_pixel(perpindahan
jarak dari suatu pixel ke pixel lain pada suatu frame dalam video) dan d_meters(jarak).
Nilai dari ppm dapat bervariasi pada setiap jalan, dan harus disesuaikan jika ingin
mengukur kecepatan mobil pada jalan yang berbeda. Untuk menghitung nilai ppm,
terdapat beberapa informasi yang harus diketahui yaitu panjang jalan sesungguhnya
dan jumlah pixel dari input video. Dari kedua informasi tersebut, ppm dapat diketahui
dengan membagi jumlah pixel dengan jarak sesungguhnya.
D_pixel akan menggambarkan jarak dalam satuan pixel yang sudah ditempuh
oleh kendaraan pada satu frame dari video processing. Untuk mengestimasi kecepatan
dengan satuan yang standar, maka satuan d_pixel harus dikonversikan ke d_meter
dengan menggunakan nilai ppm yang sudah didapatkan sebelumnya. Selanjutnya,
kecepatan dapat dihitung dengan persamaan speed = d_meters * fps * 3.6. satuan yang
akan didapatkan dari persamaan ini adalah kecepatan dalam km/jam. Konstanta 3.6
digunakan untuk mengkonversikan nilai m/s menjadi km/jam.
berdasarkan panjang jalan dibagi dengan frame height video, Sehingga didapatkan
konstanta dari ppm yaitu 14,7.
BAB 3
HASIL DAN PEMBAHASAN
3.1. Hasil
3.2. Pembahasan
Seperti yang dapat dilihat pada gambar 8 dan 9, bahwa gambar tersebut
merupakan hasil video processing kecepatan mobil dengan menggunakan OpenCV dan
Python. Pada hasil pengujian ini, menurut kami dapat merepresentasikan kecepatan asli
dari mobil yang dapat diperkirakan dari kecepatan mobil rata-rata pada daerah
margonda jika jalanan dalam kondisi ramai lancar, walaupun kami tidak dapat
membuktikannya karena kami tidak mencobanya dengan menggunakan mobil sendiri
yang diatur kecepatannya. Object tracking pada video sudah bekerja dengan sangat
baik, tidak ada mobil satu pun yang tidak terdeteksi, akan tetapi ada motor yang
dideteksi sebagai mobil, hal ini disebabkan oleh object motor dalam video tidak dalam
resolusi yang baik atau objek yang terdeteksi memiliki ukuran yang hampir sama
dengan data set mobil yang ada pada haarcascade classifier yang digunakan. Dan
mungkin ada beberapa kecepatan yang kurang tepat terdeteksi(atau tidak sesuai dengan
keadaan aslinya), hal ini dipengaruhi oleh pengambilan video dari kamera, angle dari
kamera dan obstacle seperti pohon, banguan, akan mempengaruhi object detection
maupun hasil kalkulasi perhitungan kecepatan mobil itu sendiri.
16
BAB 4
KESIMPULAN DAN SARAN
5.1. Kesimpulan
Dari Proyek yang telah dijalankan, Kami dapat mengambil beberapa
kesimpulan yaitu sebagai berikut:
• Metode Haarcascade dapat digunakan untuk mengidentifikasi object pada suatu
video
• Deteksi kecepatan mobil dapat dilakukan dengan melihat perpindahan
mobil(objek) pada pixel dalam suatu frame, berdasarkan jarak yang diketahui
sebelumnya.
• Hasil kecepatan mobil yang diolah dengan menggunakan video processing
mendapatkan hasil yang dapat menggambarkan kondisi aslinya.
5.2. Saran
Dari Proyek yang telah dijalankan, Kami dapat memberikan beberapa saran untuk
dapat menghasilkan output yang lebih baik lagi, yaitu sebagai berikut:
• Pada proses pengambilan video, haruslah dikondisikan agar terhindar dari
obstacle yang dapat mempengaruhi object tracking, seperti pohon, rumah,
gedung, dan lainnya. Pengambilan video jugalah harus stabil dan angle diambil
dari atas agar object(mobil) dapat diidentifikasi dengan baik.
DAFTAR REFERENSI
1. https://github.com/kraten/vehicle-speed-check diakses pada hari Senin 2
Desember 2019 pukul 8.00.
2. Wu, J., Liu, Z., Li, J., Gu, C., Si, M., & Tan, F. (2009, July). An algorithm for
automatic vehicle speed detection using video camera. In 2009 4th International
Conference on Computer Science & Education (pp. 193-196). IEEE.
3. https://docs.opencv.org/3.4.8/index.html diakses pada hari Senin 2 Desember
2019 pukul 10.00.
4. http://dlib.net/python/index.html diakses pada hari Jumat 13 Desember 2019 pukul
7.00
5. Karim, Mohamed Rehan, and Abbas Dehghani. "Vehicle speed detection in video
image sequences using CVS method." International journal of the Physical
Sciences 5.17 (2010): 2555-2563.
6. Koyuncu, Hakan, and Baki Koyuncu. "Vehicle Speed detection by using Camera
and image processing software."
7. http://www.willberger.org/cascade-haar-explained/ diakses pada hari Minggu 8
Desember 2019 pukul 14.00.
18
LAMPIRAN
Main Program
import cv2
import dlib
import time
import math
carCascade = cv2.CascadeClassifier('./myhaar.xml')
video = cv2.VideoCapture('camera.mp4')
WIDTH = 540
HEIGHT = 960
def trackMultipleObjects():
rectangleColor = (0, 255, 0)
frameCounter = 0
currentCarID = 0
fps = 0
carTracker = {}
carLocation1 = {}
carLocation2 = {}
speed = [None] * 1000
while True:
start_time = time.time()
rc, image = video.read()
if type(image) == type(None):
break
frameCounter = frameCounter + 1
carIDtoDelete = []
if trackingQuality < 7:
carIDtoDelete.append(carID)
y = int(_y)
w = int(_w)
h = int(_h)
x_bar = x + 0.5 * w
y_bar = y + 0.5 * h
matchCarID = None
t_x = int(trackedPosition.left())
t_y = int(trackedPosition.top())
t_w = int(trackedPosition.width())
t_h = int(trackedPosition.height())
if ((t_x <= x_bar <= (t_x + t_w)) and (t_y <= y_bar <=
(t_y + t_h)) and (x <= t_x_bar <= (x + w)) and (y <= t_y_bar <= (y + h))):
matchCarID = carID
if matchCarID is None:
print ('Creating new tracker ' + str(currentCarID))
tracker = dlib.correlation_tracker()
tracker.start_track(image, dlib.rectangle(x, y, x + w, y +
h))
carTracker[currentCarID] = tracker
carLocation1[currentCarID] = [x, y, w, h]
currentCarID = currentCarID + 1
21
t_x = int(trackedPosition.left())
t_y = int(trackedPosition.top())
t_w = int(trackedPosition.width())
t_h = int(trackedPosition.height())
# speed estimation
carLocation2[carID] = [t_x, t_y, t_w, t_h]
end_time = time.time()
for i in carLocation1.keys():
if frameCounter % 1 == 0:
[x1, y1, w1, h1] = carLocation1[i]
[x2, y2, w2, h2] = carLocation2[i]
#else:
# cv2.putText(resultImage, "Far Object", (int(x1 +
w1/2), int(y1)),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2)
cv2.destroyAllWindows()
if __name__ == '__main__':
trackMultipleObjects()