Identifikasi Logo Mobil Menggunakan Histogram Oriented Gradient

Posted on

Contoh kasus yang dapat menerapkan metode HOG adalah identifikasi objek berupa logo mobil. HOG akan membentuk suatu deskriptor sehingga dapat membedakan bermacam-macam logo sesuai dengan dataset yang dimiliki. Aplikasi yang dibuat akan menerima inputan gambar dan menerima dataset yang merupakan gambar-gambar logo mobil yang dikelompokan ke dalam folder-folder dan diberi nama sesuai dengan nama logo tersebut, tujuan nya sebagai pembanding.

Dataset

Dataset berupa folder-folder yang berisi logo-logo mobil. Ada Subaru, Ford, Honda, dan Volkswagen. Tugas dari dataset ini untuk melatih algoritma Machine Learning ini supaya mendapatkan karakteristik tiap logo nya.

Data tes

Gambar tes ini digunakan untuk mengetes seberapa akurat klasifikasi yang telah dilakukan. Gambar yang digunakan meliputi logo-logo yang mirip dengan logo yang ada di dataset.

Kode program:

# Import Package yang diperlukan
from sklearn.neighbors import KNeighborsClassifier
from skimage import exposure
from skimage import feature
from imutils import paths
import argparse
import imutils
import cv2
import numpy as np

np.seterr(divide='ignore', invalid='ignore')
 
# membuat command line argument yang dipakai sebagai argument untuk menjalankan file / baris kode ini lewat command prompt
ap = argparse.ArgumentParser()
ap.add_argument("-d", "--training", required=True, help="Path to the logos training dataset")
ap.add_argument("-t", "--test", required=True, help="Path to the test dataset")
args = vars(ap.parse_args())
 
# inisialisasi data matriks dan label
print("[INFO] extracting features...")
data = []
labels = []

# iterasi ke semua gambar yang ada dalam path training data set
for imagePath in paths.list_images(args["training"]):
	# ekstrak merek mobil dengan meng-split path dari gambar
	make = imagePath.split("\\")[-2] #untuk windows
	#make = imagePath.split("/")[-2] #untuk linux atau yang berbasis unix
	#print ('get directories name: ', make)
 
	# muat gambar, lalu konversi ke bentuk grayscale, selanjutnya dideteksi tepi
	image = cv2.imread(imagePath)
	gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
	edged = imutils.auto_canny(gray)
	# ini nanti di test dengan cara imshow edged
	# menunjukkan hasil deteksi tepi canny
	#cv2.imshow("Hasil Canny", edged)
	#cv2.waitKey(0)
	# edge disini berguna untuk pencarian countour nantinya
	# counter yang nanti kita dapatkan akan digunakan untuk crop gambar kita agar pas di bagian logonya
	
	# cari countour di tepi nya dan simpan yang bernilai paling besar sehingga didapatkan outline dari logonya
	cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
	# cv2.RETR_EXTERNAL artinya hanya mengambil outer flagsnya
	# cv2.CHAIN_APPROX_SIMPLE berarti menghapus redundant points dan compress countour tersebut
	# jadi misal gambar rectangle cuman diambil ujung-ujungnya aja (titik sudutnya)
	cnts = cnts[0]
	c = max(cnts, key=cv2.contourArea)
	
	# ekstrak logo mobilnya dan ubah ukuran lebar dan tinggi nya secara kanonik
	(x, y, w, h) = cv2.boundingRect(c)
	logo = gray[y:y + h, x:x + w]
	logo = cv2.resize(logo, (200, 100))
	# ini nanti di test dengan cara imshow logo
	# menunjukkan hasil cropping
	#cv2.imshow("Hasil crop", logo)
	#cv2.waitKey(0)
	
	# ekstrak HOG dari gambar logo
	(H, hogImage) = feature.hog(logo, orientations=9, pixels_per_cell=(10, 10),
		cells_per_block=(2, 2), transform_sqrt=True, block_norm="L1", visualize=True)
	
	# perbarui data dan label
	data.append(H)
	labels.append(make)

# latih tetanga terdekat dari classfier
print("[INFO] training classifier...")
model = KNeighborsClassifier(n_neighbors=1)
model.fit(data, labels)
print("[INFO] evaluating...")

# iterasi ke seluruh gambar tes
for (i, imagePath) in enumerate(paths.list_images(args["test"])):
	# muat gambar, ubah ke grayscale, lalu ubah ukuran kedalam ukuran kanonik
	image = cv2.imread(imagePath)
	gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
	logo = cv2.resize(gray, (200, 100))
 
	# ekstraksi HOG dari gambar tes dan memprediksi merek dari gambar logo mobil tersebut
	(H, hogImage) = feature.hog(logo, orientations=9, pixels_per_cell=(10, 10),
		cells_per_block=(2, 2), transform_sqrt=True, block_norm="L1", visualize=True)
	pred = model.predict(H.reshape(1, -1))[0]
 
	# memvisualisasi gambar HOG
	hogImage = exposure.rescale_intensity(hogImage, out_range=(0, 255))
	hogImage = hogImage.astype("uint8")
	cv2.imshow("HOG Image #{}".format(i + 1), hogImage)
 
	# Tuliskan prediksi dan tampilkan hasilnya.
	cv2.putText(image, pred.title(), (10, 35), cv2.FONT_HERSHEY_SIMPLEX, 1.0,
		(0, 255, 0), 3)
	cv2.imshow("Test Image #{}".format(i + 1), image)
	cv2.waitKey(0)
Hasil pengujian:

 

Gravatar Image
Program Studi Teknik Informatika, Universitas Ma Chung, Malang - www.machung.ac.id

Leave a Reply

Your email address will not be published. Required fields are marked *