|
|
||
|---|---|---|
| .. | ||
| lab | ||
| OpenCV.ipynb | ||
| README.md | ||
README.md
Pengenalan kepada Penglihatan Komputer
Penglihatan Komputer adalah satu bidang yang bertujuan untuk membolehkan komputer memahami imej digital pada tahap tinggi. Ini adalah definisi yang agak luas kerana memahami boleh bermaksud pelbagai perkara, termasuk mencari objek dalam gambar (pengesanan objek), memahami apa yang sedang berlaku (pengesanan peristiwa), menerangkan gambar dalam bentuk teks, atau membina semula pemandangan dalam 3D. Terdapat juga tugas khas berkaitan imej manusia: anggaran umur dan emosi, pengesanan dan pengecaman wajah, serta anggaran pose 3D, untuk menyebut beberapa contoh.
Kuiz Pra-Kuliah
Salah satu tugas paling mudah dalam penglihatan komputer ialah pengelasan imej.
Penglihatan komputer sering dianggap sebagai cabang AI. Pada masa kini, kebanyakan tugas penglihatan komputer diselesaikan menggunakan rangkaian neural. Kita akan mempelajari lebih lanjut tentang jenis rangkaian neural khas yang digunakan untuk penglihatan komputer, rangkaian neural konvolusi, sepanjang bahagian ini.
Namun, sebelum anda menghantar imej kepada rangkaian neural, dalam banyak kes adalah masuk akal untuk menggunakan beberapa teknik algoritma untuk meningkatkan kualiti imej.
Terdapat beberapa perpustakaan Python yang tersedia untuk pemprosesan imej:
- imageio boleh digunakan untuk membaca/menulis pelbagai format imej. Ia juga menyokong ffmpeg, alat berguna untuk menukar bingkai video kepada imej.
- Pillow (juga dikenali sebagai PIL) adalah lebih berkuasa, dan juga menyokong beberapa manipulasi imej seperti morfing, pelarasan palet, dan banyak lagi.
- OpenCV adalah perpustakaan pemprosesan imej yang berkuasa ditulis dalam C++, yang telah menjadi standard de facto untuk pemprosesan imej. Ia mempunyai antara muka Python yang mudah.
- dlib adalah perpustakaan C++ yang melaksanakan banyak algoritma pembelajaran mesin, termasuk beberapa algoritma Penglihatan Komputer. Ia juga mempunyai antara muka Python, dan boleh digunakan untuk tugas mencabar seperti pengesanan wajah dan tanda wajah.
OpenCV
OpenCV dianggap sebagai standard de facto untuk pemprosesan imej. Ia mengandungi banyak algoritma berguna, yang dilaksanakan dalam C++. Anda juga boleh memanggil OpenCV dari Python.
Tempat yang baik untuk mempelajari OpenCV ialah kursus Learn OpenCV ini. Dalam kurikulum kita, matlamat kita bukan untuk mempelajari OpenCV, tetapi untuk menunjukkan beberapa contoh di mana ia boleh digunakan, dan bagaimana.
Memuatkan Imej
Imej dalam Python boleh diwakili dengan mudah oleh array NumPy. Sebagai contoh, imej skala kelabu dengan saiz 320x200 piksel akan disimpan dalam array 200x320, dan imej berwarna dengan dimensi yang sama akan mempunyai bentuk 200x320x3 (untuk 3 saluran warna). Untuk memuatkan imej, anda boleh menggunakan kod berikut:
import cv2
import matplotlib.pyplot as plt
im = cv2.imread('image.jpeg')
plt.imshow(im)
Secara tradisional, OpenCV menggunakan pengekodan BGR (Biru-Hijau-Merah) untuk imej berwarna, manakala alat Python lain menggunakan pengekodan RGB (Merah-Hijau-Biru) yang lebih tradisional. Untuk imej kelihatan betul, anda perlu menukarnya kepada ruang warna RGB, sama ada dengan menukar dimensi dalam array NumPy, atau dengan memanggil fungsi OpenCV:
im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
Fungsi cvtColor yang sama juga boleh digunakan untuk melaksanakan transformasi ruang warna lain seperti menukar imej kepada skala kelabu atau kepada ruang warna HSV (Hue-Saturation-Value).
Anda juga boleh menggunakan OpenCV untuk memuatkan bingkai video satu per satu - contoh diberikan dalam latihan OpenCV Notebook.
Pemprosesan Imej
Sebelum menghantar imej kepada rangkaian neural, anda mungkin ingin menggunakan beberapa langkah pra-pemprosesan. OpenCV boleh melakukan banyak perkara, termasuk:
- Menukar saiz imej menggunakan
im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) - Mengaburkan imej menggunakan
im = cv2.medianBlur(im,3)atauim = cv2.GaussianBlur(im, (3,3), 0) - Menukar kecerahan dan kontras imej boleh dilakukan melalui manipulasi array NumPy, seperti yang diterangkan dalam nota Stackoverflow ini.
- Menggunakan thresholding dengan memanggil fungsi
cv2.threshold/cv2.adaptiveThreshold, yang sering lebih disukai daripada melaraskan kecerahan atau kontras. - Mengaplikasikan pelbagai transformasi pada imej:
- Transformasi Afine berguna jika anda perlu menggabungkan putaran, penukaran saiz dan herotan pada imej dan anda tahu lokasi sumber dan destinasi tiga titik dalam imej. Transformasi afine mengekalkan garis selari.
- Transformasi Perspektif berguna apabila anda tahu kedudukan sumber dan destinasi 4 titik dalam imej. Sebagai contoh, jika anda mengambil gambar dokumen segi empat tepat menggunakan kamera telefon pintar dari sudut tertentu, dan anda ingin menjadikan imej dokumen itu segi empat tepat.
- Memahami pergerakan dalam imej dengan menggunakan optical flow.
Contoh Penggunaan Penglihatan Komputer
Dalam OpenCV Notebook kami, kami memberikan beberapa contoh di mana penglihatan komputer boleh digunakan untuk melaksanakan tugas tertentu:
- Pra-pemprosesan gambar buku Braille. Kami memberi tumpuan kepada bagaimana kami boleh menggunakan thresholding, pengesanan ciri, transformasi perspektif dan manipulasi NumPy untuk memisahkan simbol Braille individu untuk pengelasan lanjut oleh rangkaian neural.
![]() |
![]() |
![]() |
|---|
Imej dari OpenCV.ipynb
- Mengesan pergerakan dalam video menggunakan perbezaan bingkai. Jika kamera tetap, maka bingkai dari suapan kamera seharusnya agak serupa antara satu sama lain. Oleh kerana bingkai diwakili sebagai array, hanya dengan menolak array untuk dua bingkai berturut-turut kita akan mendapat perbezaan piksel, yang seharusnya rendah untuk bingkai statik, dan menjadi lebih tinggi apabila terdapat pergerakan yang ketara dalam imej.
Imej dari OpenCV.ipynb
-
Mengesan pergerakan menggunakan Optical Flow. Optical flow membolehkan kita memahami bagaimana piksel individu pada bingkai video bergerak. Terdapat dua jenis optical flow:
- Dense Optical Flow mengira medan vektor yang menunjukkan untuk setiap piksel ke mana ia bergerak.
- Sparse Optical Flow berdasarkan pengambilan beberapa ciri tersendiri dalam imej (contohnya, tepi), dan membina trajektori mereka dari bingkai ke bingkai.
Imej dari OpenCV.ipynb
✍️ Notebook Contoh: OpenCV cuba OpenCV dalam Tindakan
Mari kita lakukan beberapa eksperimen dengan OpenCV dengan meneroka OpenCV Notebook
Kesimpulan
Kadangkala, tugas yang agak kompleks seperti pengesanan pergerakan atau pengesanan hujung jari boleh diselesaikan sepenuhnya oleh penglihatan komputer. Oleh itu, adalah sangat berguna untuk mengetahui teknik asas penglihatan komputer, dan apa yang perpustakaan seperti OpenCV boleh lakukan.
🚀 Cabaran
Tonton video ini dari rancangan AI untuk mengetahui tentang projek Cortic Tigers dan bagaimana mereka membina penyelesaian berasaskan blok untuk mendemokrasikan tugas penglihatan komputer melalui robot. Lakukan penyelidikan tentang projek lain seperti ini yang membantu pelajar baru dalam bidang ini.
Kuiz Pasca-Kuliah
Kajian Semula & Kajian Kendiri
Baca lebih lanjut tentang optical flow dalam tutorial hebat ini.
Tugasan
Dalam makmal ini, anda akan mengambil video dengan gerakan mudah, dan matlamat anda adalah untuk mengekstrak pergerakan atas/bawah/kiri/kanan menggunakan optical flow.
Penafian:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk memastikan ketepatan, sila ambil maklum bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.




