On Big Data and me

Beberapa tahun yang lalu, Saya mendengar pertama kali istilah “Big Data”. Kala itu istilah ini bagi saya masih terasa seperti jargon marketing, ‘buzzword’, ‘hype’, atau euforia yang membuat definisinya terdengar menarik namun maknanya sulit dipahami. Teknologi pada waktu itu juga memang sedang ramai-ramainya dengan media sosial dan mungkin awal dari revolusi penyampaian ide dari yang konyol sampai yang luar biasa (konyol, eh maksudnya) serius.

Sekarang mungkin masih banyak ekspresi yang terdengar hiperbola namun setidaknya potongan puzzle-nya sudah semakin jelas. Dalam bidang informatika, topik yang saya pelajari lebih banyak menitikberatkan pada proses algoritmik untuk menganalisis data yang pada dasarnya kompleks seperti multimedia (misal peta, gambar, dan video). Istilah ‘big data’ sendiri saya dengar pertama kali dari area yang lebih banyak penekanan pada data dan bagaimana penanganannya. Sekarang Saya cenderung memahami istilah big data sebagai sebuah konvergensi teknologi.

Read More

Iklan

Simple Entity Extraction from News Article in Bahasa Indonesia

Tulisan kali ini membahas cara mengekstrak informasi dari teks berita menggunakan python. Entitas yang dimaksud adalah entitas berupa tempat, orang, organisasi atau entitas lain yang diketahui dalam basis pengetahuan. Basis pengetahuan yang dipakai dalam tulisan ini adalah dbpedia bahasa Indonesia. Sebetulnya DBPedia sudah menyediakan layanan semacam ini yaitu Spotlight namun sayangnya belum tersedia dalam bahasa Indonesia.
Read More

Histogram of Oriented Gradient in Numpy

Di tulisan terdahulu saya pernah mencoba menulis tentang menghitung fitur HOG lalu tulisan tentang mempercepat perhitungan hog dengan menggunakan inlince c++ dari scipy. Tulisan kali ini sebetulnya hampir sama dengan tulisan terdahulu, yaitu menghitung fitur yang sama, yang berbeda adalah tulisan yang dulu dibuat dengan menggunakan interface opencv versi 1 (import cv) sedangkan tulisan kali ini dibuat menggunakan interface versi kedua (cv2). Pada opencv versi pertama, objek citra disimpan menggunakan struktur berbasis C (IplImage) sedangkan di versi 2, objek citra sudah terintegrasi dengan Numpy array (ndarray) dan opencv versi 2 sudah ditulis ulang dengan menggunakan C++. Dengan terintegrasinya struktur penyimpanan citra menjadi array numpy, maka operasi2 pengolahan citra jadi seperti yang dilakukan dengan MATLAB. operasi-operasi tertentu juga menjadi makin mudah melalui operasi array slicing yang ada pada Numpy. Oleh sebab itu, saya coba membuat algoritma penghitungan fitur HOG yang mengeksploitasi fasiltas yang ada di Numpy yang lebih cepat karena menghindari loop yang eksplisit dilakukan pada kode python tetapi mendelegasikan operasi yang bersifat element-wise ke numpy.

modul yang diimpor
kalau di versi opencv pertama modul yang digunakan adalah cv, maka sekarang adalah cv2. modul cv masih dapat diakses untuk menjaga kompatibilitas ke versi sebelumnya menjadi submodul di dalam cv2.

# jika ingin menggunakan antarmuka opencv versi 1
import cv2.cv as cv 
# interface opencv versi 2
import numpy as np
import cv2

Menghitung HOG secara umum
fitur HOG yang dibahas pada tulisan ini adalah varian penyederhanaan dari varian-varian utama yang digunakan saat ini :

  • varian HOG Dalal-Triggs untuk pedestrian detection
  • varian HOG Felzenswalb untuk deformable part model di PASCAL VOC (Visual Object Categories/Classes) Challenge

Read More

Poisson Image Editing (revised)

Tulisan ini melengkapi tulisan sebelumnya yang berjudul serupa. Waktu itu hasilnya masih kurang memuaskan dan sepertinya implementasinya masih ada yang salah. Akhirnya saya coba membuat implementasi ulang dengan Delphi, mulai dari pendefinisian persoalannya pada ruang berdimensi 1 secara diskret.

Sederhananya, misalkan Saya punya fungsi 1D yang terdefinisi oleh nilai di posisi awal f(a) dan akhir f(b) sementara nilai diantara selang (a,b) tidak diketahui. Kalau saya berasumsi bahwa turunan keduanya adalah konstan 0, maka interpolasi yang dibuat antara titik a dan b adalah sebuah garis lurus seperti gambar berikut.

interpolasi dengan turunan kedua = 0

interpolasi dengan turunan kedua = 0


Kalau fungsi turunan keduanya saya buat konstan positif atau negatif maka interpolasinya akan menjadi melengkung.

interpolasi dengan turunan kedua konstan positif ( = 2 )

interpolasi dengan turunan kedua konstan negatif ( = -2 )

Ide dari poisson image editing adalah dengan menggunakan informasi dari turunan kedua citra sumber untuk mengarahkan interpolasi ini pada citra tujuan.

interpolasi dengan turunan kedua pengarah berasal dari turunan kedua fungsi lain

Read More

Local Binary Pattern with NumPy

Dulu saya pernah menulis tentang menghitung fitur LBP (Local Binary Pattern) menggunakan OpenCV di python. Waktu itu interface opencv yang digunakan masih OpenCV 2.1 . Saya juga sempat membahas bagaimana mempercepat perhitungan LBP tersebut dengan kode inline C++ menggunakan scipy.weave. Kemarin saya penasaran, bagaimana caranya mempercepat operasi tersebut tanpa menggunakan inline code (yang membuat ada penundaan di awal karena harus melakukan kompilasi dan import native extension) dan hanya menggunakan apa yang tersedia di numpy (di versi-versi terakhir, python OpenCV menggunakan numpy array sebagai representasi citra).

Setelah mencari dokumentasi dari numpy, Akhirnya ketemu dua cara. Cara yang pertama masih lebih lambat (200-300ms) sedangkan cara kedua ternyata cukup cepat (100-150ms). Pada dasarnya adalah melakukan pengurangan menggunakan operator broadcast terhadap seluruh elemen array dengan pengurangnya adalah array tersebut yang digeser sesuai dengan posisi 8 tetangga tiap piksel sehingga total array yang perlu dibuat adalah 8 array. Dalam praktiknya, array tersebut dibuat dengan cara melakukan slicing.

Read More

Tracking Using Local Binary Pattern

Oke, terakhir kali saya membuat tulisan di blog ini adalah akhir april. Jeda yang cukup panjang untuk memulai membuat tulisan. Ada banyak hal yang terjadi pada saya selama masa jeda tersebut. Mulai dari kegiatan diklat prajabatan CPNS pada bulan mei, panggilan wawancara beasiswa dikti di bulan juni, hingga akhirnya per tanggal 1 Oktober ini saya resmi menjadi abdi negara yang bertugas di kampus.

#devfestjkt

Pada penghujung bulan september kemarin, saya mendapat kesempatan berbicara pada acara Google DevFest di Jakarta. Awalnya memang saya berniat mengisi acara Google DevFest yang di Bandung akhir minggu ini. Pada acara di jakarta saya diminta membahas tentang Computer Vision. Saya sendiri memang suka ngoprek citra untuk diutak-atik, tapi untuk menjadi pembicara tentang computer vision sepertinya kompetensi saya masih jauh dari seorang pakar. Oleh sebab itu dan karena yang meminta adalah rekan satu almamater, saya menyetujui dan mencoba tampil sebagai seorang enthusiast bukan sebagai expert.

Awalnya saya agak grogi karena tidak terbiasa berbicara membawakan materi teknik di hadapan orang yang banyak. Mengajar di kampus pun paling banyak mungkin hanya 100-an, itupun kuliah wajib. Kalau menjadi dosen pengganti di kuliah “Interpretasi dan Pengolahan Citra”, pesertanya jauh lebih sedikit lagi. Mungkin bisa dihitung dengan jari. OK, jari-jari di kedua tangan. 🙂 Di luar perkiraan, ternyata responnya cukup memberi semangat.

Nah, ceritanya di acara itu saya menampilkan beberapa video yang sudah diproses dengan menggunakan OpenCV sebagai demonstrasi hal-hal yang bisa dilakukan dengan menggunakan teknik-teknik computer vision. Nah, salah satu video yang saya tampilkan sebetulnya adalah pengembangan dari apa yang pernah saya tuliskan di sini. Karena keterbatasan waktu dan tema presentasi, di acara itu saya hanya sempat menampilkan videonya saja. Oleh sebab itu di tulisan ini saya akan bedah bagaimana hal tersebut dilakukan.

frame pertama

frame pertama

frame terakhir

frame terakhir


Read More

Seamless Cloning using Poisson Image Blending in Python

Beberapa waktu lalu ketika saya sedang mempersiapkan tulisan sebelumnya tentang face tracking, Saya terdampar di sebuah situs berbahasa Jepang yang cukup membuat penasaran (sampai sekarang saya belum ketemu lagi dengan situs tsb). Judul yang saya ingat waktu itu adalah “Poisson Image Editing”. Kalau dari judulnya saja saya tidak terlalu tertarik, tapi saya justru tertarik karena melihat gambar yang ditampilkan.

image cloning

pemindahan citra kepala beruang ke citra bukit dengan panduan mask. (gambar bukan milik saya)

Singkat kata, “Poisson Image Editing” ini merupakan judul makalah yang ditulis oleh Perez et al. Isinya kurang lebih sebagai memaparkan cara menggabungkan dua buah citra (sumber + mask + target = hasil). mask merupakan citra biner yang menandakan bagian citra sumber yang boleh dipindahkan ke citra hasil. Contohnya terlihat pada gambar di atas. Pada gambar tersebut terdapat 3 citra yaitu citra sumber, mask, dan citra hasil. citra target adalah citra hasil yang sebelumnya tidak ada gambar kepala beruang yang merupakan bagian dari citra sumber yang dipindahkan menggunakan panduan dari citra mask. citra mask dapat dianggap sebagai cetakan atau penyaring bagian yang dipindahkan dan yang tidak.

Read More