
Merhaba arkadaşlar, bu makalemizde raspberry pi ve openCV kullanarak yüz tanıma yada yüz algılama sistemi yapımı nasıl gerçekleştirilir birlikte öğreneceğiz.
İhtiyacımız olanlar;
- Raspberry Pi
- OpenCV
Yüz Algılama Sistemi Yapımında Geometrik Şekiller Çizmek için Python Kodu
Aşağıdaki kod görüntünün üzerine çizgiler, elipsler, daireler, dikdörtgenler, polillerler ve metinler çizecektir. Bu kodu kopyalayın ve çalıştırın.
Python Kodu
import cv2
import numpy as np
# Create a black image
img = np.zeros((512, 512, 3), np.uint8)
# img = cv2.line(image, (starting point), (Ending point), (color), line thickness)
img = cv2.line(img, (0, 256), (512, 256), (255, 0, 0), 10)
# cv2.Ellipse(img, center, axes, angle, start_angle, end_angle, color, thickness=1)
img = cv2.ellipse(img,(256,256),(50,50),180,0,180,(255, 255, 0),-1)
img = cv2.ellipse(img,(256,256),(50,50),0,0,180,(0, 255, 0),-1)
# cv2.Circle(img, center, radius, color, thickness)
img = cv2.circle(img, (256, 256), 56, (0, 0, 255), 10)
# img = cv2.rectangle(image, (Top Left Corner), (Bottom Right Corner), (color), thickness)
img = cv2.rectangle(img, (189, 189), (323, 323), (0, 255, 0), 10)
# cv2.PolyLine(img, polys, is_closed, color, thickness=1)
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
img = cv2.polylines(img,[pts],True,(0,255,255))
# cv2.PutText(img, text, org, fontFace, fontScale, color, thickness, line type)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
# Create the resizeable window
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()Yüz Tanıma Sistemi Nasıl Çalışır? - Kod Dağılımı
İlk önce gerekli kütüphaneleri indiriyoruz. OpenCV paketi farklı geometrik şekiller çizmemize yardımcı olur ve NumPy paketi boş bir görüntü oluşturmamızı ve diğer matematiksel işlemleri yapmamızı sağlar.
Javascript Kodu import cv2 import numpy as np
Daha sonra üzerine geometrik şekiller çizebileceğimiz siyah bir görüntü oluşturuyoruz.
Python Kodu
img = np.zeros((512, 512, 3), np.uint8)Ardından cv2.line () işlevini 5 piksel kalınlığında çapraz mavi bir çizgi çizmek için kullanalım. Siyah görüntü üzerinde soldan merkeze doğru sağa mavi bir çizgi çizelim. Cv2.line () fonksiyonu beş argüman alır:
- Görüntü dosyası
- Başlangıç noktaları (görüntü satırında başlayacaktır)
- Bitiş noktaları
- Çizginin rengi
- Çizginin kalınlığı
Python Kodu
#img = cv2.line(image, (starting point), (Ending point), (color), line thickness)
img = cv2.line(img, (0, 256), (512, 256), (255, 0, 0), 10)Şimdi, görüntünün ortasına iki elips çizeceğiz. Elipsi çizmek için birkaç argüman geçmeliyiz:
- Görüntü dosyası
- Merkez konumu (x, y)
- Büyük ve küçük eksen uzunlukları
- Saatin tersi yönde elipsin dönme açısı
- Başlangıç ve bitiş açısı (başlangıç ve bitiş açısı, ana eksenden saat yönünde ölçülen elips arkının başlangıç ve bitişini belirtir, yani 0 ve 360 değerleri vermek tam elipsi verir)
- Elipsin rengi
- Elipsin kalınlığı (-1, şekli dolduracağı anlamına gelir)
Python Kodu
#cv2.ellipse(img, center, axes, angle, start angle, end angle, color, thickness=1)
img = cv2.ellipse(img,(256,256),(50,50),180,0,180,(255, 255, 0),-1)
img = cv2.ellipse(img,(256,256),(50,50),0,0,180,(0, 255, 0),-1)Sonra, elipsin üzerine kırmızı bir daire çizeceğiz. Bir daire çizmek için görüntü dosyasını, merkez koordinatını, dairenin yarıçapını, rengi (B, G, R) biçiminde ve dairenin kalınlığını geçmemiz gerekir.
Python Kodu
#cv2.Circle(img, center, radius, color, thickness)
img = cv2.circle(img, (256, 256), 56, (0, 0, 255), 10)Sonra dairenin üzerine yeşil bir dikdörtgen çizelim. Bir dikdörtgen çizmek için dikdörtgenin sol üst köşesine ve sağ alt köşesine ihtiyacınız vardır.
Python Kodu
#img = cv2.rectangle(image, (Top Left Corner), (Bottom Right Corner), (color), thickness)
img = cv2.rectangle(img, (189, 189), (323, 323), (0, 255, 0), 10)Bir çokgen çizmek için, köşelerin koordinatlarına ihtiyacımız var. Bu noktaları ROWS x 1 x 2 şeklinde bir dizi haline getirin, burada ROWS, köşelerin sayısıdır ve int32 türünde olmalıdır. Burada sarı renkte dört köşeli küçük bir çokgen çiziyoruz.
Python Kodu
pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
# cv2.PolyLine(img, polys, is_closed, color, thickness=1)
img = cv2.polylines(img,[pts],True,(0,255,255))Resimlere metin koymak için, yazmak istediğimiz metin verilerini, istediğimiz yerin koordinatlarını (örneğin, verilerin başladığı sol alt köşe), yazı tipi türünü, yazı tipi ölçeğini (yazı tipinin boyutunu belirtir) sağlamamız gerekir.
Python Kodu
#cv2.PutText(img, text, org, fontFace, fontScale, color, thickness, line type)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)Yüzleri Algılamak ve Yüzlerde Daire Çizmek için Python Kodu
Şimdi görüntüdeki yüzleri algılayacak ve yüzlerin çevresini çizecek kodu yazacağız. Yüzleri tespit etmek için, Haar Cascade kademeli sınıflandırıcısını kullanacağız. OpenCV zaten yüz, gözler, gülüş ve daha fazlası için önceden kodlanmış sınıflandırıcıları içermektedir. Kullanacağımız sınıflandırıcı yüzleri algılar. Cascade dosyasını buradan alabilirsiniz . Bu dosyayı çalışma dizinine " haarcascade_frontalface_default.xml " olarak kaydedin . Python kodu aşağıdaki gibidir:
Python Kodu
# Import OpenCV library
import cv2
# Load a cascade file for detecting faces
faceCascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml");
# Load image
image = cv2.imread('obamafamily.jpg')
# Convert into grayscale
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Look for faces in the image using the loaded cascade file
faces = faceCascade.detectMultiScale(gray, 1.2, 5)
for (x,y,w,h) in faces:
# Create circle around faces
cv2.circle(image, (int((x + x + w)/2), int((y + y + h)/2)), int(h/2), (0, 255, 0), 5)
# Create the resizeable window
cv2.namedWindow('Obama', cv2.WINDOW_NORMAL)
# Display the image
cv2.imshow('Obama', image)
# Wait until we get a key
k=cv2.waitKey(0)
# If pressed key is 's'
if k == ord('s'):
# Save the image
cv2.imwrite('convertedimage.jpg', image)
# Destroy all windows
cv2.destroyAllWindows()
# If pressed key is ESC
elif k == 27:
# Destroy all windows
cv2.destroyAllWindows( Less