Belajar Python Bagian 1: Python dan Hello World OpenCV

Sudah beberapa bulan ini saya kesengsem lagi dengan bahasa pemrograman Python. Mungkin karena sedang getol-getolnya baca-baca soal data, statistik dan Machine Learning, jadi ingin belajar Python lagi. Maka dari itu, saya tulis blog ini sebagai catatan perjalanan saya belajar Python lagi.

Lagi?

Iya, lagi. Ini bukan pertama kali saya belajar Python. Waktu SMA sempat icip-icip sedikit. 2 tahun lalu juga saya menggunakan Python untuk aplikasi klien dari Kayubot. Tapi waktu itu, rasanya belajarnya lebih terburu-buru, jadi nggak yakin kalau ada yang nyangkut. Sehingga rasanya kalau mau belajar lagi, saya musti memulai dari hal-hal yang saya familiar, sehingga belajarnya pun bisa lebih intuitif. Oleh karena itu, di rencana belajar kali ini saya memilih untuk mempelajari Python dengan mengoprek OpenCV.

Kenapa OpenCV?

Ini adalah library yang saya juga cukup familiar, sudah beberapa tahun saya gunakan (on-off, sesuai kebutuhan). Selain itu, saya rasa juga Computer Vision adalah bidang yang sangat berkaitan dengan Machine Learning. Berhubung saya juga sedang bingung mau mengaplikasikan Machine Learning untuk apa, nampaknya menggabungkannya dengan Computer Vision bisa jadi solusi pribadi untuk perjalanan belajar saya.

Kali ini, saya akan menggunakan Python binding di OpenCV untuk menampilkan gambar. Bisa dibilang ini adalah hello world OpenCV. Selanjutnya, saya akan menggunakan SURF Detector untuk mendeteksi fitur-fitur dalam gambar ini. Ini adalah langkah untuk mengenali sebuah gambar di dalam Computer Vision. Rasanya ini cukup untuk pelajaran awal.

1. Menginstal Python Binding milik OpenCV
Berhubung saya menggunakan Anaconda sebagai package manager Python di Mac saya, maka saya cukup menggunakan command berikut untuk menginstal OpenCV 2.4.12 (versi terbaru yang ada di repo Conda)

conda install -c conda-forge opencv

Kalau berminat, sebenarnya bisa juga build OpenCV dari source, tapi saya tak ingin proses itu menghambat proses praktek saya. Oh, kalau di Windows, bisa juga download Binary OpenCV yang sudah ada Python bindingnya.

2. Menampilkan Gambar di OpenCV
Ini adalah langkah Hello World di OpenCV. Sebuah file gambar akan dibaca dan ditampilkan di window baru. Secara sintaks, mirip dengan versi C++-nya, jadi tidak asing bagi saya. Tapi saya jadi belajar juga penulisan pernyataan dan variabel di Python. Plus, setup text editor saya.

# impor package
from __future__ import print_function
import cv2
import numpy as np
 
# membaca gambar dengan warna grayscale
img = cv2.imread('ethernet shield.jpeg',0)

# menampilkan gambar
cv2.imshow('image', img)

# agar jendela tidak langsung tertutup
cv2.imshow('keypoints',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

Kalau benar, maka sebuah jendela berisi gambar akan muncul.

3. Melakukan SURF Detector
SURF adalah salah satu algoritma untuk mendeteksi fitur-fitur dalam sebuah gambar. Ini adalah jalan untuk melakukan pengenalan objek. Jika fitur sebuah objek sudah diketahui, maka sudah setengah jalan untuk mengenalinya di gambar lain. Fungsi untuk melakukan SURF sudah ada di OpenCV 2.4. Selain itu, saya juga jadi mempelajari tuple, tipe data sekuensial di Python yang mirip list. Hanya bedanya, tuple tidak bisa diubah isinya alias immutable

# impor package
from __future__ import print_function
import cv2
import numpy as np
 
# membaca gambar dengan warna grayscale
img = cv2.imread('/Users/kotakmakan/Pictures/ethernet shield.jpeg',0)

# melakukan SURF dengan threshold 500
surf = cv2.SURF(5000)

# mendapatkan tuple berisi keypoint (jumlah titik2 kunci fitur) dan descriptor (berupa matriks)
kp, des = surf.detectAndCompute(img,None)
print(len(kp))

# menampilkan gambar
img2 = cv2.drawKeypoints(img,kp,None,(200,100,0),4)

# menyimpan hasil deteksi SURF ke file baru
cv2.imwrite('shieldKeypoints.jpg',img2)
cv2.imshow('keypoints',img2)
cv2.waitKey(0)
cv2.destroyAllWindows()

Hasilnya sebagaimana muncul di gambar berikut

shieldKeypoints

Fyuh, itu dia langkah pertama saya belajar Python. Berikutnya saya akan mencoba menampilkan video di OpenCV. Doakan saya tetap bisa konstan mengupdate blog ini dan mendokumentasikan usaha belajar saya. Nantikan terus postingan berikutnya.

Ciao!

Leave a Reply