Isi kandungan:

Projek Asas OpenCV: 5 Langkah
Projek Asas OpenCV: 5 Langkah

Video: Projek Asas OpenCV: 5 Langkah

Video: Projek Asas OpenCV: 5 Langkah
Video: Gesture-Controlled Servo with Python and Arduino #electronics #arduinotraining 2024, November
Anonim
Projek Asas OpenCV
Projek Asas OpenCV

Dalam projek ini, kami meneroka beberapa fungsi asas OpenCV melalui 4 projek mudah yang melibatkan aliran video langsung. Ini adalah pengecaman wajah, penghapusan latar belakang, penampilan visual khas dari tepi, dan menerapkan kesan kabur pada aliran video langsung. Tujuan utama saya untuk mencuba projek-projek ini adalah agar kaki saya basah dengan antara muka OpenCV, kerana saya merancang untuk menyelami bidang penglihatan komputer dengan lebih mendalam

Bekalan

  • Komputer yang menjalankan Python
  • Buka perpustakaan CV, perpustakaan Numpy, perpustakaan tkinter, perpustakaan sys
  • Kamera untuk disambungkan ke komputer (jika komputer belum termasuk)
  • Fail python program (termasuk dalam arahan ini)
  • fail haarcascade xml (termasuk dalam arahan ini)

Langkah 1: Fungsi FaceDetect

Fungsi FaceDetect
Fungsi FaceDetect
Fungsi FaceDetect
Fungsi FaceDetect

Fungsi ini menunjukkan video kamera anda dengan kotak hijau pada wajah yang diambilnya. Dalam kod, kami menggunakan fungsi cv2. VideoCapture () untuk menyimpan video yang kami tangkap dalam objek bernama "capture". CAPTURE_INDEX adalah nombor yang ditetapkan oleh komputer anda yang sesuai dengan indeks kamera anda dalam senarai input video komputer. Sekiranya anda tidak mempunyai kamera luaran yang disambungkan ke komputer anda, 0 atau 1 harus berfungsi.

Objek face_cascade diinisialisasi menggunakan fungsi cascadeClassifier dan fail "haarcascade_frontalface_default.xml" yang terdapat di github OpenCV. Kami menggunakan objek ini untuk menyimpan wajah yang dikesan dalam senarai "wajah" sebagai entri empat arah-tuple yang memegang koordinat wajah x, koordinat y, lebar dan tinggi. Kami kemudian melukis segi empat tepat yang menutup wajah dengan menggunakan fungsi cv2.rectangle

Dari video ini, OpenCV menangkap banyak gambar dalam loop sementara kami menggunakan capture.read () dan menyimpan gambar dalam bingkai yang kami namakan "img". Setiap gambar kemudian ditafsirkan dan diubah mengikut kehendak kita. Untuk faceDetect, kami menjadikan gambar menjadi kelabu menggunakan fungsi cvtColor yang mengubah gambar apa pun yang diberikan pada parameter pertama menjadi jenis warna gambar tertentu yang ditentukan dalam parameter kedua. Senarai nilai yang boleh diterima untuk parameter kedua boleh didapati dalam talian. Kami kemudian menampilkan gambar di jendela bernama "Mendeteksi wajah" menggunakan fungsi imshow () yang mengambil string untuk nama jendela dan bingkai gambar yang akan ditampilkan.

Akhirnya kami menunggu pengguna memasukkan kekunci q menggunakan fungsi cv2.waitKey (). Topeng 0xFF digunakan sebagai konvensyen untuk komputer 64 bit. Setelah pengguna menamatkan aliran video, fungsi faceDetect membebaskan objek penangkapan kemudian memusnahkan tetingkap lain yang dibuka di bawah antara muka OpenCV. Semua fungsi lain mengikuti struktur reka bentuk yang serupa.

Langkah 2: Fungsi BackgroundRemove

Fungsi Latar Belakang
Fungsi Latar Belakang
Fungsi Latar Belakang
Fungsi Latar Belakang

Fungsi ini cuba membuang bahagian latar video kami dan hanya meninggalkan gambar latar depan. Mungkin tidak berfungsi pada beberapa kamera, karena mereka menggunakan fungsi penyesuaian pencahayaan yang diaktifkan ketika objek / fokus yang berbeda memasuki bingkai. Sekiranya fungsi BackgroundRemove anda tidak berfungsi, jangan khuatir - ini mungkin hanya kamera anda!

Untuk menggunakan fungsi ini, jauhkan dari bingkai kamera dan tekan kekunci "d" untuk menangkap gambar latar. Penting untuk tidak ada objek bergerak di latar belakang yang ingin anda tangkap. Kemudian, kita dapat melangkah kembali ke bingkai kamera. Sekiranya fungsi berfungsi, pengguna hanya akan melihat diri mereka di aliran video fungsi. Sebarang bunyi / gumpalan hitam pada gambar latar depan mungkin disebabkan oleh penyesuaian pencahayaan kamera. Untuk menangkap latar belakang yang lain, tekan kekunci "r" untuk memulakan semula, kemudian tekan "d" sekali lagi.

Beberapa langkah utama untuk fungsi ini adalah penggunaan boolean "flag" yang dinaikkan sebaik sahaja pengguna menekan butang d. Ini menangkap latar belakang dan membolehkan kita mengeluarkannya dari video yang disiarkan oleh fungsi. Kami bertujuan untuk menyimpan gambar latar dalam ref_img sehingga kami dapat membezakannya dari gambar latar depan, yang menangkap objek bergerak. Kami menggunakan fungsi cv2.subtract () untuk mengurangkan gambar permukaan depan dari gambar latar dan sebaliknya, kemudian membatalkan sebarang perbezaan kecil dalam kedua gambar tersebut segera setelahnya. Latar belakang dihitamkan.

Fgmask dibuat menggunakan perbezaan antara kedua gambar ini dan kemudian diterapkan pada aliran video fungsi menggunakan fungsi OpenCV cv2.bitwise_and ().

Langkah 3: Fungsi VideoEdges

Fungsi VideoEdges
Fungsi VideoEdges
Fungsi VideoEdges
Fungsi VideoEdges

Fungsi ini mengembalikan aliran video langsung kami, tetapi bahagian tepi yang dapat dikesan berwarna putih sementara yang lain dihitamkan. Apa yang membezakan fungsi ini dari fungsi lain adalah penukaran video asal kami dari format RBG ke HSV, yang bermaksud warna, tepu dan variasi - kaedah memproses cahaya dan warna yang berbeza dari video. Dengan kaedah ini, kita dapat dengan lebih mudah membezakan garis besar dalam video dengan menggunakan penapis (red_low hingga red_high).

Canny Edge Detection digunakan untuk mengesan tepi dalam gambar. Ia menerima gambar skala kelabu sebagai input dan menggunakan algoritma bertingkat.

Langkah 4: Fungsi VideoBlur

Fungsi VideoBlur
Fungsi VideoBlur
Fungsi VideoBlur
Fungsi VideoBlur

Fungsi ini digunakan untuk menambahkan kesan kabur pada aliran video kami. Fungsi sederhana memanggil fungsi GaussianBlur cv2 pada bingkai kami. Maklumat lebih lanjut mengenai fungsi gaussianBlur boleh didapati di sini:

opencv-python-tutroals.readthedocs.io/en/l…

Langkah 5: Penambahbaikan

Fungsi yang paling sensitif dalam projek ini adalah fungsi penyingkiran latar, kerana memerlukan penggunaan kamera yang tidak mempunyai fungsi penyesuaian pencahayaan. Mungkin ada sekumpulan fungsi yang lebih baik dalam perpustakaan OpenCV yang dapat menjelaskan penyesuaian pencahayaan ini dan menghilangkan latar belakang dengan lancar (serupa dengan layar hijau).

Kami juga dapat menggunakan fungsi pengesanan wajah lain yang dapat menghasilkan objek dengan lebih banyak fungsi selain hanya mengembalikan koordinat (x, y). Mungkin program pengecaman wajah dengan kemampuan mengingat wajah tidak terlalu sukar untuk dilaksanakan.

Fungsi kabur dapat dibuat lebih banyak penyesuaian melalui kawalan intuitif oleh pengguna. Sebagai contoh, pengguna mungkin mahu menyesuaikan intensiti kesan kabur atau memilih kawasan tertentu dalam bingkai untuk kabur.

Disyorkan: