Saturday, June 20, 2015

Sistem Pendeteksi dan Pergerakan Mobil - Anti Tabrakan



PENDAHULUAN
Sistem anti tabrakan dibutuhkan untuk meminimalisasi terjadinya kecelakaan. Sistem anti tabrakan memberikan ouutput kepada pengemudi mengenai keadaan yang sedang berlangsung dijalan raya. Sistem anti tabrakan berfungsi untuk memperingatkan pengemudi sesaat sebelum kecelakaan terjadi dan diharapkan dapat menghindarkan pengemudi dari kecelakaan. Salah satu penerapan dari sistem anti tabrakan adalah sistem pendeteksi mobil dan pergerakan mobil.
Pada penulisan ini akan melakukan penerapan teknologi video yang berisi sistem informasi untuk memberikan suatu informasi berupa deteksi mobil dan pergerakan mobil. Sistem ini berisi tentang pergerakan kendaraan yang ada di depan mobil pengemudi dan berguna efektif pada siang hari dengan kondisi cuaca cerah. Sistem informasi pendeteksi mobil dan pergerakan mobil diharpkan dapat mengurangi tingkat kecelakaan mobil.

PERANCANGAN
Sistem pendeteksi mobil dan pergerakan merupakan bagian dari sebuah sistem besar, yaitu sistem anti tabrakan. Sistem ini mendapatkan input dari webcam dan merekam pergerakan mobil, dari video yang telah diambil kemudian video tersebut dianalisis. Dari analisis video, kemudian dapat ditentukan objek mobil dan kendaraan beroda empat atau lebih beserta dengan pergerakan untuk kemudian akan memberikan output pada laptop.

Secara umum rancangan sistem dalam diagram alur berikut :
Inisialisasi Kamera
Inisialisasi kamera merupakan proses awal dalam segala hal yang diperlukan untuk menjalankan proses selanjutnya. Pada tahap inisialisasi kamera, untuk memudahkan user, GUI telah diinisialisasikan terlebih dahulu dengan berbagai tampilan-tampilan interface.

Akuisisi Citra
Akuisisi citra bertujuan untuk menentukan data yang akan diolah dan memilih metode yang diperlukan.
Pada penulisan ini, digunakan webcam untuk proses pemanggilan data dengan resolusi 640x480 pixel. Webcam yang digunakan merupakan webcam Logitech HD C525 dengan resolusi 720p. Pada saat proses pengambilan data, webcam dipasang diatas dashboard mobil, sehingga bagian depan mobil pengemudi tidak terekam oleh kamera.


Cutting/Cropping
Tujuan dari proses cutting/cropping adalah untuk mendapatkan area deteksi yang sesuai dengan kebutuhan proses pengolahan citra. Sehingga jika terdapat area yang tidak memungkinkan untuk terdeteksinya sebuah objek, maka area tersebut dapat dihilangkan.
Counting
Setelah sebuah gambar atau frame dideteksi oleh Haar classifier, langkah selanjutnya adalah menghitung jumlah objek (mobil) yang terdeteksi. Sebelumnya dilakukan perhitungan, terlebih dahulu dilakukan sebuah proses penanda atau (marking) terhadap objek yang telah terdeteksi dengan membuat sebuah kotak yang mengelilingi objek terdeteksi tersebut. Membuat kotak pada deteksi mobil bukanlah tugas dari classifier/detector, maka dari itu, harus dilakukan pengkotakan objek secara manual.
Deteksi Gerakan
Untuk mendeteksi gerakan langkah pertama adalah menentukan titik tengah dari objek yang telah terdeteksi. Untuk mencari titik tengah obek dapat digunakan rumus sebagai berikut :
C = (panjang kotak / 2, lebar kotak / 2)
C = titik tengah dari kotak penanda objek terdeteksi
Setelah ditentukan titik tengah dari objek yang terdeteksi maka akan ditemukan posisi piksel dari titik tengah tersebut, misalkan (120,60). posisi tersebut nanti akan menjadi acuan untuk mendeteksi gerak dari mobil.
Untuk menentukan pergerakan dari mobil (dalam hal ini gerak ke kiri dan ke kanan), terlebih dahulu di tentukan pembagian area deteksi. Pembagian area deteksi dibagi menjadi empat area, yaitu depan, kanan, kiri, dan bagian awas atau mobil berada di area aman mobil.
Menentukan Jarak Aman
Dalam sistem anti tabrakan salah satu aspek yang paling penting adalah menentukan jarak aman kendaraan. Jarak aman berfungsi sebagai penanda atau batas seberapa dekat kendaraan yang kita kemudikan berada di belakang mobil lain.
Berikut ini merupakan skema atau diagram alir dari proses pembentukan garis area aman menggunakan algoritma deteksi tepi Canny.
PENGUJIAN
Pengujian aplikasi Sistem Anti Tabrakan dilakukan dengan cara pengujian non real time yaitu dengan mengolah video yang sebelumnya sudah di rekam terlebih dahulu. Proses perekaman video dilakukan di Jalan Tol Buah Batu, dengan rute Buah Batu - Pasir Koja - Buah Batu.
Pengujian sistem ini menggunakan tiga buah video yang telah direkam sebelumnya di Jalan Tol Buah Batu, yaitu Video1.wmv, Video2.wmv, dan Video3.wmv. Dengan spesifikasi sebagai berikut :
Keterangan :
  • Kecepatan mobil rekan merupakan kecepatan mobil di depan mobil pengemudi yang bekerjasama dalam pengujian.
  • Pengujian dilakukan dalam rentang waktu 2 detik dan kemudian diselarasikan antara penglihatan mata dengan penglihatan sistem.
Pengujian terhadap Jumlah Kendaraan di Area Aman Kendaraan
Pengujian terhadap jumlah kendaraan di seluruh area pandang kamera dimaksudkan untuk menguji keakuratan classifier dalam mendeteksi jumlah mobil dan juga untuk menguji keakuratan pergerakan mobil dalam area - area yang telah ditentukan sebelumnya.
Pengujian terhadap Keakuratan Garis Area Aman
Pengujian terhadap keakuratan garis area aman dimaksudkan untuk mendeteksi tingkat akurasi dari sistem untuk mendeteksi garis batas bahu jalan pada jalan yang cenderung lurus.
ANALISIS
Analisis penyebab kegagalan pendeteksian kendaraan pada area tidak aman
  • Faktor garis aman (total 42 kali)
  • Kesalahan deteksi oleh classifier (total 11 kali)
  • Mobil tidak terdeteksi (total 35 kali)
Analisis penyebab kegagalan pembentukan garis area aman
  • Kesalahan pendeteksian garis (total 36 kali)
  • Kamera (total 51 kali)
  • Titik potong (total 24 kali)
  • Jalan berkelok (total 19 kali)
KESIMPULAN
Dari hasil pengujian dan analisa yang telah dilakukan pada sistem, dapat diambil beberapa kesimpulan sebagai berikut :
  1. Sistem yang dirancang sudah dapat mengenali objek (dalam hal ini mobil) dan mendeteksi pergerakan mobil pada siang hari, tetapi masih memiliki kelemahan dalam membedakan mobil dengan objek lain lain (misal papan penunjuk arah).
  2. Sistem yang dirancang sudah dapat menghitung jumlah mobil yang berada di area aman. Sistem juga telah berhasil membuat garis area aman melalui bantuan garis batas bahu jalan dengan menggunakan  deteksi tepi Canny.
  3. Tingkat akurasi dari sistem pendeteksi mobil pada area aman kendaraan adalah 81,21%, sedangkan tingkat akurasi keberhasilan sistem dalam membentuk garis area aman adalah 77,81%.
DAFTAR PUSTAKA
[1] Bradski, Gary., Adrian Kaehler. 2008. Learning OpenCV Computer Vision with the OpenCV Library. California: O'Reilly Media, Inc.
[2] Canny, John, 1986. A Computational Approach to Edge Detection. IEEE Transactions on Pattern Analysis and Machine Intelligence Vol. PAM1-8, No. 6, pp.679-698.
[3]  Fadlisyah.2007. Computer Vision dan Pengolahan Citra. Yogyakarta: Andi.
[4]  Santoso, Hadi., Agus Haryoko, Haar Cascade Classifier dan Algoritma Adaboost untuk Deteksi Banyak Wajah dalam Ruang Kelas. Pangkalpinang : Universitas Gadjah Mada.

Thursday, June 4, 2015

Aplikasi Client Server Sederhana

1. GET IP ADDRESS

Program di bawah ini merupakan program yang dapat digunakan untuk mengecek IP komputer yang sedang kita pakai.

import java.net.*;
public class getip {
public static void main(String args[]) throws Exception {
InetAddress host = null;
host = InetAddress.getLocalHost();
byte ip[] = host.getAddress();
for (int i=0; i<ip.length; i++) {
if (i > 0) {
System.out.print(".");}
System.out.print(ip[i] & 0xff);}
System.out.println();
}}

 
Jika kalian ingin mencoba program di atas, maka copy paste saja program di atas ke dalam notepad kalian. Lalu simpan dengan nama getip.java, setelah disimpan selanjutnya buka command prompt kalian, lalu compile program tersebut dengan cara mengetikkan javac getip.java. setelah program tersebut dicompile maka program tersebut sudah siap untuk dijalankan dengan mengetik java getip pada command prompt kalian. Setelah itu tampil output seperti gambar di bawah ini :
Pada line pertama terdapat syntax import java.net.*;, Sintax ini digunakan untuk mengimport semua library yang berada di dalam folder net pada folder java. Library yang diimport tadi akan digunakan pada program ini untuk menampilkan ip address komputer kita. Pada line kedua terdapat sintax public class getip {, pada syntax tersebut menyatakan bahwa kita membuat sebuah class dengan nama getip. Pada line ketiga terdapat syntax public static void main(String args[]) throws Exception {, syntax tersebut menyatakan hawa class getip adalah class utama pada program penampilan ip address tersebut sehingga file javanya diberi nama getip.java. InetAddress host = null; digunakan untuk mendeklarasikan InetAddress terhadap objek host yang memiliki nilai awal null. host = InetAddress.getLocalHost(); syntax ini menyatakan bahwa objek host di beri nilai yaitu InetAddress.getLocalHost(). byte ip[] = host.getAddress(); syntax ini menyatakan bahwa kita membuat sebuah variable yg bertipe data array byte yang bernama ip yang dimana isinya diambil dari host.getAddress(), artinya dia memanggil method getAddress pada objek host yang telah di deklarasikan tadi. Lalu dibuat perulangan untuk mencetak ip address computer tersebut.

 2. GET HOST NAME 
Program di bawah ini merupakan program yang dapat digunakan untuk mengecek nama komputer yang sedang kita pakai.
import java.net.*;
public class getname {
public static void main(String args[]) throws Exception {
InetAddress host = null;
host = InetAddress.getLocalHost();
System.out.println("Nama komputer Anda: " +
host.getHostName());
}}
 
Berikut adalah hasil ketika kita menjalankan program getname tersebut.
Penjelasan program dan cara menjalankannya sama seperti pada program sebelumnya ( getip ). Yang membedakan adalah jika pada program getip menggunakan syntax host.getAddress(); untuk mengetahui ip computer yang sedang kita pakai, maka pada program getname menggunakan syntax host.getHostName(); untuk menampilkan nama computer yang kita pakai.

3. CHATTING SEDERHANA CLIENT - SERVER DENGAN SOCKET PROGRAMMING

simpleServer.java
import java.io.*;
import java.net.*;
public class simpleServer {
public final static int TESTPORT = 5000;
public static void main(String args[]) {
ServerSocket checkServer = null;
String line;
BufferedReader is = null;
DataOutputStream os = null;
Socket clientSocket = null;
try {
checkServer = new ServerSocket(TESTPORT);
System.out.println("Aplikasi Server hidup ...");
} catch (IOException e) {
System.out.println(e);
}
try {
clientSocket = checkServer.accept();
is = new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
os = new DataOutputStream(clientSocket.getOutputStream());
} catch (Exception ei) {
ei.printStackTrace();
}
try {
line = is.readLine();
System.out.println("Terima : " + line);
if (line.compareTo("tanda_seru") == 0) {
os.writeBytes("Asek, password benar");
} else {
os.writeBytes("Maaf, saya tidak mengerti");
}
} catch (IOException e) {
System.out.println(e);
}


try {
os.close();
is.close();
clientSocket.close();
} catch (IOException ic) {
ic.printStackTrace();
}
}
}

 

simpleClient.java
import java.io.*;
import java.net.*;
public class simpleClient {
public final static int REMOTE_PORT = 5000;
public static void main(String args[]) throws Exception {
Socket cl = null;
BufferedReader is = null;
DataOutputStream os = null;
BufferedReader stdin = new BufferedReader(new
InputStreamReader(System.in));
String userInput = null;
String output = null;
// Membuka koneksi ke server pada port REMOTE_PORT
try {
cl = new Socket(args[0], REMOTE_PORT);
is = new BufferedReader(new
InputStreamReader(cl.getInputStream()));
os = new DataOutputStream(cl.getOutputStream());
} catch(UnknownHostException e1) {
System.out.println("Unknown Host: " + e1);
} catch (IOException e2) {
System.out.println("Erorr io: " + e2);
}
// Menulis ke server
try {
System.out.print("Masukkan kata kunci: ");
userInput = stdin.readLine();
os.writeBytes(userInput + "\n");
} catch (IOException ex) {
System.out.println("Error writing to server..." + ex);
}
// Menerima tanggapan dari server
try {
output = is.readLine();
System.out.println("Dari server: " + output);
} catch (IOException e) {
e.printStackTrace();
}
// close input stream, output stream dan koneksi
try {
is.close();
os.close();
cl.close();
} catch (IOException x) {
System.out.println("Error writing...." + x);
}
}
}


Untuk program ini kita membutuhkan 2 komputer untuk menjalankannya. 1 komputer bertindak sebagai server dan 1 komputer lainnya bertindak sebagai client. Pada sisi server save file yang bernama simpleServer.java sedangkan pada sisi client save file yang bernama simpleClient.java. Lalu compile program simpleServer.java di sisi server dan compile simpleClient.java di sisi client. lalu jalankan program simpleServer terlebih dahulu, setelah program simpleServer running maka running program simpleClient dengan cara java simpleClient <nama komputer server>.

Server
Client
 Server
 Client
 Server
 Client