Ketika saya masih di Indonesia, Saya jarang sekali memeriksa temperatur udara. Setelah sampai Wina jadi sering memeriksa temperatur karena penasaran dengan temperatur yang terukur di cuaca musim semi tetapi terasa masih dingin dan masih bersalju. Kebetulan akhir-akhir ini sedang sering bermain dengan scraping (ekstraksi data dari dokumen web), akhirnya pada suatu malam sebelum tidur saya iseng membuat skrip untuk mendapat cuaca saat ini di kota Wina.

Saya menggunakan library beautifulsoup untuk mengurai isi dokumen HTML yang kemudian bisa diekstrak bagian tertentu (dalam hal ini adalah elemen DIV yang mencakup data temperatur). Elemen ini diketahui dari mengaktifkan panel “Inspect Element” di peramban Google Chrome (atau bisa juga dengan menampilkan kode sumber dari halaman aktif di peramban lain).

from urllib2 import urlopen
from BeautifulSoup import BeautifulSoup as BS

temps = [float(tag.string.replace(u"\xb0", '')) for tag in BS(urlopen("http://www.wetter.at/wetter/oesterreich/wien").read()).findAll("div", {"class": "temp"})]
if len(temps)>0: print "%0.2f C" % (sum(temps)/len(temps))

Data temperatur yang diberikan halaman tersebut merupakan data pengukuran temperatur di beberapa distrik kota. Karena saya hanya perlu tahu satu data saja sebagai gambaran umum temperatur kota maka saya menghitung rata-rata dari data tersebut.

Oya, tulisan ini juga sekalian untuk mencoba aggregator blog dari komunitas Python Indonesia. tampil tidak yaa..? tampil tidak yaa…?


*sedang ikut pelatihan 7 Habits of Highly Effective People yang diselenggarakan oleh kampus untuk para dosen trus iseng bikin improvisasi untuk topik lain*

Habit 1: Be Provocative
Habit 2: Begin with bending the mind
Habit 3: Put first traps’ first
Habit 4: Think Lean and Mean
Habit 5: Seek first to be concealed, and then to conquer
Habit 6: Make surprise!
Habit 7: Tighten the claw


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

Continue reading ‘Poisson Image Editing (revised)’


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.

Continue reading ‘Local Binary Pattern with NumPy’


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


Continue reading ‘Tracking Using Local Binary Pattern’




Ikuti

Get every new post delivered to your Inbox.

Bergabunglah dengan 1.915 pengikut lainnya.