Skip to content

Object detection on image using SVM (Support Vector Machine) and OpenCV

Notifications You must be signed in to change notification settings

agungdwiprasetyo/image-pattern-recognition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pengolahan Citra Digital - Pattern Recognition

Penelitian ini menjelaskan tentang program aplikasi pendeteksian suatu objek yang didefinisikan terlebih dahulu dalam sebuah citra. Contoh suatu objek dalam hal ini yaitu ikan, mobil, rumah, tomat, dan lain-lain. Deteksi suatu objek yang digunakan dalam program ini yaitu menggunakan Histogram of Oriented Gradient (HOG) untuk mengekstraksi ciri dari objek dan bukan objek/background, serta proses pelatihan (learning) menggunakan Support Vector Machine (SVM) untuk melatih data yang telah diekstrak yang selanjutnya dilakukan proses klasifikasi antara objek dan bukan objek. Objek yang akan dideteksi dalam penelitian ini adalah ikan.

Requirements

Program ini menggunakan bahasa pemrograman Python versi 2.7 dan ditulis dalam struktur Object Oriented Programming (OOP). Tujuan dikembangkan dalam struktur OOP yaitu supaya mempermudah pembacaan program dengan membagi kedalam modul-modul/kelas. Program ini dikembangkan dalam sistem operasi Linux.

Jika baru menginstal python, instal python-pip dan python-dev dahulu untuk mempermudah menginstal library-library yang dibutuhkan selanjutnya.

$ sudo apt-get install python-pip python-dev

Instal OpenCV pada python, tutorial buka link ini -> Install OpenCV

Jika menggunakan MacOS:

$ brew install opencv3

Instal library yang dibutuhkan yaitu: numpy, scikit-image, matplotlib (untuk plot hyperplane pada SVM), cvxopt (untuk operasi matriks dan masalah optimasi pada SVM):

$ sudo pip install numpy
$ sudo pip install scikit-image
$ sudo pip install matplotlib
$ sudo pip install cvxopt

Jalankan program:

$ python start.py

atau bisa juga (jika menggunakan Terminal Linux):

$ ./start.py

Jika masih terdapat error, instal library lain yang muncul di pesan error tersebut pada python:

$ sudo pip install [nama library]

Tahapan Program

Secara umum tahapan dalam program ini yaitu pengumpulan data latih citra, praproses citra, ekstraksi ciri masing-masing data citra, proses training hasil ekstraksi ciri untuk pengenalan pola, dan testing data. tahap

  1. Pengumpulan Data dan Praproses Citra: Citra yang sudah dikumpulkan disamakan ukuran resolusinya menjadi 200x80. Data latih positif (objek yang akan dideteksi) sebanyak 273 citra dan data latih negatif (data yang bukan termasuk objek) sebanyak 115 citra, yang terdapat dalam folder data/datalatih/ikan/TrainImages). Lalu, dilakukan perubahan warna piksel pada citra menjadi grayscale. Hal itu dikarenakan untuk membuat citra menjadi satu channel agar memudahkan proses pelatihan citra. Jumlah keseluruhan data latih yaitu sebanyak 388 data citra. data

  2. Ekstraksi Ciri: Metode ekstraksi ciri yang digunakan dalam program ini adalah Histogram of Oriented Gradient (HOG), yang bekerja dalam daerah spasial. Ada beberapa metode lain untuk mengekstraksi ciri dari citra yaitu Wavelet yang bekerja dalam daerah frekuensi. HOG adalah sebuah metode untuk pendeteksian objek dengan menghitung nilai gradien dalam daerah tertentu pada citra. Distribusi gradien menunjukkan karakteristik dari setiap citra. Karateristik ini diperoleh dengan membagi citra ke dalam daerah kecil yang disebut cell. Setiap cell disusun sebuah histogram dari sebuah gradien. Cell biasanya memiliki ukuran 4x4 piksel sedangkan block memiliki ukuran 2x2 cell atau 8x8 piksel. Vektor gradien dari suatu piksel dihitung dengan mengurangi nilai piksel tetangga kiri dikurang nilai piksel tetangga kanan serta nilai piksel tetangga atas dikurang nilai piksel tetangga bawah. Tahap normalisasi dilakukan pada vektor gradien yang outlier. Normalisasi dilakukan dengan melakukan perkalian pada nilai tertentu terhadap tiap piksel. Hasil feature dari HOG diubah menjadi feature vector yang selanjutnya akan dilatih dengan SVM untuk pengenalan pola. ciri Banyaknya vektor per citra hasil ekstraksi yaitu berjumlah 14904, sehingga ukuran datasets yang akan dilatih oleh SVM yaitu sebesar 388x14904

  3. Pengenalan Pola dengan Support Vector Machine (SVM): Program ini menggunakan dataset citra yang diambil melalui google image sebagai citra template yang nantinya akan dibandingkan dengan citra masukan. Metode algoritma yang digunakan adalah Support Vector Machine (SVM). Algoritma tersebut merupakan teknik untuk melakukan prediksi baik dalam kasus klasifikasi atau regresi. Konsep dasar SVM merupakan kombinasi dari teori-teori komputasi , seperti margin hyperplane, kernel, dan konsep-konsep pendukung lainnya. SVM pun masih berada dalam satu kelas dengan Artificial Neural Network (ANN) dalam hal fungsi dan kondisi permasalahan yang bisa diselesaikan. Dalam program ini, teknik SVM digunakan sebagai classifier untuk membandingkan citra masukan dengan citra template. Kernel yang digunakan pada SVM adalah linear, (kernel lainnya yaitu Polynomial dan Gaussian). Data untuk objek yang positif dan negatif dapat dipisahkan secara tegas. Pendekatan yang digunakan adalah Quadratic Programming (QP). QP memiliki fungsi objektif yang kuadratik dengan kendala yang linear. Untuk optimisasi fungsi objektif digunakan Lagrange Multipliers. Dalam menyelesaikan permasalahan-permasalahan optimasi quadratic programming pada matriks yang terbentuk, digunakan library cvxopt pada python (dapat dilihat di file program pada folder mainClass/classifier/svm.py). Metode SVM dalam program aplikasi ini dibuat dalam kelas sendiri, dan tidak menggunakan library. Ada opsional lain untuk menggunakan metode SVM ini, yaitu dengan menginstal library scikit-learn. Library scikit-learn dalam python tidak hanya SVM saja, tetapi ada algoritma machine learning lainnya seperti ANN, Naive Bayes, dan K-Nearest Neighbors (KNN).

    Untuk proses klasifikasi, data vektor yang termasuk objek diberi label kelas 1 sedangkan data vektor yang bukan termasuk objek diberi label kelas -1.

    Dari data training yang telah diproses dengan SVM, diperoleh gambar hyperplane dan margin seperti berikut: data

    Berikut hasil evaluasi untuk akurasi dan confusion matriks dari model SVM yang telah dilatih: akurasi

Hasil

Proses pendeteksian objek dalam citra, program melakukan sliding template (kotak persegi panjang putih yang akan berjalan dari kiri ke kanan lalu dari atas ke bawah) yang berukuran sama dengan data latih (200x80 px). Ketika proses sliding ini berjalan maka dilakukan proses perhitungan vektor gradien dari template saat sliding tersebut menggunakan HOG. Hasil perhitungan vektor tersebut kemudian dites ke model SVM yang telah disimpan untuk mendapatkan nilai prediksi. Bila nilai tes prediksi sama dengan 1 maka template tesebut masuk ke kelas positif sehingga template saat sliding ditandai sebagai objek (ditandai dengan persegi panjang hitam pada gambar dibawah) dan atribut dari template tersebut disimpan. Setelah proses sliding selesai, maka dilakukan scalling-down pada citra lalu dilakukan kembali proses sliding. Hal ini dilakukan untuk mendeteksi objek yang kemungkinan lebih besar dari ukuran citra pada datalatih. Untuk proses sliding template dapat digambarkan sebagai berikut:

sliding

Langkah selanjutnya yaitu dengan menormalisasi kotak-kotak hitam yang saling menumpuk sehingga diperoleh satu kotak saja (menggunakan Non-Maxima Suppression). Hasil akhir pendeteksian objek dalam citra dapat dilihat pada gambar dibawah ini.

hasil

Dapat terlihat ada beberapa ikan yang tidak terdeteksi. Hal ini karena kurang beragamnya data latih ikan yang di-training dengan SVM.

Evaluasi

Pengembangan program aplikasi dengan menggunakan SVM membutuhkan banyak data latih dalam prosesnya. Data latih yang besar dan beragam dapat meningkatkan akurasi dalam pendeteksian objek. Ekstraksi ciri menggunakan HOG membutuhkan citra objek dari berbagai sisi sehingga ciri yang diekstrak lebih beragam. Ciri ini mampu menghasilkan model yang lebih akurat ketika dilakukan pelatihan dengan SVM. Data latih objek yang digunakan pada program ini hanya citra ikan yang tampak dari samping, akurasi yang dihasilkan sebesar 90.67%. Untuk meningkatkan akurasi diperlukan data latih yang lebih beragam.

Saran

Saran dalam penelitian ini adalah penggunaan data latih yang lebih banyak serta beragam untuk meningkatkan akurasi dari model SVM. Penambahan data latih dilakukan pada data objek dan bukan objek. Dilakukan image enhancement pada data uji sehingga antar objek dan bukan objek dapat dibedakan dengan jelas.

#!/usr/bin/env python
s = "'Let’s go to invent tomorrow instead of worrying about what happened yesterday' – Steve Jobs"
print s

About

Object detection on image using SVM (Support Vector Machine) and OpenCV

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages