Komputer Papan Tunggal

Cara Membuat Proyek Pengenalan Wajah Raspberry Pi

Cara Membuat Proyek Pengenalan Wajah Raspberry Pi

Raspberry Pi adalah komputer mini murah yang membuat komputasi dan pemrograman menjadi lebih mudah bagi kebanyakan orang, termasuk pelajar dan penggemar. Komputer mini ini dapat melakukan segala hal yang dapat dilakukan oleh komputer desktop, mulai dari menjelajahi internet hingga membuat proyek dan program yang menarik. Dan salah satu proyek luar biasa ini adalah membuat Pengenalan Wajah Raspberry Pi. Meskipun proyek ini bisa sangat menarik, tidak mudah untuk membuatnya. Jadi, saya akan merekomendasikan Anda untuk mengikuti artikel langkah demi langkah.

Pengenalan Wajah Raspberry Pi


Membuat program pengenalan wajah mungkin pernah menjadi hal yang sangat sulit dan canggih. Tapi dengan Raspberry Pi, tidak ada yang terlalu sulit! Dalam artikel ini, saya telah menggunakan Open Source Computer Vision Library (OpenCV) untuk melakukan proyek.

Repositori ini dirancang untuk bekerja dengan efisiensi komputasi dan aplikasi waktu nyata. Oleh karena itu, ini ideal untuk program pengenalan wajah waktu nyata kami. Artikel ini akan memandu Anda langkah demi langkah melalui seluruh proyek. Jadi, tetaplah sampai akhir untuk memiliki Pengenalan Wajah Raspberry Pi Anda sendiri!

Persyaratan


Anda memerlukan hal-hal berikut untuk membuat sistem pengenalan wajah Raspberry Pi:

  1. Raspberry Pi V4
  2. Kamera Noir
  3. OpenCV

Koneksi Raspberry Pi


Pastikan untuk membuat koneksi berikut sebelum Anda memulai pengkodean:

  1. Buat koneksi antara Raspberry Pi dan kabel Ribbon dari Display
  2. Pasang SDA ke pin SDA Pi . Anda
  3. Letakkan SCL dari Tampilan ke pin SCL
  4. Pasang kabel pita kamera ke Raspberry Pi
  5. Masukkan GND dari layar ke Pi GND
  6. Hubungkan Raspberry Pi 5V dan layar 5V

Langkah 1: Instal OpenCV di Raspberry Pi


Langkah pertama adalah menginstal OpenCV di perangkat Pi Anda. Untuk melakukan itu, mulai Raspberry Pi Anda dan buka koneksi SSH. Untuk memasukkan semua ruang yang tersedia pada kartu micro-SD, perluas sistem file Anda.

$ sudo raspi-config

Kemudian pilih "Opsi Lanjutan" dari menu dan "Perluas Filesystem" sesudahnya:

Setelah itu, tekan tombol tombol dan reboot Raspberry Pi Anda.

$ sudo reboot

Langkah 2: Konfirmasi Instalasi OpenCV


Setelah Anda selesai me-reboot, harus ada lingkungan virtual OpenCV yang siap di Pi. Sekarang, Anda harus mengonfirmasi apakah OpenCV diinstal dengan benar di Pi . Anda. Jalankan perintah "sumber" setiap kali Anda membuka terminal baru sehingga variabel sistem diatur dengan benar.

sumber ~/.Profil

Sekarang, masukkan lingkungan virtual Anda:

kerja cv

Teks (cv) berarti Anda berada di lingkungan virtual cv.

(cv) pi@raspberry:~$

Untuk masuk ke Penerjemah Python Anda:

ular piton

Anda akan melihat ">>>" muncul di juru bahasa. Untuk mengimpor perpustakaan OpenCV:

impor cv2

Jika tidak ada pesan error, bisa dipastikan OpenCV sudah terinstall dengan baik.

Langkah 3: Unduh OpenCV


Sekarang, unduh OpenCV yang Anda instal. Anda harus mengunduh kontribusi OpenCV dan OpenCV. Kontrib dilengkapi dengan modul dan fungsi yang Anda perlukan dalam percobaan ini.

$ cd ~ $ wget -O opencv.zip https://github.com/opencv/opencv/arsip/4.0.0.zip $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.0.0.zip

Sekarang, unzip arsip:

$ buka zip opencv.zip $ buka zip opencv_contrib.zip

Langkah 4: Instal Dependensi


Sekarang, instal dependensi OpenCV yang diperlukan pada Raspberry Pi Anda untuk membuatnya berfungsi dengan baik:

$ sudo apt-get update && sudo apt-get upgrade $ sudo apt-get install build-essential cmake pkg-config $ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev $ sudo apt-get install libavcodec -dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get install libxvidcore-dev libx264-dev $ sudo apt-get install libgtk2.0-dev libgtk-3-dev $ sudo apt-get install libfontconfig1-dev libcairo2-dev $ sudo apt-get install libgdk-pixbuf2.0-dev libpango1.0-dev $ sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103 $ sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 $ sudo apt-get install libatlas-base-dev gfortran $ sudo apt-get install dapatkan instal python2.7-dev python3-dev $ sudo apt-get install python3-pil.imagetk

Langkah 5: Instal pip


Pada langkah ini, Anda harus menginstal manajer paket untuk python yang disebut "pip".

$wget https://bootstrap.pypa.io/get-pip.py $ sudo python3 get-pip.py

Langkah 6: instal Numpy


Setelah itu, instal pustaka python yang disebut "Numpy".

$ pip3 instal numpy

Langkah 7: Uji Kamera


Sekarang Anda telah menginstal semua hal yang diperlukan, termasuk OpenCV, saatnya untuk memeriksa apakah kamera Anda berfungsi dengan baik. Anda seharusnya sudah menginstal Picam di Raspberry Pi. Masukkan kode berikut pada IDE Python Anda:

impor numpy sebagai np impor cv2 cap = cv2.VideoCapture(0) tutup.set (3,640) # set Tutup lebar.set(4,480) # set Tinggi sementara(Benar): ret, frame = cap.baca() bingkai = cv2.flip(frame, -1) # Membalik kamera secara vertikal abu-abu = cv2.cvtColor(bingkai, cv2.COLOR_BGR2GRAY) cv2.imshow('bingkai', bingkai) cv2.imshow('abu-abu', abu-abu) k = cv2.waitKey(30) & 0xff jika k == 27: # tekan 'ESC' untuk keluar dari break cap.rilis() cv2.hancurkan SemuaWindows()

Kode ini bekerja dengan menangkap aliran video yang dihasilkan oleh PiCam Anda yang menampilkan mode Abu-abu dan mode warna BGR. Kemudian jalankan kode dengan perintah berikut:

python simpleCamTest.py

Sekarang, tekan tombol [ESC] untuk menyelesaikan program. Pastikan untuk mengklik jendela video sebelum menyelesaikannya. Anda sekarang akan melihat kamera Anda berfungsi dengan baik dan menunjukkan hasil. Jika kamera Anda menampilkan pesan kesalahan "Pernyataan gagal", gunakan perintah berikut untuk memperbaikinya:

sudo modprobe bcm2835-v4l2

Langkah 8: Deteksi Wajah


Anda harus tahu bahwa langkah pertama untuk menyelesaikan proyek pengenalan wajah kami adalah membuat PiCam menangkap wajah. Tentunya, itu harus mendeteksi wajah terlebih dahulu untuk mengenalinya di masa depan.

Algoritme deteksi wajah memerlukan gambar dengan wajah dan juga tanpa wajah untuk melatih pengklasifikasi dan menyimpan struktur dari gambar tersebut. Untungnya, OpenCV yang Anda unduh sebelumnya dilengkapi dengan detektor dan pelatih. Juga, itu sudah memiliki beberapa pengklasifikasi pra-terlatih seperti wajah, mata, tangan, dll. Untuk membuat pendeteksi wajah dengan OpenCV, gunakan kode berikut:

impor numpy sebagai np impor cv2 faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml') tutup = cv2.VideoCapture(0) tutup.set (3,640) # set Tutup lebar.set(4,480) # set Tinggi sementara Benar: ret, img = cap.baca() img = cv2.flip(img, -1) abu-abu = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) wajah = faceCascade.detectMultiScale( abu-abu, scaleFactor=1.2, minNeighbors=5, minSize=(20, 20) ) untuk (x,y,w,h) di wajah: cv2.persegi panjang(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 dari break cap.rilis() cv2.hancurkan SemuaWindows()

Sekarang, Anda harus memanggil fungsi classifier dengan beberapa faktor skala, parameter, dan ukuran minimum wajah yang akan dideteksi.

wajah = wajahCascade.detectMultiScale( abu-abu, scaleFactor=1.2, minNeighbors=5, minSize=(20, 20) )

Kode ini bekerja dengan mendeteksi wajah pada gambar. Sekarang, Anda mungkin ingin menandai wajah menggunakan bentuk sebagai persegi panjang. Gunakan kode berikut untuk melakukannya:

untuk (x,y,w,h) di wajah: cv2.persegi panjang(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]

Jadi, ini adalah cara kerjanya:

Jika pengklasifikasi menemukan wajah dalam gambar, itu menunjukkan posisi wajah sebagai persegi panjang seperti yang diperintahkan di mana ia menggunakan "h" sebagai tinggi dan "w" sebagai lebar dan sudut kiri atas (x,y). Itu cukup banyak meringkas persegi panjang kita (x,y,w,h).

Sekarang setelah Anda selesai dengan lokasi, buat "ROI" untuk wajah dan tunjukkan hasilnya dengan fungsi imshow()(). Jalankan di lingkungan python menggunakan Terminal Raspberry Pi:

deteksi wajah python.py

Dan hasilnya:

Langkah 9: Menyimpan Data


Di bagian ini, Anda harus membuat kumpulan data tempat program Anda akan menyimpan data yang dikumpulkan tentang Id wajah yang telah dideteksi. Untuk melakukannya, buat direktori (saya menggunakan FacialRecognition):

Pengenalan Wajah mkdir

Sekarang, buat subdirektori dengan nama “dataset”.

kumpulan data mkdir

Kemudian, gunakan kode berikut:

impor cv2 impor os cam = cv2.VideoCapture(0) cam.set (3, 640) # setel lebar video cam.set(4, 480) # setel 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 pengambilan sampel individu jumlah wajah = 0 while(Benar): ret, img = cam.baca() img = cv2.flip(img, -1) # membalik gambar video secara vertikal abu-abu = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) wajah = wajah_detektor.deteksiMultiScale(abu-abu, 1.3, 5) untuk (x,y,w,h) di wajah: cv2.persegi panjang(img, (x,y), (x+w,y+h), (255,0,0), 2) count += 1 # Simpan gambar yang diambil ke folder dataset cv2.imwrite("Dataset/Pengguna." + str(face_id) + '.' + str(hitung) + ".jpg", abu-abu[y:y+h,x:x+w]) cv2.imshow('gambar', img) k = cv2.waitKey(100) & 0xff # Tekan 'ESC' untuk keluar dari video jika k == 27: break elif count >= 10: # Ambil 10 sampel wajah dan hentikan video break # Lakukan sedikit pembersihan print("\n [INFO] Keluar dari Program dan membersihkan hal-hal") cam.rilis() cv2.hancurkan SemuaWindows()

Perhatikan bahwa kita akan menyimpan setiap frame yang diambil sebagai file pada subdirektori "dataset":

cv2.imwrite("Dataset/Pengguna." + str(face_id) + '.' + str(hitung) + ".jpg", abu-abu[y:y+h,x:x+w])

Setelah itu, Anda harus mengimpor perpustakaan "os" untuk menyimpan file di atas. Nama file akan mengikuti struktur seperti ini:

Pengguna.face_id.menghitung.jpg,/sebelumnya>

Kode yang disebutkan di atas hanya akan menangkap 10 gambar untuk setiap id. Anda pasti dapat mengubahnya jika Anda mau.
Sekarang, coba jalankan program dan ambil beberapa id. Pastikan untuk menjalankan kode setiap kali Anda mengubah pengguna atau foto yang ada.

Langkah 10: Pelatih


Pada langkah ini, Anda harus menggunakan fungsi OpenCV untuk melatih pengenal OpenCV dengan data dari kumpulan data Anda. Mulailah dengan membuat subdirektori untuk menyimpan data yang dilatih.

pelatih mkdir

Kemudian jalankan kode berikut:

impor cv2 impor numpy sebagai np dari PIL impor Gambar impor os # Jalur untuk database gambar wajah path = 'set data' pengenal = cv2.wajah.LBPHFaceRecognizer_create() detektor = cv2.CascadeClassifier("haarcascade_frontalface_default.xml"); # berfungsi untuk mendapatkan gambar dan data label def getImagesAndLabels(path): imagePaths = [os.jalan.join(path,f) untuk f di os.listdir(path)] faceSamples=[] id = [] untuk imagePath di imagePaths: PIL_img = Gambar.buka (jalur gambar).convert('L') # mengubahnya menjadi skala abu-abu img_numpy = np.array(PIL_img,'uint8') id = int(os.jalan.split(jalur gambar)[-1].membagi(".")[1]) wajah = detektor.detectMultiScale(img_numpy) untuk (x,y,w,h) di wajah:           faceSamples.tambahkan(img_numpy[y:y+h,x:x+w])            id.append(id) return faceSamples,id print ("\n [INFO] Wajah pelatihan. Ini akan memakan waktu beberapa detik. Tunggu… ") face,ids = getImagesAndLabels(path) pengenal.kereta api (wajah, np.array(id)) # Simpan model ke dalam pelatih/pelatih.pengenal yml.write('pelatih/pelatih.yml') # pengenal.save() bekerja pada Mac, tetapi tidak pada Pi # Cetak jumlah wajah yang dilatih dan akhiri program print("\n [INFO] 0 wajah yang dilatih. Keluar dari Program".format(len(np.unik(id))))

Pastikan Anda telah menginstal pustaka PIL di Raspberry Pi. Jika Anda tidak memilikinya, jalankan perintah berikut:

bantal pasang pip

Di sini, saya menggunakan pengenal wajah LBPH yang disertakan dengan paket OpenCV. Sekarang, ikuti baris ini:

pengenal = cv2.wajah.LBPHFaceRecognizer_create()

Semua foto Anda akan dibawa ke direktori "dataset" oleh fungsi "getImagesAndLabels". Ini akan mengembalikan 2 array bernama "Id" dan "wajah". Sekarang, saatnya melatih pengenal.

pengenal.kereta api (wajah, id)

Sekarang, Anda akan melihat "pelatih".yml” bernama file yang disimpan di direktori pelatih.

Langkah 11: Pengenalan Wajah


Saatnya untuk aksi terakhir. Setelah langkah ini, pengenal Anda dapat menebak id yang kembali jika wajah itu diambil sebelumnya. Jadi, mari kita tulis kode terakhir kita:

impor cv2 impor numpy sebagai np impor os pengenal = cv2.wajah.LBPHFaceRecognizer_create() pengenal.read('pelatih/pelatih.yml') cascadePath = "haarcascade_frontalface_default.xml" faceCascade = cv2.CascadeClassifier(cascadePath); font = cv2.FONT_HERSHEY_SIMPLEX #inisiasi id counter id = 0 # nama yang terkait dengan id: contoh ==> Marcelo: id=1, dll nama = ['None', 'Markian', 'Bell', 'Grace', 'A', 'Z '] # Inisialisasi dan mulai realtime video capture cam = cv2.VideoCapture(0) cam.set(3, 640) # setel kamera lebar video.set(4,480) # setel tinggi video # Tentukan ukuran jendela min agar dikenali sebagai wajah minW = 0.1 * kamera.dapatkan(3) minH = 0.1 * kamera.get(4) while True: ret, img =cam.baca() img = cv2.flip(img, -1) # Balik vertikal abu-abu = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) wajah = faceCascade.detectMultiScale( abu-abu, scaleFactor = 1.2, minNeighbors = 5, minSize = (int(minW), int(minH)), ) for(x,y,w,h) di wajah: cv2.persegi panjang(img, (x,y), (x+w,y+h), (0,255,0), 2) id, keyakinan = pengenal.prediksi(abu-abu[y:y+h,x:x+w]) # Periksa apakah kepercayaan kurang 100 ==> "0" cocok jika (keyakinan < 100): id = names[id] confidence = " 0%".format(round(100 - confidence)) else: id = "unknown" confidence = " 0%".format(round(100 - confidence)) cv2.putText(img, str(id), (x+5,y-5), font, 1, (255,255,255), 2) cv2.putText(img, str(confidence), (x+5,y+h-5), font, 1, (255,255,0), 1) cv2.imshow('camera',img) k = cv2.waitKey(10) & 0xff # Press 'ESC' for exiting video if k == 27: break # Do a bit of cleanup print("\n [INFO] Exiting Program and cleanup stuff") cam.release() cv2.destroyAllWindows()

Program ini berfungsi sebagai pengenal. fungsi predikt () mengambil bagian berbeda dari wajah yang diambil sebagai parameter berbeda dan kembali ke pemilik yang disimpan sambil menunjukkan id.
Jika tidak mengenali wajah, itu akan menunjukkan "tidak dikenal" pada gambar.

Begitu, Voila!

Akhirnya, Wawasan


Jadi, ini adalah bagaimana Anda membuat pengenalan wajah Raspberry Pi. Pastikan untuk mengikuti artikel ini langkah demi langkah untuk mendapatkan hasil terbaik! Sekarang, selain pengklasifikasi pengenalan wajah ini, Anda juga dapat membuat pengenalan mata atau pengenalan senyum menggunakan pengklasifikasi dan fungsi yang berbeda. Saya telah meneliti semua artikel terkait di internet dan menemukan yang ini. Jadi, saya sangat berharap panduan ini membantu Anda dalam proyek. Dan semoga sukses buat kalian. Jangan lupa tulis pendapat kamu di kolom komentar!

Cara Mengubah Pengaturan Mouse dan Touchpad Menggunakan Xinput di Linux
Sebagian besar distribusi Linux dikirimkan dengan pustaka "libinput" secara default untuk menangani kejadian input pada sistem. Ini dapat memproses ke...
Petakan ulang tombol mouse Anda secara berbeda untuk perangkat lunak yang berbeda dengan Kontrol Tombol X-Mouse
Mungkin Anda membutuhkan alat yang dapat membuat kontrol mouse Anda berubah dengan setiap aplikasi yang Anda gunakan. Jika demikian, Anda dapat mencob...
Ulasan Mouse Nirkabel Microsoft Sculpt Touch
Saya baru-baru ini membaca tentang Microsoft Sculpt Touch mouse nirkabel dan memutuskan untuk membelinya. Setelah menggunakannya untuk sementara waktu...