Merhaba, bugün Raspberry Pi ve Pi kamera ile OpenCV kütüphanesini kullanarak insan yüzlerini tespit edebilen bir sistem yapısı oluşturacağız.

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

Malzeme Listesi

  • Raspberry Pi (Ram kapasitesi görüntü işleme yapacağımızdan dolayı oldukça önemli. Pi4 4GB veya üstünü öneriyorum)
  • Pi Kamera v2

OpenCV Kütüphanesi Nedir ve Projemizde Ne Amaçla Kullanacağız?

OpenCV açık kaynak kodlu bir görüntü işleme kütüphanesidir. Bu kütüphane içerisinde görüntü işlemeye (image processing) ve makine öğrenmesine (machine learning) yönelik 2500’den fazla algoritma bulunmaktadır. Bu algoritmalar ile yüz tanıma, nesneleri ayırt etme, insan hareketlerini tespit edebilme, nesne sınıflandırma, plaka tanıma, üç boyutlu görüntü üzerinde işlem yapabilme, görüntü karşılaştırma, optik karakter tanımlama OCR (Optical Character Recognition) gibi işlemler rahatlıkla yapılabilmektedir. 

İşe modüllerimizi kurmakla başlayalım.

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ülümüzü yükleyelim.

pip install imputils

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

Sırada kodlarımız 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 – Yüz Tespit Sistemi Kodları

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” dizinine projemiz için gerekli tüm dosyaları “Face-Detection” klasörü altında kopyalacaktır.

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

————————————————————————————————————————————————————

Eğer kodları ve gerekli dosyayı elle eklemek isterseniz aşağıdaki adımları izleyebilirsiniz.

import cv2
from imutils.video import VideoStream
import imutils
import time
cascade = "haarcascade_frontalface_default.xml" #kullanacağımız data dosyası
detector = cv2.CascadeClassifier(cascade)
vs = VideoStream(usePiCamera=True).start() #Pi Cam başlatma
time.sleep(2.0)
while True:
frame = vs.read()
frame = imutils.resize(frame, width=500) #500×500 lük bir izleme ekranı
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
#görüntüyü net işleyebilmek için şablona gri filtre uyguladık
faces = detector.detectMultiScale(gray,1.3,3)
#.detectMultiSclae(şablon,ölçek,hassasiyet)
for x,y,w,h in faces :
cv2.rectangle(frame,(x,y),(x+w,y+h),(20,200,100),2)
#cv2.rectangle(şablon, yüz koordinatları , çerçeve koordinatları,BGR cinsinden rengi,çerçeve kalınlığı)
cv2.imshow("Yüz Tespit Sistemi",frame)
#cv2.imshow(pencere ismi,şablon)
#eğer şablonları gray seçerseniz önizlemeyi siyah-beyaz görebilirsiniz.
p= cv2.waitKey(1)
if p== ord("q"): #q ya basılırsa pencereyi kapat kodu durdur.
break
cv2.destroyAllWindows()
vs.stop()

Kodlarımızı çalıştırmadan önce yüklememiz gereken bir dosya daha var.

Normalde bu projeyi gerçekleştirebilmek için Raspberry Pi üzerinde makine öğrenmesi gerçekleştirmemiz gerekirdi ama HaarCascade algoritması sayesinde yüz, kaş ya da göz gibi yapıları makine öğrenmesi yapmadan da tespit edebiliriz.

Ben bu projede yüz tespit algoritmasını olarak haarcascade_frontalface_default.xml dosyasını kullanacağım. (Siz yüzün belli kısımlarını tespit etmek istiyorsanız ilgili tüm algoritmalara buradan ulaşabilirsiniz. Algoritmanın çalışma mantığını öğrenmek için OpenCV’ nin sitesini ziyaret edebilirsiniz.)

Kodumuzun çalışabilmesi için indirdiğimiz dosyanın kodumuzla aynı klasör içinde yer alması gerektiğini unutmayalım. 

Sonuç

Ben bu işlemleri Raspberry Pi 4GB üzerinde gerçekleştirdim. 10-15 FPS civarında bir yenileme hızı alıyorum fakat bunun yüz tespit performansını çok etkilediğini düşünmüyorum.

Zaten elinizde hangi Raspberry Pi modeli olursa olsun ortalama FPS 20’yi geçmeyecektir. 10-15 FPS kulağa çok az gelebilir fakat Raspberry Pi gibi bir sistem için yeterli ve tatmin edici diyebilirim.

Şimdi sizlerle bu proje sonunda, resmi bilgisayar ekranında açıp Pi kamerayı ekrana doğrultarak elde ettiğim birkaç canlı resmi ve videoyu paylaşmak istiyorum. (Solda orijinal resimler, sağda Raspberry Pi üzerinde işlenmiş resim)

           

Gördüğünüz gibi ilk iki resmimizde tüm yüzler seçili. 

       

Fakat üçüncü resmimizde 1 kişinin yüzü tam olarak algılanmadı. Eğer hassasiyeti 3 yerine 1 yapsaydık belki o yüzü de yakalama imkanımız olurdu ama bu sefer de Raspberry Pi farklı nesneleri insan yüzü gibi algılayabilir bize içi boş kutucuklar gösterebilirdi. 

Bir de canlı bir örnek olması açısından Pi kamerayı bilgisayarın ekranına doğrultarak çektiğim aşağıdaki test videosuna da göz atabilirsiniz.

Test videosunda fark ettiyseniz,  Raspberry Pi orijinal videonun yaklaşık 1 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 Tespit 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