Mata Digital

Saya ingin mengajak bertualang dengan mata digital, kita akan mencoba seru-seruan dengan kamera hand-phone. Contohnya ini, Tapi akan kita runut satu-satu. Kita deteksi batu yang kecil itu dengan lingkaran merah, kelihatan kan.

Teman-teman pernah makan batu? Saya yakin pernah, tentu tidak sengaja terselip diantara nasi. Rasanya sebal banget-nget. Nah kita akan mencoba mendeteksi batu di dalam beras.

Kalau di cari di youtube Rice How it’s made di 3:15 – 3:30 menggunakan laser scanner untuk memfilter, beras yang berwarna cokelat. Kita gunakan prinsip yang mirip untuk mencari batu, tapi pakai kamera saja. Coba bayangkan kalau berasnya banyak, bisa jereng kan kalau pakai mata.

Tentu namanya seru-seruan ini tidak production ready, dan belum real-time.

Software yang kita gunakan adalah OpenCV, platform Computer Vision gratis dari Intel. Dan programming menggunakan python. Sederhana Setup nya, dan sangat cepat.

Fitur yang kita gunakan adalah Blob Detection. Karena saya masih belajar, saya buatkan saja blob pakai ms-paint, kira-kira begini:

Gambar 1

Kemudian browsing sebentar, copy-paste effortless langsung ke detect:

wah jadi pede nih detect batu pasti bisa, ini gambar aslinya:

small-rock

Gambar 2

Ternyata kontrasnya beda, dan akibat kompresi warna tidak rata, percobaan pertama tidak terdeteksi apa-apa, kemudian semua filter di off kan, ke deteksi banyakk banget, gambar 3 sebelah kiri. Akhirnya ada settingan yang lumayan pas, tp masih banyak false detection, gambar 3 sebelah kanan, titik merah kecil ada beberapa, tidak terlalu kelihatan.

Gambar 3

Wah tampaknya gambarnya harus di haluskan dahulu. Tapi itulah nikmatnya opencv, sudah tersedia semua. Gunakan gaussian filter.

Voila, hasilnya si batu terdeteksi seperti di atas:

Gambar 5

Lumayan lah untuk percobaan beberapa jam. Beberapa yang mejadi catatan saya tentang computer vision:

  • Mata digital apabila dapat dikondisikan, proses deteksi jadi mudah dan efisien. Semisal diatas kita gunakan background warna putih dengan pencahayaan cukup
  • Menggunakan modul opencv, development menjadi cepat, prosesing juga cepat
  • Mata Digital bisa dikembangkan untuk berbagai keperluan sederhana : Menghitung orang, deteksi kebakaran, mencari batu, dll

Dan ini source-code nya sangat sederhana, yang mana 95% nya saya copas dari Internet, supaya teman-teman tidak terintimidasi dengan hasilnya.

# Standard imports
import cv2
import numpy as np;
# Read image
img = cv2.imread("small-rock.jpg", cv2.IMREAD_GRAYSCALE)
im = cv2.GaussianBlur(img,(5,5),0)
# Setup SimpleBlobDetector parameters.
params = cv2.SimpleBlobDetector_Params()
# Change thresholds
params.minThreshold = 0;
params.maxThreshold = 150;
# Filter by Area.
params.filterByArea = False
params.minArea = 1500
# Filter by Circularity
params.filterByCircularity = False
# Filter by Convexity
params.filterByConvexity = False
# Filter by Inertia
params.filterByInertia = False
# Set up the detector with default parameters.
detector = cv2.SimpleBlobDetector_create(params)
# Detect blobs.
keypoints = detector.detect(im)
# Draw detected blobs as red circles.
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS ensures the size of the circle corresponds to the size of blob
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

# Show keypoints
cv2.imshow("Keypoints", im_with_keypoints)
cv2.waitKey(0)

Terimakasih sudah mampir, next percobaan kita test pakai realtime capture yaa, kalau sempat.

Matematika Pemindai Laser

Pasti dong pernah lihat alat untuk mengukur jarak dengan laser. Menurut saya alat ini keren sekali, walaupun belum pernah pegang, karena bisa mengukur jarak tanpa penggaris, tali ataupun kilan. Mengukur tanpa menyentuh, tp dengan perhitungan matematis.
Teori yang mendasari adalah triangulasi, dimana kamera dan sinar laser membentuk sudut terhadap jarak benda yang di ukur. Akibatnya posisi titik laser pada gambar yang dihasilkan kamera, akan berkorelasi dengan jarak benda, walaupun tidak linear. Set up nya cukup sederhana, seperti Gambar 1. Kalau dari teori nya, akurasinya bisa tinggi sekali.
Laser Ranging
Pada blog ini kita dengan modal laser seharga Rp 12.000 dan Kamera Handphone, akan mencoba melakukan triangulasi. Tentu dengan akurasi yang rendah, tp sebagai proof of concept, perhitungan matematis walaupun virtual, fungsinya nyata.
Pada percobaan ini, dengan alat seadanya, laser diletakkan berjarak 70 cm dari dinding. kamera di letakkan sekitar 35 cm di samping kiri laser, sehingga membentuk sudut sekitar 30 derajat. Kamera di cepit buku, supaya bisa berdiri, dudukan laser menggunakan boneka teddy bear. Penghalangnya digunakan koper kosong.

Untuk menggambil gambar digunakan mode video fullHD dan jarak koper dibuat 30cm, kemudian 50 cm. Terakhir koper ditarik, jadi langsung ke tembok.

snapshot gambarnya kira-kira seperti ini:

Dari gambarnya tampak jelas, bahwa perubahan posisi koper mempengaruhi posisi horisontal titik laser, vertikal kita abaikan dulu :).
Tadinya mau cari rumus matematikanya, tp ribet ah, pakai look up table saja.
Menggunakan software octav kita bisa mencari posisi dot ini dengan algoritma yang sederhana. Cari saja posisi pixel yangbpaling terang, artinya nilainya yang paling besar, kemudian tandai dengan garis putih.
Hasilnya diperoleh posisi pixel masing-masing dot, garis putih hanya untuk membantu kita saja, komputer sih nggak butuh.
Berikut ini posisi pixel nya dan gambar hasil ditandai.
Gambarnya hilang satu, lupa di upload
Supaya lebih mudah, kita sudah konsolidasikan posisi titik-titik ini dalam satu gambar.
Konsolidated-Dot
Posisi Pixel nya sebagai berikut:

x1 =  1631 (30 cm)

x2 =  1273 (50 cm)

x2 =  1071 (70 cm gambar tembok)

Saat ini sudah tersedia laser yang bentuknya bukan titik, tp garis, yang memungkinkan scanning lebih efisien.
Laser tampaknya ke depannya bisa membantu mata kita melakukan pemetaan lingkungan kita.
Amazing kan, dengan matematika kita bisa membuat hal-hal yang abstrak jadi nyata.

Blog at WordPress.com.

Up ↑