Merhaba, bu yazımızda Raspberry Pi üzerinde, OpenCV ile yüz tanıma sistemi geliştireceğiz.

Bu projemizde bize gereken malzemelerin listesine göz atalım.

Malzeme Listesi

Projemizin Basamakları

Öncelikle görüntüleri canlı olarak işlemek, çıktıyı ekranda göstermek, yüzleri makine öğrenimi ile eğitmek için OpenCV modülüne ihtiyacımız olacak. Daha sonra görüntü üzerindeki yüzleri veri tabanı ile karşılaştırmak için “face_recognition” modülünü kullanacağız.

İlk yapmamız gereken gerekli tüm modülleri kurmak. Daha sonra tanıtmak istediğimiz her bir yüz için 10-15 fotoğraf çekmeli bunları makine öğrenmesi ile işlemeliyiz ve sonunda işlenen canlı görüntüde yüz tanıma yapabilen programımızı çalıştırabiliriz.

Modüllerin Kurulumu

İlk önce basit modülleri Raspberry Pi’ ımıza kuralım. İlk komut setimizi teker teker terminal ekranında çalıştıralım ve yükleyelim. Bu işlem yaklaşık 10 dakika sürecektir. (Tüm kurulum kurulması yaklaşık 2.5 saat sürecek.)

sudo apt install cmake build-essential pkg-config git	

sudo apt install libjpeg-dev libtiff-dev libjasper-dev libpng-dev libwebp-dev libopenexr-dev

sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libdc1394-22-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev

sudo apt install libgtk-3-dev libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5

sudo apt install libatlas-base-dev liblapacke-dev gfortran

sudo apt install libhdf5-dev libhdf5-103

sudo apt install python3-dev python3-pip python3-numpy

Şimdi ise OpenCV kütüphanesini yükleyeceğiz fakat bunun için ”Swap-file” dosyamızda küçük bir değişiklik yapmalıyız. Swap (Takas) Alanı, işletim sistemi tarafından sabit diskimizde ayrılmış bir bölümdür. İşlenecek veriler ön belleğe (RAM) sığmadığı zaman bu bölüm “RAM” gibi kullanılır ve böylelikle veri akışının devam etmesi sağlanır.

Takas dosyamızı açalım.

sudo nano /etc/dphys-swapfile

Dosya açıldığında şekilde gibi  CONF_SWAPSIZE = 100 satırını kapatın ve CONF_SWAPSIZE = 2048 ekleyelim. CTRL+X yapıp çıkalım.

OpenCV yüklemesini bitirdikten sonra bu değeri tekrar 100 olarak değiştireceğiz.

Daha sonra değişikliklerin uygulanması amacı ile dosyamızı yeniden başlatalım.

sudo systemctl restart dphys-swapfile

Şimdi OpenCV kütüphanesini yükleyelim. (Bu işlem yaklaşık 2 saat sürecek.)

git clone https://github.com/opencv/opencv.git

git clone https://github.com/opencv/opencv_contrib.git

mkdir ~/opencv/build

cd ~/opencv/build

cmake -D CMAKE_BUILD_TYPE=RELEASE \

          -D CMAKE_INSTALL_PREFIX=/usr/local \

          -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \

          -D ENABLE_NEON=ON \

          -D ENABLE_VFPV3=ON \

          -D BUILD_TESTS=OFF \

          -D INSTALL_PYTHON_EXAMPLES=OFF \

          -D OPENCV_ENABLE_NONFREE=ON \

          -D CMAKE_SHARED_LINKER_FLAGS=-latomic \

          -D BUILD_EXAMPLES=OFF ..

OpenCV kütüphanesini yüklediğimize göre “Takas Dosyamızı” eski haline geri döndürelim.

sudo nano /etc/dphys-swapfile

Dosya açıldığında, CONF_SWAPSIZE=100 satırını aktifleştirip CONF_SWAPSIZE=2048 satırını silelim ve dosyamızı yeniden başlatalım.

sudo systemctl restart dphys-swapfile

Ve şimdi de yeni terminal açıp kalan son mödüllerimizi yükleyelim.

pip install imputils
pip install face-recognition
pip install picamera[array]

Böylelikle projemiz için gerekli tüm modüllerin kurulumunu tamamladık.

Sırada devremiz var ama ondan önce eğer “Pi kamerayı” ilk defa kullanacaksanız kurulum için “Pi Kamera Kurulum” adlı yazıma bir göz atmanızı tavsiye ederim.

Raspberry Pi – OpenCV ile Yüz Tanıma Sistemi Devresi

Gördüğünüz gibi devremiz oldukça basit. Tek yapmamız gereken ledimizin ve kapasitörümüzün katotunu GND hattına, anotunu ise 11.sıradaki GPIO17 pinine bağlamak.

Raspberry Pi – OpenCV ile Yüz Tanıma Sistemi Kodları ve Dokümanlar

Kodlara ve yüz tanıma için gerekli .xml dosyasına, aşağıdaki git komutunu terminalde çalıştırarak ulaşabilirsiniz.  Bu git kodu Raspberry Pi “home/pi” dizinine projemiz için gerekli tüm dosyaları “Face-Recognition” klasörü altında kopyalayacaktır.

git clone https://github.com/furkanbakkal/Face-Recognition.git

Şimdi sırada yüz tanıma sistemini eğitmek için fotoğraf çekmeye geldi.

Raspberry Pi – OpenCV ile Yüz Tanıma Sistemi için Eğitim Dosyası Oluşturmak

Depoyu GitHub üzerinden kopyaladıktan sonra home/pi dizininde “Face-Recognition” adı altında gerekli tüm dökümanları kopyalamış olduk. Şimdi eğitim için gerekli düzenlemeleri yapalım.

Öncelikle kimlerin yüz profilini tanıtmak istiyorsanız “data” klasörü içinde şekildeki gibi herkesin ismine özel klasörler oluşturalım.

Daha sonra “Face-Recognition” klasörü adı altındaki “photo_pi_cam.py” dosyamızı çalıştıralım. Şekildeki gibi resmini çekeceğimiz ve adına klasör oluşturduğumuz kişinin ismini 8. satıra girelim.

Ve kodumuzu Python2 ile çalıştıralım. Açılan arayüzde kameradan gelen görüntüyü görebilirsiniz. Bu kod çektiğimiz her fotoğrafı 8. satırda belirttiğimiz klasörün içine kaydedecektir. Boşluk tuşuna basarak sadece ismini girdiğimiz kişinin yüzünü her profilden 4-5, toplamda 20-25 tane fotoğraf olacak şekilde çekelim. 

Yüzü tanıtmak istediğimiz her bir kişi için 8. satırdaki klasör ismini değiştirmeli ve kodumuzu tekrar çalıştırmalıyız.

Örneğin Furkan ve Buse adında 2 kişiyi tanıtmak istediğimizi varsayalım. İlk önce “data” klasörü içinde “Furkan” ve “Buse” olarak 2 ayrı klasör oluşturmalıyız. Daha sonra “photo_pi_cam.py” dosyamızda 8. satıra “Furkan” yazarak Furkan’ın yüz resimlerini çekmeliyiz. Sonrasında  8. satırı “Buse” olarak değiştirip Buse’nin yüz fotoğraflarını çekmeliyiz.

Şimdi sırada çekilen fotoğraflar ile eğitim dosyası oluşturmaya geldi.

Yeni bir terminal ekranı açalım ve aşağıdaki kod ile klasörümüzün içine giriş yapalım

cd Face-Recognition

Daha sonra eğitim kodumuz olan “train_model.py”  çalıştıralım.

python train_model.py

Resimlerimiz işlenmeye başlayacak ve bize şöyle bir çıkış verecektir.

Eğer eğitim işleminiz başarıyla gerçekleştiyse “Face-Recognition” klasörü içinde “encodings.pickle” adlı bir dosyanın oluştuğunu fark edebilirsiniz. Şimdi ise tek yapmamız gereken “face_rec.py” dosyamızı Python2 ile çalıştırmak. Ayrıca eğer isterseniz 108. satırdaki ismi değiştirerek belirlenmiş birini gördüğünde LED’in yanmasını sağlayabilirsiniz.

Yaklaşık 1 dakikalık bir yükleme sürecinden sonra kamera arayüzünün açıldığını göreceksiniz. Artık projeyi test edebilirsiniz.

Sonuç

Şimdi sizlerle bu proje sonunda, resmi bilgisayar ekranında açıp Pi kamerayı ekrana doğrultarak elde ettiğim birkaç canlı resmi paylaşmak istiyorum. Ayrıca internetten bulduğum resimlerle sadece Tom Cruise, Elon Musk ve Angelina Jolie’ nin resimlerini eğittiğimi belirtmek istiyorum. (Solda orijinal resimler, sağda Raspberry Pi üzerinde işlenmiş resim)

Ayrıca canlı olarak görmek isterseniz aşağıdaki videoya göz atabilirsiniz.

Test videosunda fark ettiyseniz,  Raspberry Pi orijinal videonun yaklaşık 1-2 saniye gerisinden geliyor. Bu, video görüntüsü ile Raspberry Pi’dan gelen görüntünün asenkron olmamasına rağmen gerçekleşen bir durum. Düşük FPS’lerde çalışmanın getirdiği bir gecikme de diyebiliriz.

Bir projemizin daha sonuna geldik. “Raspberry Pi – OpenCV ile Yüz Tanıma Sistemi” projesi hakkında herhangi bir sorunuz olursa, GitHub üzerinden “issues” kısmında belirtebilir, bu gönderiye yorum olarak yazabilir ya da mail adresimden bana ulaşabilirsiniz.

İyi çalışmalar dilerim…

#ProjeBaşlasın

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz