Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Real-Time Face Recognition:Proyek End-to-End

Kita akan mempelajari langkah demi langkah, cara menggunakan PiCam untuk mengenali wajah secara real-time.Pada tutorial terakhir saya menjelajahi OpenCV, kita mempelajari AUTOMATIC VISION OBJECT TRACKING.

Sekarang kita akan menggunakan PiCam untuk mengenali wajah secara real-time, seperti yang Anda lihat di bawah:

Proyek ini diselesaikan dengan “Open Source Computer Vision Library” yang fantastis ini, OpenCV. Pada tutorial ini, kita akan fokus pada Raspberry Pi (jadi, Raspbian sebagai OS) dan Python, tetapi saya juga menguji kode di My Mac dan juga berfungsi dengan baik. OpenCV dirancang untuk efisiensi komputasi dan dengan fokus yang kuat pada aplikasi waktu nyata. Jadi, ini sempurna untuk pengenalan wajah waktu nyata menggunakan kamera.

3 Fase

Untuk membuat proyek lengkap pada Pengenalan Wajah, kita harus mengerjakan 3 fase yang sangat berbeda:

Diagram blok di bawah melanjutkan fase-fase tersebut:

Langkah 1:BoM – Bill of Material

Bagian utama:

Langkah 2:Menginstal Paket OpenCV 3

Saya menggunakan Raspberry Pi V3 yang diperbarui ke versi terakhir Raspbian (Stretch), jadi cara terbaik untuk menginstal OpenCV adalah dengan mengikuti tutorial luar biasa yang dikembangkan oleh Adrian Rosebrock: Raspbian Stretch:Install OpenCV 3 + Python di Raspberry Pi Anda.

Saya mencoba beberapa panduan berbeda untuk menginstal OpenCV di Pi saya. Tutorial Adrian adalah yang terbaik. Saya menyarankan Anda untuk melakukan hal yang sama, mengikuti panduannya selangkah demi selangkah.

Setelah Anda menyelesaikan tutorial Adrian, Anda harus memiliki lingkungan virtual OpenCV yang siap untuk menjalankan eksperimen kami di Pi Anda.

Mari kita pergi ke lingkungan virtual kita dan memastikan bahwa OpenCV 3 telah diinstal dengan benar.

Adrian merekomendasikan untuk menjalankan perintah “source” setiap kali Anda membuka terminal baru untuk memastikan variabel sistem Anda telah disiapkan dengan benar.

sumber ~/.profile

Selanjutnya, mari masuk ke lingkungan virtual kita:

kerja cv

Jika Anda melihat teks (cv) sebelum perintah Anda, berarti Anda berada di cv virtual lingkungan:

(cv) pi@raspberry:~$

Adrian meminta perhatian bahwa lingkungan virtual cv Python sepenuhnya independen dan diasingkan dari versi Python default yang disertakan dalam unduhan Raspbian Stretch. Jadi, semua paket Python di direktori paket situs global tidak akan tersedia untuk lingkungan virtual cv. Demikian pula, paket Python apa pun yang diinstal di paket situs cv tidak akan tersedia untuk instalasi global Python.

Sekarang, masukkan juru bahasa Python Anda:

ular piton

dan konfirmasikan bahwa Anda menjalankan versi 3.5 (atau lebih tinggi).

Di dalam interpreter (">>>" akan muncul), impor perpustakaan OpenCV:

impor cv2

Jika tidak ada pesan kesalahan yang muncul, OpenCV telah diinstal dengan benar DI LINGKUNGAN VIRTUAL PYTHON ANDA.

Anda juga dapat memeriksa versi OpenCV yang diinstal:

cv2.__version__

3.3.0 akan muncul (atau versi superior yang dapat dirilis di masa mendatang).

Layar Cetak Terminal di atas menunjukkan langkah-langkah sebelumnya.

Langkah 3:Menguji Kamera Anda

Setelah Anda menginstal OpenCV di RPi Anda, mari kita uji untuk memastikan bahwa kamera Anda berfungsi dengan baik.

Saya berasumsi bahwa Anda telah menginstal PiCam di Raspberry Pi Anda.

Anda harus mengaktifkan kamera saat menjalankan tutorial Adrian, jika tidak, driver tidak akan diinstal dengan benar.

Jika Anda mendapatkan kesalahan seperti: Kesalahan OpenCV:Pernyataan gagal , Anda dapat mencoba memecahkan masalah, menggunakan perintah:

sudo modprobe bcm2835-v4l2

Setelah Anda menginstal semua driver dengan benar, masukkan kode Python di bawah ini pada IDE Anda:

import numpy as np
import cv2
cap =cv2.VideoCapture(0)
cap.set(3,640) # set Lebar
cap.set(4,480) # set Tinggi
sementara(Benar):
ret, frame =cap.read()
frame =cv2.flip(frame, -1) # Membalik kamera secara vertikal
abu-abu =cv2.cvtColor(frame , cv2.COLOR_BGR2GRAY)

cv2.imshow('bingkai', bingkai)
cv2.imshow('abu-abu', abu-abu)

k =cv2.waitKey(30) &0xff
if k ==27:# tekan 'ESC' untuk keluar
break
cap.release()
cv2.destroyAllWindows()

Kode di atas akan menangkap aliran video yang akan dihasilkan oleh PiCam Anda, menampilkan keduanya, dalam mode warna BGR dan Abu-abu.

Perhatikan bahwa saya memutar kamera saya secara vertikal karena cara perakitannya. Jika ini bukan kasus Anda, beri komentar atau hapus baris perintah “flip”.

Anda juga dapat mengunduh kode dari GitHub saya: simpleCamTest.py

Untuk mengeksekusi, masukkan perintah:

python simpleCamTest.py

Untuk menyelesaikan program, Anda harus menekan tombol [ESC] pada keyboard Anda. Klik mouse Anda pada jendela video, sebelum menekan [ESC].

Gambar di atas menunjukkan hasilnya.

Beberapa pembuat menemukan masalah saat mencoba membuka kamera (pesan kesalahan "Pernyataan gagal"). Itu bisa terjadi jika kamera tidak diaktifkan selama instalasi OpenCv dan karenanya, driver kamera tidak diinstal dengan benar. Untuk mengoreksi, gunakan perintah:

sudo modprobe bcm2835-v4l2

Anda juga dapat menambahkan bcm2835-v4l2 ke baris terakhir file /etc/modules sehingga driver dimuat saat boot.

Untuk mengetahui lebih lanjut tentang OpenCV, Anda dapat mengikuti tutorial: loading -video-python-opencv-tutorial

Langkah 4:Deteksi Wajah

Tugas paling dasar dalam Pengenalan Wajah tentu saja, “Mendeteksi Wajah”. Sebelum melakukan apa pun, Anda harus "menangkap" wajah (Tahap 1) untuk mengenalinya, jika dibandingkan dengan wajah baru yang diambil di masa depan (Tahap 3).

Cara paling umum untuk mendeteksi wajah (atau objek apa pun), adalah menggunakan “pengklasifikasi Haar Cascade“

Deteksi Objek menggunakan pengklasifikasi kaskade berbasis fitur Haar adalah metode deteksi objek efektif yang diusulkan oleh Paul Viola dan Michael Jones dalam makalah mereka, “Deteksi Objek Cepat menggunakan Kaskade yang Didorong dari Fitur Sederhana” pada tahun 2001. Ini adalah pendekatan berbasis pembelajaran mesin di mana fungsi kaskade dilatih dari banyak gambar positif dan negatif. Ini kemudian digunakan untuk mendeteksi objek di gambar lain.

Di sini kita akan bekerja dengan deteksi wajah. Awalnya, algoritma membutuhkan banyak gambar positif (gambar wajah) dan gambar negatif (gambar tanpa wajah) untuk melatih pengklasifikasi. Maka kita perlu mengekstrak fitur darinya. Kabar baiknya adalah OpenCV hadir dengan pelatih dan juga detektor. Jika Anda ingin melatih pengklasifikasi Anda sendiri untuk objek apa pun seperti mobil, pesawat, dll. Anda dapat menggunakan OpenCV untuk membuatnya. Detail lengkapnya diberikan di sini: Pelatihan Pengklasifikasi Kaskade.

Jika Anda tidak ingin membuat pengklasifikasi sendiri, OpenCV sudah berisi banyak pengklasifikasi yang telah dilatih sebelumnya untuk wajah, mata, senyum, dll. File XML tersebut dapat diunduh dari direktori haarcascades.

Cukup teorinya, ayo buat pendeteksi wajah dengan OpenCV!

Unduh file: faceDetection.py dari GitHub saya.

import numpy sebagai np
import cv2
faceCascade =cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
cap =cv2.VideoCapture(0)
cap.set(3.640) # atur Lebar
cap.set(4,480) # atur Tinggi
sementara Benar:
ret, img =cap.read()
img =cv2.flip(img, -1 )
abu-abu =cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces =faceCascade.detectMultiScale(
abu-abu,
scaleFactor=1.2,
minNeighbors=5,
minSize=(20, 20)
)
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]
cv2.imshow('video',img)
k =cv2.waitKey(30) &0xff
jika k ==27:# tekan 'ESC ' untuk keluar
break
cap.release()
cv2.destroyAllWindows()

Percaya atau tidak, hanya beberapa baris kode di atas yang Anda perlukan untuk mendeteksi wajah, menggunakan Python dan OpenCV.

Bila Anda membandingkan dengan kode terakhir yang digunakan untuk menguji kamera, Anda akan menyadari bahwa beberapa bagian telah ditambahkan ke dalamnya. Perhatikan baris di bawah ini:

faceCascade =cv2.CascadeClassifier(‘Cascades/haarcascade_frontalface_default.xml’)

Ini adalah baris yang memuat "classifier" (yang harus berada di direktori bernama "Cascades/", di bawah direktori proyek Anda).

Kemudian, kita akan mengatur kamera kita dan di dalam loop, memuat video input kita dalam mode skala abu-abu (sama seperti yang kita lihat sebelumnya).

Sekarang kita harus memanggil fungsi classifier kita, meneruskannya beberapa parameter yang sangat penting, seperti faktor skala, jumlah tetangga, dan ukuran minimum wajah yang terdeteksi.

face =faceCascade.detectMultiScale(
abu-abu,
scaleFactor=1.2,
minNeighbors=5,
minSize=(20, 20)
)

Di mana,

Fungsi ini akan mendeteksi wajah pada gambar. Selanjutnya, kita harus "menandai" wajah pada gambar, menggunakan, misalnya, persegi panjang biru. Ini dilakukan dengan bagian kode ini:

untuk (x,y,w,h) pada 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]

Jika wajah ditemukan, ia mengembalikan posisi wajah yang terdeteksi sebagai persegi panjang dengan sudut kiri atas (x,y) dan memiliki "w" sebagai Lebarnya dan "h" sebagai Tingginya ==> (x,y,w,h). Silakan lihat gambarnya.

Setelah mendapatkan lokasi ini, kita dapat membuat “ROI” (persegi panjang yang digambar) untuk wajah dan menampilkan hasilnya dengan imshow()  fungsi.

Jalankan Skrip python di atas pada lingkungan python Anda, menggunakan Terminal Rpi:

python faceDetection.py

Hasilnya:

Anda juga dapat menyertakan pengklasifikasi untuk "deteksi mata" atau bahkan "deteksi senyum". Pada kasus tersebut, Anda akan menyertakan fungsi pengklasifikasi dan gambar persegi panjang di dalam loop wajah, karena tidak ada gunanya mendeteksi mata atau senyum di luar wajah.

Perhatikan bahwa pada Pi, memiliki beberapa pengklasifikasi pada kode yang sama akan memperlambat pemrosesan, setelah metode deteksi ini (HaarCascades) menggunakan daya komputasi yang besar. Di desktop, lebih mudah untuk menjalankannya.

Contoh

Di GitHub saya, Anda akan menemukan contoh lain:

Dan pada gambar, Anda dapat melihat hasilnya.

Anda juga dapat mengikuti tutorial di bawah ini untuk lebih memahami Deteksi Wajah:

Deteksi Objek Haar Cascade Face &Eye OpenCV Python Tutorial

Langkah 5:Pengumpulan Data

Pertama-tama, saya harus berterima kasih kepada Ramiz Raja atas karyanya yang luar biasa tentang Pengenalan Wajah pada foto:

PENGENALAN WAJAH MENGGUNAKAN OPENCV DAN PYTHON:PANDUAN PEMULA

dan juga Anirban Kar, yang mengembangkan tutorial yang sangat komprehensif menggunakan video:

PENGENALAN WAJAH – 3 bagian

Saya sangat menyarankan Anda untuk melihat kedua tutorial.

Mengatakan itu, mari kita mulai fase pertama proyek kita. Yang akan kita lakukan disini, mulai dari langkah terakhir (Face Detecting), kita cukup membuat dataset, dimana kita akan menyimpan untuk setiap id, sekelompok foto berwarna abu-abu dengan porsi yang digunakan untuk face detecting.

Pertama, buat direktori tempat Anda mengembangkan proyek, misalnya, FacialRecognitionProject:

mkdir FacialRecognitionProject

Di direktori ini, selain 3 skrip python yang akan kita buat untuk proyek kita, kita harus telah menyimpan Facial Classifier di dalamnya. Anda dapat mengunduhnya dari GitHub saya: haarcascade_frontalface_default.xml

Selanjutnya, buat subdirektori tempat kita akan menyimpan sampel wajah kita dan beri nama "set data":

kumpulan data mkdir

Dan unduh kode dari GitHub saya: 01_face_dataset.py

import cv2
import os
cam =cv2.VideoCapture(0)
cam.set(3, 640) # setel lebar video
cam.set(4, 480) # set tinggi video
face_detector =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# Untuk setiap orang, masukkan satu id wajah numerik
face_id =input('\n masukkan id pengguna akhir tekan ==> ')
print(“\n [INFO] Inisialisasi pengambilan wajah. Lihat kamera dan tunggu …”)
# Inisialisasi jumlah wajah pengambilan sampel individu
hitung =0
sementara(Benar):
ret, img =cam.read()
img =cv2.flip(img, -1) # membalik gambar video secara vertikal
abu-abu =cv2.cvtColor(img , cv2.COLOR_BGR2GRAY)
wajah =face_detector.detectMultiScale(abu-abu, 1.3, 5)
untuk (x,y,w,h) di wajah:
cv2.rectangle(img, (x ,y), (x+w,y+h), (255,0,0), 2)
hitung +=1
# Simpan gambar yang diambil ke dalam folder kumpulan data
cv2 .imwrite(“set data/Pengguna.” + str(face_id) + '.' + str(count) + “.jpg”, abu-abu[y:y+h,x:x+w])
cv2. imshow('gambar', img)
k =cv2.waitKey(100) &0x ff # Tekan 'ESC' untuk keluar dari video
jika k ==27:
break
hitungan elif>=30:# Ambil 30 sampel wajah dan hentikan video
break
# Lakukan sedikit pembersihan
print(“\n [INFO] Keluar dari Program dan bersihkan hal-hal”)
cam.release()
cv2.destroyAllWindows()

Kode ini sangat mirip dengan kode yang kami lihat untuk deteksi wajah. Apa yang kami tambahkan, adalah "perintah input" untuk menangkap id pengguna, yang harus berupa bilangan bulat (1, 2, 3, dll)

face_id =input(‘\n masukkan id pengguna akhir tekan ==> ‘)

Dan untuk setiap frame yang diambil, kita harus menyimpannya sebagai file di direktori “dataset”:

cv2.imwrite(“dataset/User.” + str(face_id) + ‘.’ + str(count) + “.jpg”, abu-abu[y:y+h,x:x+w])

Perhatikan bahwa untuk menyimpan file di atas, Anda harus mengimpor perpustakaan “os”. Setiap nama file akan mengikuti strukturnya:

User.face_id.count.jpg

Misalnya, untuk pengguna dengan face_id =1, file sampel ke-4 pada direktori dataset/ akan menjadi seperti:

Pengguna.1.4.jpg

seperti yang ditunjukkan pada foto dari Pi saya:

Pada kode saya, saya mengambil 30 sampel dari setiap id. Anda dapat mengubahnya pada "elif" terakhir. Jumlah sampel digunakan untuk memutus loop tempat sampel wajah diambil.

Jalankan skrip Python dan ambil beberapa Id. Anda harus menjalankan skrip setiap kali Anda ingin menggabungkan pengguna baru (atau mengubah foto untuk yang sudah ada).

Langkah 6:Pelatih

Pada fase kedua ini, kita harus mengambil semua data pengguna dari dataset kita dan “pelatih” OpenCV Recognizer. Ini dilakukan secara langsung oleh fungsi OpenCV tertentu. Hasilnya adalah file .yml yang akan disimpan di direktori “trainer/”.

Baca Selengkapnya Detail :Pengenalan Wajah Real-Time:Proyek End-to-End


Proses manufaktur

  1. Operator Python
  2. Daftar Python
  3. Kamus Python
  4. MATRIX VOICE GOOGLE ASSISTANT – MATRIX VOICE PROJECT
  5. Speathe
  6. Windows IoT:Pintu Pengenalan Wajah
  7. Pelacakan Objek Penglihatan Otomatis
  8. Pengenalan Digit AI dengan PiCamera
  9. Rover
  10. GoPiGo v2 dengan Windows IoT