Komputer Papan Tunggal

Cara Membuat Projek Pengecaman Muka Raspberry Pi

Cara Membuat Projek Pengecaman Muka Raspberry Pi

Raspberry Pi adalah komputer mini kos rendah yang menjadikan pengkomputeran dan pengaturcaraan menjadi lebih mudah bagi kebanyakan orang, termasuk pelajar dan penggemar hobi. Komputer mini ini dapat melakukan apa sahaja yang dapat dilakukan oleh komputer desktop, dari melayari internet hingga membuat projek dan program yang menarik. Dan salah satu projek yang menakjubkan ini ialah membuat Raspberry Pi Face Recognition. Walaupun projek ini boleh menjadi sangat menarik, ia tidak begitu mudah dibuat. Oleh itu, saya mengesyorkan anda mengikuti artikel itu selangkah demi selangkah.

Pengecaman Muka Raspberry Pi


Membuat program mengenali wajah mungkin merupakan perkara yang sangat sukar dan maju sekali. Tetapi dengan Raspberry Pi, tidak ada yang terlalu sukar! Dalam artikel ini, saya telah menggunakan Open Source Computer Vision Library (OpenCV) untuk melakukan projek tersebut.

Repositori ini dirancang untuk berfungsi dengan kecekapan komputasi dan aplikasi masa nyata. Oleh itu, ia sangat sesuai untuk program pengenalan wajah masa nyata kami. Artikel ini akan membimbing anda langkah demi langkah dalam keseluruhan projek. Oleh itu, ikuti akhir untuk memiliki Pengecaman Muka Raspberry Pi anda sendiri!

Keperluan


Anda memerlukan perkara berikut untuk membuat sistem pengecaman wajah Raspberry Pi:

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

Sambungan Pi Raspberry


Pastikan anda membuat sambungan berikut sebelum anda memulakan pengekodan:

  1. Buat hubungan antara kabel Raspberry Pi dan Ribbon dari Display
  2. Pasang SDA ke pin SDA Pi anda
  3. Letakkan SCL dari Paparan ke pin SCL
  4. Pasang kabel pita kamera ke Raspberry Pi
  5. Masukkan GND dari paparan ke dalam Pi GND
  6. Sambungkan Raspberry Pi 5V dan paparkan 5V

Langkah 1: Pasang OpenCV pada Raspberry Pi


Langkah pertama adalah memasang OpenCV pada peranti Pi anda. Untuk melakukannya, mulakan Raspberry Pi anda dan buka sambungan SSH. Untuk memasukkan semua ruang yang ada pada kad mikro-SD, kembangkan sistem fail anda.

$ sudo raspi-config

Kemudian pilih "Advanced Options" dari menu dan "Expand Filesystem" selepas itu:

Selepas itu, tekan "" butang dan but semula Raspberry Pi anda.

but semula $ sudo

Langkah 2: Sahkan Pemasangan OpenCV


Sebaik sahaja anda selesai melakukan reboot, seharusnya terdapat persekitaran maya OpenCV yang siap sedia pada Pi anda. Sekarang, anda harus mengesahkan jika OpenCV dipasang dengan betul di Pi anda. Jalankan perintah "sumber" setiap kali anda membuka terminal baru sehingga pemboleh ubah sistem disiapkan dengan betul.

sumber ~ /.profil

Sekarang, masukkan persekitaran maya anda:

workon cv

Teks (cv) bermaksud bahawa anda berada di persekitaran maya cv.

(cv) pi @ raspberry: ~ $

Untuk memasukkan Jurubahasa Python anda:

ular sawa

Anda akan melihat ">>>" muncul di jurubahasa. Untuk mengimport perpustakaan OpenCV:

import cv2

Sekiranya tidak ada mesej ralat, anda boleh memastikan bahawa OpenCV dipasang dengan betul.

Langkah 3: Muat turun OpenCV


Sekarang, muat turun OpenCV yang anda pasang. Anda mesti memuat turun OpenCV dan OpenCV contrib. Kontribusinya dilengkapi dengan modul dan fungsi yang anda perlukan dalam eksperimen ini.

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

Sekarang, hapus zip arkib:

$ unzip opencv.zip $ unzip opencv_contrib.zip

Langkah 4: Pasang Ketergantungan


Sekarang, pasang kebergantungan OpenCV yang diperlukan pada Raspberry Pi anda untuk membuatnya berfungsi dengan betul:

$ sudo apt-get kemas kini & & 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- pasang python2.7-dev python3-dev $ sudo apt-get install python3-pil.imagetk

Langkah 5: Pasang pip


Pada langkah ini, anda perlu memasang pengurus pakej untuk python yang disebut "pip".

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

Langkah 6: pasang Numpy


Selepas itu, pasang pustaka python yang disebut "Numpy".

$ Pip3 memasang numpy

Langkah 7: Uji Kamera


Sekarang setelah anda memasang semua perkara yang diperlukan, termasuk OpenCV, inilah masanya untuk memeriksa apakah kamera anda berfungsi dengan baik. Anda semestinya sudah memasang Picam pada Raspberry Pi anda. Masukkan kod berikut di Python IDE anda:

import numpy sebagai np import cv2 cap = cv2.Cap VideoCapture (0).set (3,640) # set Cap lebar.set (4,480) # set Tinggi sementara (Benar): ret, bingkai = topi.baca () bingkai = cv2.flip (bingkai, -1) # Balikkan kamera dengan warna kelabu secara menegak = cv2.cvtColor (bingkai, cv2.COLOR_BGR2GRAY) cv2.imshow ('bingkai', bingkai) cv2.imshow ('kelabu', kelabu) k = cv2.waitKey (30) & 0xff jika k == 27: # tekan 'ESC' untuk berhenti tutup tutup.lepaskan () cv2.hancurkanAllWindows ()

Kod ini berfungsi dengan menangkap aliran video yang dihasilkan oleh PiCam anda yang memaparkan mod kelabu dan mod warna BGR. Kemudian jalankan kod dengan arahan berikut:

python simpleCamTest.py

Sekarang, tekan kekunci [ESC] untuk menyelesaikan program. Pastikan untuk mengklik pada tetingkap video sebelum menyelesaikannya. Anda sekarang harus melihat kamera anda berfungsi dengan betul dan menunjukkan hasil. Sekiranya kamera anda menunjukkan mesej ralat "Tegasan gagal", gunakan perintah berikut untuk memperbaikinya:

sudo modprobe bcm2835-v4l2

Langkah 8: Pengesanan Muka


Anda harus tahu bahawa langkah pertama untuk menyelesaikan projek pengenalan wajah kami adalah membuat PiCam menangkap wajah. Pasti, ia mesti mengesan wajah terlebih dahulu untuk mengenalinya pada masa akan datang.

Algoritma pengesanan wajah memerlukan gambar dengan wajah dan juga tanpa wajah untuk melatih pengkelasan dan menyelamatkan struktur dari itu. Nasib baik, OpenCV yang anda muat turun sebelumnya dilengkapi dengan alat pengesan dan jurulatih. Juga, ia sudah mempunyai beberapa pengkelasan yang sudah dilatih seperti muka, mata, tangan, dan lain-lain. Untuk membuat alat pengesan wajah dengan OpenCV, gunakan kod berikut:

import numpy sebagai np import cv2 faceCascade = cv2.CascadeClassifier ('Cascades / haarcascade_frontalface_default.xml ') cap = cv2.Cap VideoCapture (0).set (3,640) # set Cap lebar.set (4,480) # set Tinggi sementara Benar: ret, img = cap.baca () img = cv2.flip (img, -1) kelabu = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) wajah = faceCascade.mengesanMultiScale (kelabu, skalaFactor = 1.2, minNeighbour = 5, minSize = (20, 20)) 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] cv2.imshow ('video', img) k = cv2.waitKey (30) & 0xff jika k == 27: # tekan 'ESC' untuk berhenti tutup cap.lepaskan () cv2.hancurkanAllWindows ()

Sekarang, anda perlu memanggil fungsi pengkelasan dengan beberapa faktor skala, parameter, dan ukuran minimum wajah yang akan dikesan.

wajah = mukaCascade.mengesanMultiScale (kelabu, skalaFactor = 1.2, minNeighbour = 5, minSize = (20, 20))

Kod ini berfungsi dengan mengesan wajah pada gambar. Sekarang, anda mungkin mahu menandakan wajah menggunakan bentuk sebagai segi empat tepat. Gunakan kod berikut untuk melakukannya:

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]

Jadi, ini adalah bagaimana ia berfungsi:

Sekiranya pengklasifikasi menemui wajah dalam gambar, ia menunjukkan kedudukan wajah sebagai segi empat tepat seperti yang diperintahkan di mana ia menggunakan "h" sebagai ketinggiannya dan "w" sebagai lebar dan sudut kiri atas (x, y). Jumlah itu merangkumi segi empat tepat kita (x, y, w, h).

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

python faceDetection.py

Dan hasilnya:

Langkah 9: Menyimpan Data


Di bahagian ini, anda harus membuat set data di mana program anda akan menyimpan data yang dikumpulkan mengenai Id wajah yang telah dikesannya. Untuk melakukan itu, buat direktori (saya menggunakan FacialRecognition):

mkdir FacialRecognition

Sekarang, buat subdirektori dengan nama "set data".

set data mkdir

Kemudian, gunakan kod berikut:

import cv2 import os cam = cv2.Kamera VideoCapture (0).set (3, 640) # set cam lebar video.set (4, 480) # tetapkan ketinggian video face_detector = cv2.CascadeClassifier ('haarcascade_frontalface_default.xml ') # Untuk setiap orang, masukkan satu numeric face id face_id = input (' \ n masukkan user user tekan akhir  ==> ') cetak ("\ n [INFO] Memulakan tangkapan wajah. Lihat kamera dan tunggu ... ") # Memulakan kiraan jumlah sampel individu = 0 sementara (Benar): ret, img = cam.baca () img = cv2.flip (img, -1) # flip gambar video kelabu menegak = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) face = face_detector.mengesanMultiScale (kelabu, 1.3, 5) untuk (x, y, w, h) pada muka: cv2.segi empat tepat (img, (x, y), (x + w, y + h), (255,0,0), 2) kiraan + = 1 # Simpan gambar yang ditangkap ke dalam folder set data cv2.imwrite ("set data / Pengguna."+ str (face_id) + '.'+ str (kiraan) + ".jpg ", kelabu [y: y + h, x: x + w]) cv2.imshow ('gambar', img) k = cv2.waitKey (100) & 0xff # Tekan 'ESC' untuk keluar video jika k == 27: hitung elif hitung> = 10: # Ambil 10 sampel muka dan hentikan rehat video # Lakukan sedikit pembersihan cetak ("\ n [INFO] Keluar dari Program dan membersihkan barang ") cam.lepaskan () cv2.hancurkanAllWindows ()

Perhatikan bahawa kita akan menyimpan setiap bingkai yang ditangkap sebagai file pada subdirektori "dataset":

cv2.imwrite ("set data / Pengguna."+ str (face_id) + '.'+ str (kiraan) + ".jpg ", kelabu [y: y + h, x: x + w])

Selepas itu, anda harus mengimport perpustakaan "os" untuk menyimpan fail di atas. Nama fail akan mengikuti struktur seperti ini:

Pengguna.muka_id.mengira.jpg, / pra>

Kod yang disebutkan di atas akan menangkap hanya 10 gambar untuk setiap id. Anda pasti boleh mengubahnya jika anda mahu.
Sekarang, cuba jalankan program dan tangkap beberapa id. Pastikan untuk menjalankan kod setiap kali anda menukar pengguna atau foto yang ada.

Langkah 10: Jurulatih


Pada langkah ini, anda harus menggunakan fungsi OpenCV untuk melatih pengenal OpenCV dengan data dari set data anda. Mulakan dengan membuat subdirektori untuk menyimpan data terlatih.

pelatih mkdir

Kemudian jalankan kod berikut:

import cv2 import numpy sebagai np dari PIL import Image import os # Path untuk pangkalan data imej wajah path = 'dataset' pengenal = cv2.muka.Pengesan LBPHFaceRecognizer_create () = cv2.CascadeClassifier ("haarcascade_frontalface_default.xml "); # fungsi untuk mendapatkan gambar dan label data def getImagesAndLabels (jalan): imagePaths = [os.jalan.bergabung (jalan, f) untuk f di os.listdir (jalan)] faceSamples = [] ids = [] untuk imagePath dalam imagePaths: PIL_img = Image.buka (imagePath).tukar ('L') # ubah menjadi skala kelabu img_numpy = np.array (PIL_img, 'uint8') id = int (os.jalan.perpecahan (imagePath) [- 1].berpecah (".") [1]) wajah = pengesan.detakMultiScale (img_numpy) untuk (x, y, w, h) pada wajah: wajahSampel.tambahkan (img_numpy [y: y + h, x: x + w]) id.tambahkan (id) wajah kembaliSampel, cetak id ("\ n [INFO] Muka latihan. Ia akan mengambil masa beberapa saat. Tunggu… ") wajah, pengecam ids = getImagesAndLabels (jalan).kereta api (muka, np.array (id)) # Simpan model menjadi pelatih / pelatih.pengecam yml.tulis ('pelatih / pelatih.yml ') # pengecam.save () bekerja pada Mac, tetapi tidak pada Pi # Mencetak bilangan wajah yang dilatih dan mencetak program akhir ("\ n [INFO] 0 wajah yang dilatih. Keluar dari Program ".format (len (np.unik (id))))

Pastikan anda telah memasang perpustakaan PIL pada Raspberry Pi anda. Sekiranya anda tidak memilikinya, jalankan arahan berikut:

pip memasang bantal

Di sini, saya menggunakan pengecam muka LBPH yang disertakan dengan pakej OpenCV. Sekarang, ikuti baris ini:

pengecam = cv2.muka.LBPHFaceRecognizer_create ()

Semua foto anda akan dibawa ke direktori "dataset" oleh fungsi "getImagesAndLabels". Ia akan mengembalikan 2 tatasusunan bernama "Id" dan "wajah". Sekarang, sudah tiba masanya untuk melatih pengecam.

pengecam.kereta api (wajah, id)

Sekarang, anda akan melihat "pelatih.fail bernama yml disimpan dalam direktori pelatih.

Langkah 11: Pengecaman Muka


Sudah tiba masanya untuk aksi terakhir. Selepas langkah ini, pengecam anda dapat meneka id yang dikembalikan jika wajah itu ditangkap sebelumnya. Oleh itu, mari tulis kod akhir kami:

import cv2 import numpy sebagai np import os mengenali = cv2.muka.LBPHFaceRecognizer_create () pengecam.baca ('pelatih / pelatih.yml ') cascadePath = "haarcascade_frontalface_default.xml "faceCascade = cv2.CascadeClassifier (cascadePath); fon = cv2.FONT_HERSHEY_SIMPLEX #iniciate id counter id = 0 # nama yang berkaitan dengan id: contoh ==> Marcelo: id = 1, etc names = ['None', 'Markian', 'Bell', 'Grace', 'A', 'Z '] # Permulaan dan mulakan cam rakaman video masa nyata = cv2.Kamera VideoCapture (0).set (3, 640) # tetapkan cam lebar video.set (4, 480) # set tinggi video # Tentukan ukuran tetingkap min untuk dikenali sebagai muka minW = 0.1 * cam.dapatkan (3) minH = 0.1 * cam.dapatkan (4) sambil Benar: ret, img = cam.baca () img = cv2.flip (img, -1) # Balikkan kelabu secara menegak = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) wajah = faceCascade.mengesanMultiScale (kelabu, skalaFactor = 1.2, minNeighbour = 5, minSize = (int (minW), int (minH)),) untuk (x, y, w, h) di muka: cv2.segi empat tepat (img, (x, y), (x + w, y + h), (0,255,0), 2) id, keyakinan = pengecam.ramalkan (kelabu [y: y + h, x: x + w]) # Periksa sama ada keyakinan kurang mereka 100 ==> "0" adalah padanan sempurna 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 pengecam. fungsi prediksi () mengambil bahagian yang berbeza dari wajah yang ditangkap sebagai parameter yang berbeza dan mengembalikan kepada pemilik yang disimpan sambil menunjukkan id.
Sekiranya tidak mengenali wajah, ia akan menunjukkan "tidak diketahui" pada gambar.

Jadi, Voila!

Akhirnya, Wawasan


Jadi, ini adalah bagaimana anda membuat pengecaman wajah Raspberry Pi. Pastikan mengikuti artikel ini selangkah demi selangkah untuk mendapatkan hasil yang terbaik! Sekarang, selain pengklasifikasi pengecam wajah ini, anda juga boleh membuat pengecaman mata atau pengecaman senyuman menggunakan pengkelasan dan fungsi yang berbeza. Saya telah meneliti semua artikel yang berkaitan di internet dan menghasilkan artikel ini. Oleh itu, saya sangat berharap panduan ini dapat membantu anda dalam projek. Dan saya harap ia berjaya untuk anda. Jangan lupa menyebutkan pendapat anda di bahagian komen!

Tutorial Battle for Wesnoth
The Battle for Wesnoth adalah salah satu permainan strategi sumber terbuka paling popular yang boleh anda mainkan pada masa ini. Bukan hanya permainan...
0 A.D. Tutorial
Daripada banyak permainan strategi di luar sana, 0 A.D. berjaya menonjol sebagai tajuk yang komprehensif dan permainan taktikal yang sangat mendalam w...
Tutorial Unity3D
Pengenalan Unity 3D Unity 3D adalah enjin pengembangan permainan yang kuat. Ini adalah platform silang yang memungkinkan anda membuat permainan untuk ...