Skip to content

Latest commit

 

History

History
112 lines (65 loc) · 9.1 KB

File metadata and controls

112 lines (65 loc) · 9.1 KB

Pengantar Computer Vision

Computer Vision adalah disiplin ilmu yang bertujuan untuk memungkinkan komputer memahami gambar digital pada tingkat tinggi. Definisi ini cukup luas, karena pemahaman dapat berarti banyak hal, termasuk menemukan objek dalam gambar (deteksi objek), memahami apa yang sedang terjadi (deteksi peristiwa), mendeskripsikan gambar dalam teks, atau merekonstruksi sebuah adegan dalam 3D. Ada juga tugas-tugas khusus terkait gambar manusia: estimasi usia dan emosi, deteksi dan identifikasi wajah, serta estimasi pose 3D, untuk menyebut beberapa contoh.

Salah satu tugas paling sederhana dalam computer vision adalah klasifikasi gambar.

Computer vision sering dianggap sebagai cabang dari AI. Saat ini, sebagian besar tugas computer vision diselesaikan menggunakan jaringan saraf. Kita akan mempelajari lebih lanjut tentang jenis jaringan saraf khusus yang digunakan untuk computer vision, convolutional neural networks, sepanjang bagian ini.

Namun, sebelum Anda memberikan gambar ke jaringan saraf, dalam banyak kasus masuk akal untuk menggunakan beberapa teknik algoritmik untuk meningkatkan kualitas gambar.

Ada beberapa pustaka Python yang tersedia untuk pemrosesan gambar:

  • imageio dapat digunakan untuk membaca/menulis berbagai format gambar. Pustaka ini juga mendukung ffmpeg, alat yang berguna untuk mengonversi frame video menjadi gambar.
  • Pillow (juga dikenal sebagai PIL) lebih kuat, dan juga mendukung beberapa manipulasi gambar seperti morphing, penyesuaian palet, dan lainnya.
  • OpenCV adalah pustaka pemrosesan gambar yang kuat yang ditulis dalam C++, yang telah menjadi standar de facto untuk pemrosesan gambar. Pustaka ini memiliki antarmuka Python yang nyaman.
  • dlib adalah pustaka C++ yang mengimplementasikan banyak algoritma pembelajaran mesin, termasuk beberapa algoritma Computer Vision. Pustaka ini juga memiliki antarmuka Python, dan dapat digunakan untuk tugas-tugas menantang seperti deteksi wajah dan landmark wajah.

OpenCV

OpenCV dianggap sebagai standar de facto untuk pemrosesan gambar. Pustaka ini berisi banyak algoritma berguna yang diimplementasikan dalam C++. Anda juga dapat memanggil OpenCV dari Python.

Tempat yang baik untuk mempelajari OpenCV adalah kursus Learn OpenCV. Dalam kurikulum ini, tujuan kita bukan untuk mempelajari OpenCV, tetapi untuk menunjukkan beberapa contoh kapan pustaka ini dapat digunakan, dan bagaimana cara menggunakannya.

Memuat Gambar

Gambar dalam Python dapat dengan mudah direpresentasikan oleh array NumPy. Sebagai contoh, gambar grayscale dengan ukuran 320x200 piksel akan disimpan dalam array 200x320, dan gambar berwarna dengan dimensi yang sama akan memiliki bentuk 200x320x3 (untuk 3 saluran warna). Untuk memuat gambar, Anda dapat menggunakan kode berikut:

import cv2
import matplotlib.pyplot as plt

im = cv2.imread('image.jpeg')
plt.imshow(im)

Secara tradisional, OpenCV menggunakan pengkodean BGR (Blue-Green-Red) untuk gambar berwarna, sementara alat Python lainnya menggunakan pengkodean RGB (Red-Green-Blue) yang lebih umum. Agar gambar terlihat benar, Anda perlu mengonversinya ke ruang warna RGB, baik dengan menukar dimensi dalam array NumPy, atau dengan memanggil fungsi OpenCV:

im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)

Fungsi cvtColor yang sama juga dapat digunakan untuk melakukan transformasi ruang warna lainnya seperti mengonversi gambar ke grayscale atau ke ruang warna HSV (Hue-Saturation-Value).

Anda juga dapat menggunakan OpenCV untuk memuat video frame-by-frame - contohnya diberikan dalam latihan OpenCV Notebook.

Pemrosesan Gambar

Sebelum memberikan gambar ke jaringan saraf, Anda mungkin ingin menerapkan beberapa langkah pra-pemrosesan. OpenCV dapat melakukan banyak hal, termasuk:

  • Mengubah ukuran gambar menggunakan im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)
  • Memburamkan gambar menggunakan im = cv2.medianBlur(im,3) atau im = cv2.GaussianBlur(im, (3,3), 0)
  • Mengubah kecerahan dan kontras gambar dapat dilakukan dengan manipulasi array NumPy, seperti dijelaskan dalam catatan Stackoverflow ini.
  • Menggunakan thresholding dengan memanggil fungsi cv2.threshold/cv2.adaptiveThreshold, yang sering lebih disukai daripada menyesuaikan kecerahan atau kontras.
  • Menerapkan berbagai transformasi pada gambar:
    • Transformasi Afine berguna jika Anda perlu menggabungkan rotasi, perubahan ukuran, dan kemiringan pada gambar dan Anda mengetahui lokasi sumber dan tujuan dari tiga titik dalam gambar. Transformasi afine menjaga garis paralel tetap paralel.
    • Transformasi Perspektif berguna ketika Anda mengetahui posisi sumber dan tujuan dari 4 titik dalam gambar. Misalnya, jika Anda mengambil gambar dokumen persegi panjang melalui kamera smartphone dari sudut tertentu, dan Anda ingin membuat gambar persegi panjang dari dokumen itu sendiri.
  • Memahami pergerakan dalam gambar menggunakan optical flow.

Contoh Penggunaan Computer Vision

Dalam OpenCV Notebook, kami memberikan beberapa contoh kapan computer vision dapat digunakan untuk melakukan tugas tertentu:

  • Pra-pemrosesan foto buku Braille. Kami fokus pada bagaimana kami dapat menggunakan thresholding, deteksi fitur, transformasi perspektif, dan manipulasi NumPy untuk memisahkan simbol Braille individu untuk klasifikasi lebih lanjut oleh jaringan saraf.
Gambar Braille Gambar Braille yang Diproses Simbol Braille

Gambar dari OpenCV.ipynb

  • Mendeteksi gerakan dalam video menggunakan perbedaan frame. Jika kamera tetap, maka frame dari umpan kamera seharusnya cukup mirip satu sama lain. Karena frame direpresentasikan sebagai array, hanya dengan mengurangi array untuk dua frame berturut-turut kita akan mendapatkan perbedaan piksel, yang seharusnya rendah untuk frame statis, dan menjadi lebih tinggi ketika ada gerakan yang signifikan dalam gambar.

Gambar frame video dan perbedaan frame

Gambar dari OpenCV.ipynb

  • Mendeteksi gerakan menggunakan Optical Flow. Optical flow memungkinkan kita memahami bagaimana piksel individu pada frame video bergerak. Ada dua jenis optical flow:

    • Dense Optical Flow menghitung medan vektor yang menunjukkan untuk setiap piksel ke mana ia bergerak.
    • Sparse Optical Flow didasarkan pada mengambil beberapa fitur khas dalam gambar (misalnya, tepi), dan membangun trajektorinya dari frame ke frame.

Gambar Optical Flow

Gambar dari OpenCV.ipynb

✍️ Contoh Notebook: OpenCV coba OpenCV dalam Aksi

Mari kita lakukan beberapa eksperimen dengan OpenCV dengan menjelajahi OpenCV Notebook

Kesimpulan

Kadang-kadang, tugas yang relatif kompleks seperti deteksi gerakan atau deteksi ujung jari dapat diselesaikan murni dengan computer vision. Oleh karena itu, sangat membantu untuk mengetahui teknik dasar computer vision, dan apa yang dapat dilakukan pustaka seperti OpenCV.

🚀 Tantangan

Tonton video ini dari AI show untuk mempelajari tentang proyek Cortic Tigers dan bagaimana mereka membangun solusi berbasis blok untuk mendemokratisasi tugas computer vision melalui robot. Lakukan penelitian tentang proyek lain seperti ini yang membantu pemula masuk ke bidang ini.

Tinjauan & Studi Mandiri

Baca lebih lanjut tentang optical flow dalam tutorial hebat ini.

Dalam lab ini, Anda akan merekam video dengan gerakan sederhana, dan tujuan Anda adalah mengekstrak gerakan atas/bawah/kiri/kanan menggunakan optical flow.

Frame Gerakan Telapak Tangan