Photo by John Matychuk on Unsplash
Introduction
Background
Lahan parkir adalah sebuah kebutuhan yang terus bertambah seiring berjalannya waktu di Indonesia, utamanya di kota-kota besar. Sebagai negara dengan populasi lebih dari 250 juta jiwa, Indonesia telah menjadi pasar utama untuk industry automobil di ASEAN. Menurut laporan Asean Automotive Federation untuk penjualan kendaraan roda empat atau lebih di wilayah Asia Tenggara selama 2022, Indonesia keluar menjadi negara dengan penjualan mobil terbesar yang mencangkup 30% dari total pasar di kawasan ASEAN, yaitu 1.048.040 unit dari 3.424.935 unit [1]
Uniknya, dalam beberapa kasus, kantong-kantong parkir di kota-kota besar yang sebenarnya ditujukan untuk mengurangi kemacetan akibat parkir liar di badan jalan, malah menjadi penyumbang kemacetan akibat penumpukan kendaraan di pintu masuk maupun pintu keluar area parkir [2], [3].
Photo from Republika.co.id
Selain arus masuk dan keluar kendaraan yang tinggi, proses check-in dan check-out yang masih manual atau kurang efisien ditengarai menjadi akibat utama penumpukan tersebut. Otomasi sistem melalui teknologi unmanned parking system diharapkan dapat menjawab permasalahan penumpukan tersebut dengan perbaikan arus layanan parkir, meningkatkan efisiensi sumber daya, dan utamanya meningkatkan user-experience secara keseluruhan.
Problem Statement
Merangkum masalah - masalah klasik yang kerap muncul pada oprasional lahan parkir pada umumnya seperti: + Lambatnya proses check-in dan check-out yang rawan menimbulkan penumpukan kendaraan di titik-titik keluar/masuk gedung/lahan parkir + Penggunakan kertas sebagai tiket parkir yang rawan resiko kehilangan atau berpindah tangan + Kebutuhan sumber daya yang lebih untuk mengoperasikan lahan parkir + Pengalaman pengguna layanan parkir yang kerap harus menghabiskan banyak waktu untuk berputar-putar mencari lahan parkir kosong, hal tersebut tentu saja tidak efisien dalam hal waktu pengguna dan konsumsi bahan bakar kendaraan.
Project Idea
- Meningkatkan efisiensi layanan parkir dengan automasi proses check-in dan check-out untuk mempercepat proses di titik - titik yang rawan menimbulkan penumpukan kendaraan
- Meminimalkan penggunakan kertas sebagai tiket parkir (paperless), untuk mengurangi resiko kehilangan
- Meminimalkan kontak untuk pemesanan dan pembayaran (contactless)
- Meningkatkan pengalaman pengguna dengan menambahkan fitur pemesanan lot parkir khusus (seperti untuk kasus pengguna dengan disabilitas, atau lot parkir untuk mobil listrik) serta alokasi lot parkir otomatis sejak proses check-in
Solusi serupa yang pernah dikembangkan dan akan menjadi salah satu acuan dalam pengembangan model ini adalah seperti dapat ditemukan dalam artikel berikut [4].
Problem Scope
Pada projek kali ini, akan digunakan dataset berupa kumpulan gambar kendaraan dari China yang tersedia secara umum dan dapat diakses di [5]. Kelebihan dataset gambar ini adalah ukurannya yang seragam sehingga menyerupai hasil tangkapan kamera yang akan terpasang di pintu keluar dan masuk lahan parkir sebagai objek pengambilan gambar untuk kemudian diproses dengan model DeppLearning kita.
Data gambar ini nantinya akan di-anotasi secara manual untuk menentukan lokasi kotak plat nomor kendaraan dan hasil akhirnya adalah sebuah dataset yang berisikan informasi bverikut :
file_name= unique file namefile_path= unique file path / lokasi objekwidth= lebar file gambar dalam pxlheight= tinggi file gambar dalam pxlxmin= lokasi plat nomor pada gambar dalam koordinat (x,y)ymin= lokasi plat nomor pada gambar dalam koordinat (x,y)xmax= lokasi plat nomor pada gambar dalam koordinat (x,y)ymax= lokasi plat nomor pada gambar dalam koordinat (x,y)label= variabel target dari model kita yaitu berisikan plat nomor kendaraan
Selanjutnya, model CNN akan digunakan untuk membentuk model DeppLearning guna membaca objek gambar yang sudah tersegmentasi tersebut.
Expected Output
Selain output projek berupa pemodelan DeepLearning dan sebuah dashboard monitoring, keluaran utama yang ingin dicapai adalah peningkatan flow process & user experience secara keseluruhan dalam operasional bisnis lahan parkir yang berdampak positif tidak hanya bagi pengelola tapi juga pengguna layanan.
Business Impact
- Melalui efisiensi proses parkir pelanggan mulai dari check-in - alokasi lot parkir - check-out serta efisiensi sumber daya dengan unmanned parking system, keluaran utama yang diharapkan adalah penurunan waktu proses check-in dan check-out kendaraan.
- Selanjutnya adalah sistem paperless, tanpa tiket, yang selain mengurangi konsumsi kertas untuk mencetak tiket parkir juga menurunkan kemungkinan hilangnya tiket parkir.
- Efisiensi sumber daya dan proses berpengaruh pada operational cost dari bisnis lahan parkir sedangkan peningkatan pengalaman parkir pelanggan akan membawa impact berupa peningkatan kepuasan pelanggan, retention, peluang bisnis premimum seperti parkir berlangganan.
- Perbaikan alur parkir juga diharapkan mampu membawa dampak positif ke lingkungan sekitar dengan mengurangi potensi kemacetan atau penumpukan kendaraan di pintu masuk dan keluar area parkir.
Namun, hal lain yang perlu dipertimbangkan selain berbagai keuntungan diatas adalah masalah keamanan parkir karena dengan meniadakan lapisan pengaman di pintu keluar seperti tiket fisik, kita dihadapkan pada tantangan baru yaitu bagaimana metode verifikasi kendaraan dikemudikan oleh pengendara yang sah. Beberapa opsi seperti :
- Untuk kendaraan yang telah melalui proses reservasi, pelanggan bisa memasukkan kode OTP 2 - 4 digit yang dikirimkan melalui aplikasi mobile/SMS ke automatic gate saat kendaraan check-out
- Mendaftarkan nomor HP dan plat nomor kendaraan ke mobile web perusahaan, agar bisa digunakan untuk mengirim nomor OTP tanpa harus melakukan instalasi aplikasi tambahan
- Jaminan asuransi kehilangan kendaraan bagi pelanggan yang telah melakukan prosedur pengamanan kendaraan dengan standard yang telah ditentukan serta telah melakukan (minimal) pendaftaran nomor HP+plat nomor kendaraan melalui mobile web perusahaan
- Penambahan perangkat kamera dan minimalisasi blind-spot di area parkir
Dashboard
Berikut adalah mock-up papan kontrol yang akan diimplementasikan melalui shinyapps :
Unmanned Parking System Check In Flow
Unmanned Parking System Check In Flow
Beberapa limitasi dalam fitur yang bisa diimplementasikan pada shinyapps mungkin akan mempengaruhi hasil akhir dari dashboard ini serta perlu diingat bahwa dalam sesi demo akhir nanti karena kita tidak terhubung ke kamera secara live dan real-time, maka proses capture objek gambar akan dilakukan dengan mengunggah gambar secara terpisah.
Improved Process
Check-In Flow
Penerapan Unmanned Parking System diharapkan selain membawa efek-efek yang disebutkan di atas juga membawa perubahan dalam alur layanan parkir pelanggan mulai dari titik masuk hingga keluar yang lebih seamless sehingga akan meningkatkan kepuasan pelanggan secara umum.
Unmanned Parking System Check In Flow
Check-Out Flow
Unmanned Parking System Check Out Flow
Exploratory Data Analysis
Proses EDA tidak bisa dipisahkan dari persiapan data yaitu proses anotasi / labelling data gambar untuk mendapatkan segmen / lokasi plat nomor kendaraan.
Import Library
Beberapa library penting yang akan digunakan dalam project ini, namun tidak menutup kemungkinan akan bertambah saat memasuki proses implementasi, adalah sbb:
# Load the library xml2
library(xml2)
# Data wrangling
library(tidyverse)
library(dplyr)
# manipulasi data string
library(stringr)
# Manipulasi data gambar
library(imager)
# Deep learning
library(keras)
# Evaluasi Model
library(caret)
#memilih conda env.
use_condaenv('r-tensorflow')
#nomor scientific
options(scipen = 999)
Read Data
Data yang digunakan untuk training model adalah data yang tersedia secara terbuka dan dapat dipertanggungjawabkan dari [5] yang menggunakan data gambar plat nomor kendaraan dari China.
Untuk menggunakan data gambar tersebut dalam model DeepLearning kita, maka data gambar tersebut harus diberikan anotasi. Anotasi bertujuan untuk memberikan label pada gambar, menentukan batasan kotak yang merupakan objek plat nomor kendaraan. Selanjutnya label tersebut akan disimpan dalam format file .xml dengan menggunakan tools yang tersedia secara online seperti MakeSenseAI. Setelah data gambar kita berikan label/anotasi (i.e license_plate) kemudian data tersebut kita eksport ke dalam format VOC XML yang selanjutnya akan kita gunakan sebagai dataset kita untuk model DeepLearning.
Membuat path untuk mengakses data gambar pada folder ‘Asset/G4_annotation’.
file_list <- list.files("Asset/G4_copy_annot/")
head(file_list)
## [1] "A03484.xml" "A11470.xml" "A1A016.xml" "A25577.xml" "A33916.xml"
## [6] "A38188.xml"
Selanjutnya list nama file dalam folder
‘Asset/G4_annotation’ kita gabungkan menjadi path yang
utuh dan disimpan dalam bentuk list pada object bernama
folder_path.
folder_path <- paste0('Asset/G4_copy_annot/', file_list)
head(folder_path)
## [1] "Asset/G4_copy_annot/A03484.xml" "Asset/G4_copy_annot/A11470.xml"
## [3] "Asset/G4_copy_annot/A1A016.xml" "Asset/G4_copy_annot/A25577.xml"
## [5] "Asset/G4_copy_annot/A33916.xml" "Asset/G4_copy_annot/A38188.xml"
# Mendapatkan nama file
file_name <- map(folder_path,
function(x) paste0(x, list.files(x))
) %>%
unlist()
# 6 file name pertama dan terakhir
head(file_name)
## [1] "Asset/G4_copy_annot/A03484.xml" "Asset/G4_copy_annot/A11470.xml"
## [3] "Asset/G4_copy_annot/A1A016.xml" "Asset/G4_copy_annot/A25577.xml"
## [5] "Asset/G4_copy_annot/A33916.xml" "Asset/G4_copy_annot/A38188.xml"
tail(file_name)
## [1] "Asset/G4_copy_annot/S05288.xml" "Asset/G4_copy_annot/S07531.xml"
## [3] "Asset/G4_copy_annot/S23836.xml" "Asset/G4_copy_annot/S25019.xml"
## [5] "Asset/G4_copy_annot/S28107.xml" "Asset/G4_copy_annot/S55645.xml"
Objek folder_path inilah yang nantinya akan kita
masukkam pada fungsi custom get_xml_info() dibawah untuk
membaca xml file pada folder dan mengekstrak informasi penting
didalamnya yang relevan dengan model kita.
# membuat fungsi untuk membaca dan ekstrak informasi dari xml file
get_xml_info <- function(x){
dfs <- read_xml(x)
file_name <- xml_find_all(dfs, xpath = "//filename") %>% xml_text()
file_path <- xml_find_all(dfs, xpath = "//path") %>% xml_text()
width <- xml_find_all(dfs, xpath = "//size/width") %>% xml_text()
height <- xml_find_all(dfs, xpath = "//size/height") %>% xml_text()
xmin <- xml_find_all(dfs, xpath = "//object/bndbox/xmin") %>% xml_text()
ymin <- xml_find_all(dfs, xpath = "//object/bndbox/ymin") %>% xml_text()
xmax <- xml_find_all(dfs, xpath = "//object/bndbox/xmax") %>% xml_text()
ymax <- xml_find_all(dfs, xpath = "//object/bndbox/ymax") %>% xml_text()
plate_dfs <- data_frame(file_name, file_path, width, height, xmin, ymin, xmax, ymax)
return(plate_dfs)
}
get_xml_info(folder_path[3])
## Warning: `data_frame()` was deprecated in tibble 1.1.0.
## ℹ Please use `tibble()` instead.
## # A tibble: 1 × 8
## file_name file_path width height xmin ymin xmax ymax
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 A1A016.jpg /dcd-lpr-02/A1A016.jpg 1600 1236 1087 351 1259 422
Karena ukuran data yang sangat besar, maka R secara otomatis akan
menyimpan objek plate_dfs dalam bentuk data tibble. Kita
bisa menyimpan objek dalam bentuk dataframe dengan fungsi
as.data.frame().
# mendapatkan seluruh hasil pembacaan xml file
plate_tibb <- map_df(file_name, get_xml_info)
#simpan dalam objek dataframe
plate_data <- as.data.frame(plate_tibb)
head(plate_data)
## file_name file_path width height xmin ymin xmax ymax
## 1 A03484.jpg /dcd-lpr-02/A03484.jpg 1600 1236 887 258 1072 322
## 2 A11470.jpg /dcd-lpr-02/A11470.jpg 1600 1236 846 246 1022 319
## 3 A1A016.jpg /dcd-lpr-02/A1A016.jpg 1600 1236 1087 351 1259 422
## 4 A25577.jpg /dcd-lpr-02/A25577.jpg 1600 1236 1174 404 1359 480
## 5 A33916.jpg /dcd-lpr-02/A33916.jpg 1600 1236 1063 381 1256 451
## 6 A38188.jpg /dcd-lpr-02/A38188.jpg 1600 1236 829 410 1010 480
str(plate_data)
## 'data.frame': 564 obs. of 8 variables:
## $ file_name: chr "A03484.jpg" "A11470.jpg" "A1A016.jpg" "A25577.jpg" ...
## $ file_path: chr "/dcd-lpr-02/A03484.jpg" "/dcd-lpr-02/A11470.jpg" "/dcd-lpr-02/A1A016.jpg" "/dcd-lpr-02/A25577.jpg" ...
## $ width : chr "1600" "1600" "1600" "1600" ...
## $ height : chr "1236" "1236" "1236" "1236" ...
## $ xmin : chr "887" "846" "1087" "1174" ...
## $ ymin : chr "258" "246" "351" "404" ...
## $ xmax : chr "1072" "1022" "1259" "1359" ...
## $ ymax : chr "322" "319" "422" "480" ...
Data utama kita yaitu plate_data adalah sebuah dataframe
yang terdiri atas 564 pengamatan dengan 8 kolom/variabel yaitu:
file_name= unique file namefile_path= unique file path / lokasi objekwidth= lebar file gambar dalam pxlheight= tinggi file gambar dalam pxlxmin= lokasi plat nomor pada gambar dalam koordinat (x,y)ymin= lokasi plat nomor pada gambar dalam koordinat (x,y)xmax= lokasi plat nomor pada gambar dalam koordinat (x,y)ymax= lokasi plat nomor pada gambar dalam koordinat (x,y)
Prepare Data
Selanjutnya, objek plate_data akan kita gunakan dalam
pembuatan model DeepLearning. Karena kita telah melakukan anotasi secara
mandiri maka dapat dipastikan data kita bersih dari missing values,
namun apabila kita ingin memeriksa adanya missing value dalam data kita,
dapat menggunakan fungsi is.na().
Dari hasil inspeksi awal pada data plate_data, diketahui
beberapa kolom numerik masih terbaca sebagai character sehingga kita
perlu merubah tipe data sesuai ke dalam bentuk numerik.
plate_cln <- plate_data %>% mutate_at(c('width', 'height', 'xmin', 'xmax', 'ymin', 'ymax'), as.numeric) %>%
add_column(label = '0')
Dapat kita lihat dalam dataframe kita belum memiliki variabel target
berupa keterangan plat nomor kendaraan selain pada kolom
file_name. Karena kita tahu bahwa plat nomor kendaraan
terdiri dari 6 digit, maka kita akan mengekstrak 6 karakter pertama dari
data bertipe karakter pada kolom file_name dengan
memanfaatkan fungsi str_sub() dari paket
stringr, kemudian menyimpannya dalam kolom baru bernama
label.
# ekstrak 6 karakter pertama dari kolom file_name
plate_cln$label <- str_sub(plate_cln$file_name, 1, 6)
head(plate_cln)
## file_name file_path width height xmin ymin xmax ymax label
## 1 A03484.jpg /dcd-lpr-02/A03484.jpg 1600 1236 887 258 1072 322 A03484
## 2 A11470.jpg /dcd-lpr-02/A11470.jpg 1600 1236 846 246 1022 319 A11470
## 3 A1A016.jpg /dcd-lpr-02/A1A016.jpg 1600 1236 1087 351 1259 422 A1A016
## 4 A25577.jpg /dcd-lpr-02/A25577.jpg 1600 1236 1174 404 1359 480 A25577
## 5 A33916.jpg /dcd-lpr-02/A33916.jpg 1600 1236 1063 381 1256 451 A33916
## 6 A38188.jpg /dcd-lpr-02/A38188.jpg 1600 1236 829 410 1010 480 A38188
Sekarang kita telah mendapatkan variabel target kita yaitu kolom
label.
Dengan fungsi summary() kita dapat melihat rangkuman
statistiks sederhana dari data kita utamanya data bertipe numerikal.
summary(plate_cln)
## file_name file_path width height
## Length:564 Length:564 Min. :1600 Min. :1236
## Class :character Class :character 1st Qu.:1600 1st Qu.:1236
## Mode :character Mode :character Median :1600 Median :1236
## Mean :1600 Mean :1236
## 3rd Qu.:1600 3rd Qu.:1236
## Max. :1600 Max. :1236
## xmin ymin xmax ymax
## Min. : 91.0 Min. :173.0 Min. : 272 Min. :234.0
## 1st Qu.: 814.0 1st Qu.:299.0 1st Qu.: 993 1st Qu.:369.0
## Median : 956.5 Median :369.0 Median :1134 Median :436.0
## Mean : 939.9 Mean :359.7 Mean :1120 Mean :425.2
## 3rd Qu.:1104.0 3rd Qu.:413.0 3rd Qu.:1282 3rd Qu.:477.0
## Max. :1403.0 Max. :474.0 Max. :1587 Max. :536.0
## label
## Length:564
## Class :character
## Mode :character
##
##
##
Bisa dilihat bahwa data file gambar kita memiliki ukuran seragam baik lebar maupun tingginya namun tentunya lokasi plat nomor kendaraan dalam gambar yang dinyatakan dalam koordinat cartesian, (x,y), adalah bervariasi dan patut kita analisa lebih lanjut. Hal ini ideal mengingat dalam prakteknya, data yang dihasilkan oleh kamera pada gate ENTRANCE dan EXIT hi lahan parkir adalah seragam secara ukuran.
Data Visualisation
xmin
Melihat distribusi nilai X_min dari data gambar kita.
hist(plate_cln$xmin)
Terlihat bahwa dari histogram diatas, distribusi nilai
xmin bertipe left-skewed dengan mayoritas data
bernilai pixel besar. Dalam kondisi distribusi tidak normal, maka acuan
nilai tengah yang dipakai adalah median ketimbang mean
karena nilai mean menjadi lebih rawan dalam kondisi kemunculan
data pencilan. Dari data ini bisa dilihat bahwa mayoritas posisi plat
nomor kendaraan dalam gambar dimulai dari koordinat horizontal (x) 950
pada gambar berukuran lebar 1600. Atau bisa dikatakan bahwa sebagian
besar plat nomor kendaraan ada di sisi kanan dari gambar.
xmax
Melihat distribusi nilai X_max dari data gambar kita.
hist(plate_cln$xmax)
Sepertihalnya distribusi nilai xmin, terlihat bahwa dari
histogram bahwa distribusi nilai xmax juga bertipe
left-skewed dengan mayoritas data bernilai pixel besar. Dalam
kondisi distribusi tidak normal, maka acuan nilai tengah yang dipakai
adalah median ketimbang mean yang menjadi lebih rawan
dalam kondisi kemunculan nilai outliers. Dari data ini bisa dilihat
bahwa mayoritas posisi plat nomor kendaraan dalam gambar berakhir pada
koordinat horizontal (x) 1130 dalam gambar berukuran lebar 1600.
ymin
Melihat distribusi nilai Y_min dari data gambar kita.
hist(plate_cln$ymin)
Tidak seperti koordinat horisontalnya yang ditunjukkan dalam sumbu X, posisi plat nomor kendaraan secara vertikal pada gambar berukuran tinggi 1236 pixel ternyata memiliki beberapa puncak dalam kurva sebarannya. Dari histogram diatas terlihat bahwa titik paling bawah dari plat nomor terkonsentrasi pada koordinat vertikal bernilai 250 sampai 450.
ymax
Melihat distribusi nilai Y_max dari data gambar kita.
hist(plate_cln$ymax)
Sama seperti distribusi nilai ymin, posisi titik
vertikal teratas plat nomor kendaraan pada gambar berukuran tinggi 1236
pixel ternyata juga memiliki beberapa puncak dalam kurva sebarannya.
Dari histogram diatas terlihat bahwa titik paling bawah dari plat nomor
terkonsentrasi pada koordinat vertikal bernilai 350 sampai 500. Atau
dapat dikatakan bahwa mayoritas plat nomor kendaraan pada gambar
berlokasi di bawah garis horizontal yang membagi gambar sama besar pada
sisi atas - bawahnya, seperti diilustrasikan pada gambar dibawah.
Unmanned Parking System Check Out Flow
Sample Images
Plot dari 6 sample gambar yang diambil secara random dari data
plate_cln
head(plate_cln$file_name)
## [1] "A03484.jpg" "A11470.jpg" "A1A016.jpg" "A25577.jpg" "A33916.jpg"
## [6] "A38188.jpg"
# Membuat path untuk mengakses file .jpg
img_path <- paste0('Asset/G4 - Copy/', plate_cln$file_name)
head(img_path)
## [1] "Asset/G4 - Copy/A03484.jpg" "Asset/G4 - Copy/A11470.jpg"
## [3] "Asset/G4 - Copy/A1A016.jpg" "Asset/G4 - Copy/A25577.jpg"
## [5] "Asset/G4 - Copy/A33916.jpg" "Asset/G4 - Copy/A38188.jpg"
#Memilih gambar secara random
set.seed(888)
sample_image <- sample(img_path, 6)
# Load gambar ke R
plate_sample <- map(sample_image, load.image)
# Plot gambar
par(mfrow = c(2, 3)) # tampilkan dlm 2 x 3 grid gambar
map(plate_sample, plot)
## [[1]]
## Image. Width: 1600 pix Height: 1236 pix Depth: 1 Colour channels: 3
##
## [[2]]
## Image. Width: 1600 pix Height: 1236 pix Depth: 1 Colour channels: 3
##
## [[3]]
## Image. Width: 1600 pix Height: 1236 pix Depth: 1 Colour channels: 3
##
## [[4]]
## Image. Width: 1600 pix Height: 1236 pix Depth: 1 Colour channels: 3
##
## [[5]]
## Image. Width: 1600 pix Height: 1236 pix Depth: 1 Colour channels: 3
##
## [[6]]
## Image. Width: 1600 pix Height: 1236 pix Depth: 1 Colour channels: 3
Pemodelan
Data Preporcessing
Dalam pembuatan model Neural Network adalah penting untuk mengetahui
dimensi data gambar karena nantinya akan dibutuhkan keseragaman ukuran
input data yang dapat dicapai melalui proses modifikasi ukuran data
lewat Data Augmentation dengan memanfaatkan fungsi
image_data_generator dari TensorFlow. Dalam hal ini kita
akan mencoba untuk menyeragamkan data dimensi data menjadi 224 x 224
pixels, membagi ke dalam batches dgn ukuran 32 instances, dan melakukan
cross-validation yaitu dengan membagi data kita ke dalam 80:20
proporsi data training dan data untuk validasi.
Pada proses Data Augmentation ini kita melakukan beberapa variasi gambar yaitu rotasi/tilting, flip, zoom, agar data train dapat menegnali variasi dari data2 tersebut dan akibatnya model menjadi lebih robust. Hal ini untuk mengantisipasi berbagai kemungkinan di lapangan yng bisa membuat data gambar kita ter-modikasi, baik secara sengaja maupun tidak, dan menjamin bahwa model kita tetap mampu mengenali dan membaca data gambar. Hasil tangkapan gambar kamera yang mengaktifkan mode ‘mirror’ membuat kita mengaktifkan parameter vertical_flip, atau kamera yang tidak terpasang dengan benar (tilted) bisa mengakibatkan pengambilan gambar yang tidak akurat mulai dari gambar bergeser sampai terbalik 180°, sehingga parameter horizontal-flip kita atur bernilai TRUE.
Selanjutnya adalah proses inputasi pada image generator untuk
menghasilkan data tarining dan validasi (cross validation).
Disini kita akan menggunakan data dari folder
Asset/G4 - Copy/ untuk menghasilkan dataset training dan
validasi, dengan proporsi 80:20. Nantinya model akan kita latih dengan
data set tersebut dan coba kita evaluasi dengan dataset validasi yang
berasal dari induk data yang sama.
Setelah model kita menghasilkan performa yang menjanjikan pada
prediksi dengan data validasi, kita akan menggunakan data baru dari
folder LPR-master, yang belum pernah dilihat oleh model
kita sebelumnya, untuk melakukan prediksi dengan model yang akan kita
uji. Data test tersebut adalah data yang benar-benar baru dan belum
pernah dipelajari oleh model kita.
Mask RCNN
Selanjutnya, kami menyiapkan Mask RCNN Framework untuk melatih model Deep Learning kami untuk mendeteksi Plat Nomor dari gambar masukan jika disediakan gambar tampak depan Mobil. Sebagai referensi, kita dapat melihat cara implementasi model R-CNN atau Mask R-CNN dari pihak ketiga yang andal yang dibangun di atas kerangka pembelajaran mendalam Keras.
Implementasi pihak ketiga terbaik dari Mask R-CNN adalah Mask R-CNN Project yang dikembangkan oleh Matterport. Proyek ini adalah open source yang dirilis di bawah lisensi permisif (mis. Lisensi MIT) dan kodenya telah digunakan secara luas di berbagai proyek dan kompetisi Kaggle [6].
Kita akan menggunakan pre-trained model Mask R-CNN sebagai titik awal dalam mengembangkan model untuk set data deteksi objek baru. Dalam hal ini, kami akan menggunakan Mask R-CNN yang dilatih untuk masalah deteksi objek MS COCO [7].
Segmentation of Alphanumerical Characters
- Kita akan menggunakan fungsi pemrosesan gambar openCV.
- Ekstrak karakter dari pelat menggunakan Thresholding, eroding, dilating, blurring gambar untuk menghilangkan noise sehingga kita memiliki Gambar bebas noise.
- Gunakan deteksi kontur dan penyetelan parameter untuk mengekstrak karakter
Character Recognition with CNN
- Kita melatih model CNN untuk mengenali angka dan angka dari data gambar.
- Lewatkan Karakter yang terdeteksi dari tahapan sebelumnya ke model CNN untuk mengenali Karakter tersegmentasi dari Gambar.
Reference
- Asean Auto Federation Report
- Pintu Parkir di Kawasan Mal OFI Mall Penyebab Kemacetan di Jakabaring
- Lima Titik Mal dan Hotel Perparah Kemacetan di Sleman
- Automatic License Number Plate Recognition
- Yuan, Yule, et al. “A Robust and Efficient Approach to License Plate Detection.” IEEE Trans Image Process (2017):1102-1114.
- Mask R-CNN for object detection and instance segmentation on Keras and TensorFlow
- https://cocodataset.org/#home