Isi kandungan:

Pengesanan Muka + pengecaman: 8 Langkah (dengan Gambar)
Pengesanan Muka + pengecaman: 8 Langkah (dengan Gambar)

Video: Pengesanan Muka + pengecaman: 8 Langkah (dengan Gambar)

Video: Pengesanan Muka + pengecaman: 8 Langkah (dengan Gambar)
Video: Cara Perekaman Video Daftar BRImo yang benar 100% Berhasil ❗❗ 2024, November
Anonim
Image
Image
Pengesanan Muka + pengecaman
Pengesanan Muka + pengecaman

Ini adalah contoh mudah menjalankan pengesanan dan pengecaman wajah dengan OpenCV dari kamera. CATATAN: SAYA MEMBUAT PROJEK INI UNTUK KONTES SENSOR DAN SAYA MENGGUNAKAN KAMERA SEBAGAI SENSOR UNTUK MEMATUHI DAN MENGIKTIRAF FAKTA. Oleh itu, Matlamat KamiDalam sesi ini, 1. Pasang Anaconda 2. Muat turun Pakej CV Terbuka 3. Tetapkan Pemboleh ubah Alam Sekitar 4. Uji untuk mengesahkan 5 Membuat kod untuk pengesanan wajah 6. Membuat kod untuk membuat set data 7. Membuat kod untuk melatih pengecam 8. Membuat kod untuk mengenali wajah & Hasil.

Langkah 1: Pasang Anaconda

Pasang Anaconda
Pasang Anaconda

Anaconda pada dasarnya adalah Python IDE yang dibungkus dengan baik yang dihantar dengan banyak pakej berguna, seperti NumPy, Pandas, IPython Notebook, dan lain-lain. Nampaknya ia disyorkan di mana-mana sahaja dalam komuniti saintifik. Lihat Anaconda untuk memasangnya.

Langkah 2: Muat turun Pakej CV Terbuka

Muat turun Pakej CV Terbuka
Muat turun Pakej CV Terbuka

Pertama, pergi ke laman web OpenCV rasmi untuk memuat turun pakej OpenCV yang lengkap. Pilih versi yang anda suka (2.x atau 3.x). Saya menggunakan Python 2.x dan OpenCV 2.x - terutamanya kerana inilah cara Tutorial OpenCV-Python disiapkan / berdasarkan.

Dalam kes saya, saya telah mengekstrak bungkusan (pada dasarnya folder) terus ke pemacu F saya. (F: / opencv).

Langkah 3: Tetapkan Pemboleh ubah Persekitaran

Tetapkan Pemboleh ubah Persekitaran
Tetapkan Pemboleh ubah Persekitaran

Salin dan Tampal fail cv2.pyd

Direktori pakej Laman Anaconda (mis. F: / Program Files / Anaconda2 / Lib / pakej laman dalam kes saya) mengandungi pakej Python yang mungkin anda import. Tujuan kami adalah menyalin dan menampal fail cv2.pyd ke direktori ini (supaya kami dapat menggunakan cv2 import dalam kod Python kami.).

Untuk melakukan ini, salin fail cv2.pyd…

Dari direktori OpenCV ini (bahagian awal mungkin sedikit berbeza pada mesin anda):

# Mesin Python 2.7 dan 64-bit: F: / opencv / build / python / 2.7 / x64 # Mesin Python 2.7 dan 32-bit: F: / opencv / build / python / 2.7 / x84

Ke direktori Anaconda ini (bahagian awal mungkin sedikit berbeza pada mesin anda):

F: / Program Files / Anaconda2 / Lib / pakej laman web

Setelah melakukan langkah ini, kita sekarang dapat menggunakan import cv2 dalam kod Python. TETAPI, kita masih perlu melakukan lebih banyak kerja agar FFMPEG (codec video) berfungsi (untuk membolehkan kita melakukan perkara seperti memproses video.)

Klik kanan pada "Komputer Saya" (atau "Ini PC" pada Windows 8.1) -> Properties klik kiri -> tab kiri "Advanced" -> klik kiri butang "Pemboleh ubah Persekitaran …". Tambahkan Pembolehubah Pengguna baru untuk menunjukkan OpenCV (sama ada x86 untuk sistem 32-bit atau x64 untuk sistem 64-bit.) Saya kini menggunakan mesin 64-bit.

32-bitOPENCV_DIRC: / opencv / build / x86 / vc12

64-bitOPENCV_DIRC: / opencv / build / x64 / vc12

Tambahkan% OPENCV_DIR% / bin ke PATH Pembolehubah Pengguna.

Sebagai contoh, pemboleh ubah pengguna PATH saya kelihatan seperti ini…

Sebelum:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Skrip

Selepas:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Skrip;% OPENCV_DIR% / bin

Ini sudah selesai! FFMPEG siap digunakan!

Langkah 4: Uji untuk mengesahkan

Uji untuk mengesahkan
Uji untuk mengesahkan
Uji untuk mengesahkan
Uji untuk mengesahkan

Kita perlu menguji sama ada kita sekarang boleh melakukan ini di Anaconda (melalui Spyder IDE):

  • Import pakej OpenCV
  • Gunakan utiliti FFMPEG (untuk membaca / menulis / memproses video)

Ujian 1: Bolehkah kita mengimport OpenCV?

Untuk mengesahkan bahawa Anaconda kini dapat mengimport pakej OpenCV-Python (iaitu, cv2), keluarkan ini di Konsol IPython:

import cv2

cetak cv2._ versi_

Sekiranya pakej cv2 diimport ok tanpa ralat, dan versi cv2 dicetak, maka kita semua bagus!

Ujian 2: Bolehkah kita menggunakan codec FFMPEG?

Letakkan sampel

input_video.mp4

fail video dalam direktori. Kami ingin menguji sama ada kami dapat:

  • baca fail video.mp4 ini, dan
  • tulis fail video baru (boleh.avi atau.mp4 dll.)

Untuk melakukan ini, kita perlu mempunyai kod python ujian, memanggilnya test.py. Letakkannya di direktori yang sama dengan sampel

input_video.mp4

fail.

Apakah ini

test.py

mungkin kelihatan seperti (Nota: terima kasih banyak atas cadangan Pete dan Warren di ruang komen - saya telah menggantikan kod ujian asal saya dengan - sila uji sendiri dan beritahu kami jika ini berfungsi lebih baik):

import cv2

cap = cv2. VideoCapture ("input_video.mp4") cap cap.isOpened () # Benar = berjaya membaca video. Salah - gagal membaca video. fourcc = cv2. VideoWriter_fourcc (* 'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) mencetak.isOpened () # True = berjaya menulis video. Salah - gagal menulis video. cap.release () out.release ()

Ujian ini SANGAT PENTING. Sekiranya anda ingin memproses fail video, anda perlu memastikan bahawa Anaconda / Spyder IDE dapat menggunakan FFMPEG (video codec). Saya mengambil masa beberapa hari untuk berjaya. Tetapi saya harap anda memerlukan lebih sedikit masa!:) Catatan: satu lagi petua yang sangat penting semasa menggunakan IDE Anaconda Spyder. Pastikan anda menyemak Direktori Kerja Semasa (CWD) !!!

Langkah 5: Buat Kod untuk Pengesanan Muka

Buat Kod untuk Pengesanan Muka
Buat Kod untuk Pengesanan Muka
Buat Kod untuk Pengesanan Muka
Buat Kod untuk Pengesanan Muka

Matlamat

Dalam sesi ini,

  • Kami akan melihat asas pengesanan wajah menggunakan Haar Feature-based Cascade Classifiers
  • Kami akan memberikan perkara yang sama untuk pengesanan mata dan lain-lain

Pengesanan Haar-cascade di OpenCV

Di sini kita akan menangani pengesanan. OpenCV sudah mengandungi banyak pengklasifikasi pra-latihan untuk wajah, mata, senyuman dan lain-lain. Fail XML tersebut disimpan dalam folder opencv / data / haarcascades / folder. Mari buat alat pengesan wajah dan mata dengan OpenCV. Pertama kita perlu memuatkan pengkelasan XML yang diperlukan. Kemudian muatkan gambar input kami (atau video) dalam mod skala abu-abu ATAU kita boleh menggunakan kamera (untuk pengesanan wajah masa nyata)

import numpy sebagai np

import cv2 face_cascade = cv2. CascadeClassifier ('F: / Files Program / opencv / sumber / data / haarcascades / haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F: / Program Program / opencv / sumber / data / haarcascade.xml ') cap = cv2. VideoCapture (0) manakala 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) face = face_cascade.detectMultiScale (kelabu, 1.5, 5) untuk (x, y, w, h) di muka: cv2. segi empat tepat (img, (x, y), (x + w, y + h), (255, 0, 0), 2) roi_gray = kelabu [y: y + h, x: x + w] roi_color = img [y: y + h, x: x + w] eyes = eye_cascade.detectMultiScale (roi_gray) untuk (mis., ey, ew, eh) pada mata: cv2.rectangle (roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) cetak "found" + str (len (wajah)) + "face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff jika k == 27: break cap.release () cv2.destroyAllWindows ()

Langkah 6: Buat Kod untuk Membuat Set Data

Buat Kod untuk Membuat Set Data
Buat Kod untuk Membuat Set Data
Buat Kod untuk Membuat Set Data
Buat Kod untuk Membuat Set Data

Kami melakukan pengecaman wajah, jadi anda memerlukan beberapa gambar wajah! Anda boleh membuat set data anda sendiri atau memulakan dengan salah satu pangkalan data wajah yang ada, https://face-rec.org/databases/ memberikan gambaran keseluruhan terkini. Tiga pangkalan data yang menarik adalah (bahagian penerangannya dipetik dari

  • Pangkalan Data AT&T
  • Yale Facedatabase A
  • Facedatabase Yale yang diperluas B

DI SINI saya menggunakan set data saya sendiri …. dengan bantuan kod yang diberikan di bawah:

import numpy sebagai np

import cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sumber / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('masukkan id pengguna') sampelN = 0; manakala 1: ret, img = cap.read () kelabu = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) face = face_cascade.detectMultiScale (grey, 1.3, 5) untuk (x, y, w, h) di wajah: sampleN = sampelN + 1; cv2.imwrite ("F: / Program Files / projek / face_rec / wajahData / Pengguna." + str (id) + "." + str (sampleN) + ".jpg", kelabu [y: y + h, x: x + w]) cv2. segi empat tepat (img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) jika sampleN> 20: break cap.release () cv2.destroyAllWindows ()

Langkah 7: Buat Kod untuk Melatih Pengecam

Buat Kod untuk Melatih Pengecam
Buat Kod untuk Melatih Pengecam

Buat fungsi untuk menyediakan set latihan

Sekarang, kita akan menentukan fungsi

getImagesWithID (jalan)

yang mengambil jalan mutlak ke pangkalan data gambar sebagai argumen input dan mengembalikan tuple dari 2 senarai, satu mengandungi wajah yang dikesan dan yang lain mengandungi label yang sesuai untuk wajah itu. Sebagai contoh, jika indeks ith dalam senarai wajah mewakili individu ke-5 dalam pangkalan data, maka lokasi ith yang sesuai dalam senarai label mempunyai nilai sama dengan 5.

Sekarang ubah wajah set data (yang dibuat pada langkah 6) menjadi fail.yml dengan bantuan kod yang diberikan di bawah:

import os

import numpy sebagai np import cv2 dari PIL import Image # Untuk pengecaman wajah kita akan LBPH Face Recognizer mengenali = cv2.createLBPHFaceRecognizer (); path = "F: / Program Files / projek / face_rec / faceData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) untuk f in os.listdir (path)] # print image_path #getImagesWithID (path) wajah = ID = untuk imagePath di imagePaths: # Baca gambar dan tukar ke muka skala kelabuImg = Image.open (imagePath).convert ('L') faceNP = np.array (wajahImg, 'uint8') # Dapatkan label ID gambar = int (os.path.split (imagePath) [- 1].split (".") [1]) # Mengesan wajah dalam gambar face.append (faceNP) IDs.append (ID) cv2.imshow ("Menambah wajah untuk dilatih", faceNP) cv2.waitKey (10) return np.array (ID), Ids wajah, wajah = getImagesWithID (path) recognition.train (wajah, Id) pengecam.save ("F: / Fail Program / projek / face_rec / faceREC / trainingdata.yml") cv2.destroyAllWindows ()

dengan menggunakan kod ini semua dataset wajah diubah menjadi satu fail.yml….. lokasi path adalah ("F: / Program Files / projek / face_rec / faceREC / trainingdata.yml")

Langkah 8: Buat Kod untuk Mengenali Muka & Hasilnya

Guyzz ini adalah langkah terakhir di mana kita dapat membuat kod untuk mengenali wajah dengan bantuan kamera web anda. 1. merakam video dari cam 2. bandingkan dengan fail.yml anda

import numpy sebagai npimport cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / sumber / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFace rec.load ("F: / Program Files / projek / face_rec / faceREC / trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) sementara 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) face = face_cascade.detectMultiScale (grey, 1.5, 5) untuk (x, y, w, h) di wajah: cv2. segiempat (img, (x, y), (x + w, y + h), (255, 0, 0), 2) id, conf = rec.predict (kelabu [y: y + h, x: x + w]) if (id == 2): id = "alok" if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" jika id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y + h), fon, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

dan akhirnya hasilnya akan muncul di depan mata anda …… anda juga boleh memuat turun fail zip dari bawah pautan: Klik di sini untuk memuat turun kodJadi, dalam arahan ini kami melakukan tugas pengesanan wajah + pengenalan menggunakan OpenCV…..jika anda seperti yang diarahkan ini….. plzzz melanggan saya dan memilih saya…..terima kasih kawan:)

Disyorkan: