Daftar Isi:

Deteksi Wajah + pengenalan: 8 Langkah (dengan Gambar)
Deteksi Wajah + pengenalan: 8 Langkah (dengan Gambar)

Video: Deteksi Wajah + pengenalan: 8 Langkah (dengan Gambar)

Video: Deteksi Wajah + pengenalan: 8 Langkah (dengan Gambar)
Video: Membuat Deteksi Wajah dari Awal | Training Custom Datasets Yolo V8 | Face Detection | Google Collab 2024, Juli
Anonim
Image
Image
Deteksi + pengenalan wajah
Deteksi + pengenalan wajah

Ini adalah contoh sederhana menjalankan deteksi dan pengenalan wajah dengan OpenCV dari kamera. CATATAN: SAYA MEMBUAT PROYEK INI UNTUK KONTES SENSOR DAN SAYA MENGGUNAKAN KAMERA SEBAGAI SENSOR UNTUK TRACK DAN PENGENALAN WAJAH. Jadi, Tujuan KamiDalam sesi ini, 1. Instal Anaconda 2. Download Open CV Package 3. Set Variabel Lingkungan 4. Tes untuk mengkonfirmasi 5 Membuat kode untuk pendeteksi wajah 6. Membuat kode untuk membuat kumpulan data 7. Membuat kode untuk melatih pengenal 8. Membuat kode untuk mengenali wajah &Hasilnya.

Langkah 1: Instal Anaconda

Instal Anaconda
Instal Anaconda

Anaconda pada dasarnya adalah IDE Python yang dikemas dengan baik yang dikirimkan dengan banyak paket berguna, seperti NumPy, Pandas, IPython Notebook, dll. Tampaknya direkomendasikan di mana-mana di komunitas ilmiah. Lihat Anaconda untuk menginstalnya.

Langkah 2: Unduh Buka Paket CV

Unduh Buka Paket CV
Unduh Buka Paket CV

Pertama, buka situs resmi OpenCV untuk mengunduh paket OpenCV lengkap. Pilih versi yang Anda suka (2.x atau 3.x). Saya menggunakan Python 2.x dan OpenCV 2.x - terutama karena ini adalah bagaimana Tutorial OpenCV-Python diatur/berdasarkan.

Dalam kasus saya, saya telah mengekstrak paket (pada dasarnya folder) langsung ke drive F saya. (F:\opencv).

Langkah 3: Tetapkan Variabel Lingkungan

Tetapkan Variabel Lingkungan
Tetapkan Variabel Lingkungan

Salin dan Tempel file cv2.pyd

Direktori Paket Situs Anaconda (mis. F:\Program Files\Anaconda2\Lib\site-packages dalam kasus saya) berisi paket Python yang dapat Anda impor. Tujuan kami adalah menyalin dan menempelkan file cv2.pyd ke direktori ini (sehingga kami dapat menggunakan impor cv2 dalam kode Python kami.).

Untuk melakukan ini, salin file cv2.pyd…

Dari direktori OpenCV ini (bagian awal mungkin sedikit berbeda 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 (bagian awal mungkin sedikit berbeda pada mesin Anda):

F:\Program Files\Anaconda2\Lib\site-packages

Setelah melakukan langkah ini, sekarang kita dapat menggunakan import cv2 dalam kode Python. NAMUN, kami masih perlu melakukan sedikit lebih banyak pekerjaan agar FFMPEG (codec video) berfungsi (untuk memungkinkan kami melakukan hal-hal seperti memproses video.)

Klik kanan pada "My Computer" (atau "This PC" pada Windows 8.1) -> klik kiri Properties -> klik kiri tab "Advanced" -> klik kiri tombol "Environment Variables…". Tambahkan Variabel Pengguna baru untuk menunjuk ke OpenCV (baik x86 untuk sistem 32-bit atau x64 untuk sistem 64-bit.) Saat ini saya menggunakan mesin 64-bit.

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

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

Tambahkan %OPENCV_DIR%\bin ke PATH Variabel Pengguna.

Misalnya, variabel pengguna PATH saya terlihat seperti ini…

Sebelum:

F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts

Setelah:

F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts;%OPENCV_DIR%\bin

Ini dia kita selesai! FFMPEG siap digunakan!

Langkah 4: Uji untuk Konfirmasi

Tes untuk Konfirmasi
Tes untuk Konfirmasi
Tes untuk Konfirmasi
Tes untuk Konfirmasi

Kita perlu menguji apakah sekarang kita dapat melakukan ini di Anaconda (melalui Spyder IDE):

  • Impor paket OpenCV
  • Gunakan utilitas FFMPEG (untuk membaca/menulis/memproses video)

Tes 1: Bisakah kita mengimpor OpenCV?

Untuk memastikan bahwa Anaconda sekarang dapat mengimpor paket OpenCV-Python (yaitu, cv2), keluarkan ini di Konsol IPython:

impor cv2

cetak cv2._version_

Jika paket cv2 diimpor dengan baik tanpa kesalahan, dan versi cv2 dicetak, maka kita semua baik-baik saja!

Tes 2: Bisakah kita Menggunakan codec FFMPEG?

Tempatkan sampel

masukan_video.mp4

file video dalam direktori. Kami ingin menguji apakah kami dapat:

  • baca file video.mp4 ini, dan
  • tulis file video baru (bisa.avi atau.mp4 dll.)

Untuk melakukan ini kita perlu memiliki kode python uji, sebut saja test.py. Tempatkan di direktori yang sama dengan sampel

masukan_video.mp4

mengajukan.

ini adalah apa

test.py

mungkin terlihat seperti (Catatan: terima kasih banyak atas saran Pete dan Warren di bidang komentar - Saya telah mengganti kode pengujian asli saya dengan kodenya - silakan uji sendiri dan beri tahu kami jika ini berfungsi lebih baik):

impor cv2

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

Tes ini SANGAT PENTING. Jika Anda ingin memproses file video, Anda harus memastikan bahwa Anaconda / Spyder IDE dapat menggunakan FFMPEG (codec video). Butuh waktu berhari-hari untuk membuatnya bekerja. Tapi saya harap itu akan membawa Anda lebih sedikit waktu!:) Catatan: satu lagi tip yang sangat penting saat menggunakan Anaconda Spyder IDE. Pastikan Anda memeriksa Direktori Kerja Saat Ini (CWD)!!!

Langkah 5: Buat Kode untuk Deteksi Wajah

Buat Kode untuk Deteksi Wajah
Buat Kode untuk Deteksi Wajah
Buat Kode untuk Deteksi Wajah
Buat Kode untuk Deteksi Wajah

Sasaran

Dalam sesi ini,

  • Kita akan melihat dasar-dasar deteksi wajah menggunakan Pengklasifikasi Kaskade Berbasis Fitur Haar
  • Kami akan memperluas hal yang sama untuk deteksi mata dll

Deteksi Haar-cascade di OpenCV

Di sini kita akan berurusan dengan deteksi. OpenCV sudah berisi banyak pengklasifikasi pra-terlatih untuk wajah, mata, senyum dll. File XML tersebut disimpan di folder opencv/data/haarcascades/. Mari kita buat pendeteksi wajah dan mata dengan OpenCV. Pertama kita perlu memuat pengklasifikasi XML yang diperlukan. Kemudian muat gambar input kami (atau video) dalam mode skala abu-abu ATAU kami dapat menggunakan kamera (untuk deteksi wajah waktu nyata)

impor numpy sebagai np

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades.xml') cap = cv2. VideoCapture(0)sementara 1: ret, img = cap.read() grey = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) face = face_cascade.detectMultiScale(abu-abu, 1,5, 5) untuk (x, y, w, h) di wajah: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = abu-abu[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) di mata: cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2) print "ditemukan " +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 Kode untuk Membuat Kumpulan Data

Buat Kode untuk Membuat Kumpulan Data
Buat Kode untuk Membuat Kumpulan Data
Buat Kode untuk Membuat Kumpulan Data
Buat Kode untuk Membuat Kumpulan Data

Kami sedang melakukan pengenalan wajah, jadi Anda memerlukan beberapa gambar wajah! Anda dapat membuat kumpulan data Anda sendiri atau memulai dengan salah satu database wajah yang tersedia, https://face-rec.org/databases/ memberi Anda ikhtisar terkini. Tiga database yang menarik adalah (bagian dari deskripsi dikutip dari

  • AT&T Facedatabase
  • Yale Facedatabase A
  • Diperpanjang Yale Facedatabase B

DI SINI saya menggunakan dataset saya sendiri …. dengan bantuan kode yang diberikan di bawah ini:

impor numpy sebagai np

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) id = raw_input('masukkan id pengguna') sampleN=0; sementara 1: ret, img = cap.read() abu-abu = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) wajah = face_cascade.detectMultiScale(abu-abu, 1.3, 5) untuk (x, y, w, h) di wajah: sampleN =sampelN+1; cv2.imwrite("F:/Program Files/projects/face_rec/facesData/User."+str(id)+ "." +str(sampelN)+ ".jpg", abu-abu[y:y+h, x: x+w]) cv2.rectangle(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 Kode untuk Melatih Pengenal

Buat Kode untuk Melatih Pengenal
Buat Kode untuk Melatih Pengenal

Buat fungsi untuk menyiapkan set pelatihan

Sekarang, kita akan mendefinisikan sebuah fungsi

getImagesWithID(jalur)

yang mengambil jalur absolut ke database gambar sebagai argumen input dan mengembalikan tuple dari 2 daftar, satu berisi wajah yang terdeteksi dan yang lainnya berisi label yang sesuai untuk wajah itu. Misalnya, jika indeks ke-i dalam daftar wajah mewakili individu ke-5 dalam database, maka lokasi ke-i yang sesuai dalam daftar label memiliki nilai sama dengan 5.

Sekarang ubah wajah dataset (yang dibuat pada langkah 6) menjadi file.yml dengan bantuan kode yang diberikan di bawah ini:

impor os

import numpy as np import cv2 from PIL import Image # Untuk pengenalan wajah kita akan menggunakan LBPH Face Recognizer = cv2.createLBPHFaceRecognizer(); path="F:/Program Files/projects/face_rec/facesData" def getImagesWithID(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] # print image_path #getImagesWithID(path) face = ID = untuk imagePath di imagePaths: # Baca gambar dan ubah ke grayscale faceImg = Image.open(imagePath).convert('L') faceNP = np.array(facesImg, 'uint8') # Dapatkan label ID gambar= int(os.path.split(imagePath)[-1].split(".")[1]) # Deteksi wajah pada gambar face.append(faceNP) IDs.append (ID) cv2.imshow("Menambahkan wajah untuk pelatihan", faceNP) cv2.waitKey(10) mengembalikan np.array(ID), ID wajah, wajah = getImagesWithID(jalur) pengenal.train(wajah, Id) pengenal.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows()

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

Langkah 8: Buat Kode untuk Mengenali Wajah & Hasil

Guyzz ini adalah langkah terakhir di mana kita dapat membuat kode untuk mengenali wajah dengan bantuan webcam Anda DALAM LANGKAH INI ADA DUA OPERASI YANG AKAN DILAKUKAN…. 1. merekam video dari kamera 2. membandingkannya dengan file.yml Anda

import numpy sebagai npimport cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) rec = cv2.createLBPHFaceRecognizer(); rec.load("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id=0 font=cv2.cv. InitFont(cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) while 1: ret, img = cap.read() abu-abu = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) wajah = face_cascade.detectMultiScale(abu-abu, 1,5, 5) untuk (x, y, w, h) di wajah: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf=rec.predict(abu-abu[y:y+h, x:x+w]) if(id==2): id="alok" jika id==1: id="alok" jika id==3: id="anjali" jika 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), font, 255) cv2.imshow('img', img) if cv2.waitKey(1) == ord('q'): break cap.release()

cv2.destroySemuaWindows()

dan akhirnya hasilnya akan muncul di depan mata Anda……Anda juga dapat mengunduh file zip dari tautan di bawah ini:Klik di sini untuk mengunduh kodeJadi, dalam instruksi ini kami melakukan tugas deteksi+pengenalan wajah menggunakan OpenCV…..jika Anda seperti instruksi ini ….. plzzz berlangganan saya dan pilih saya ….. terima kasih teman-teman:)

Direkomendasikan: