Yapay Zeka,Yapay Sinir Ağları ve Yüz Tanıma Uygulaması

Merhabalar,

Sizlere yapay zeka ve yapay sinir ağları (ysa) hakkında yaptığım kapsamlı araştırmayı özet halinde sunacağım.

Yapay zeka günümüzün ve dahi geleceğin en popüler teknolojisidir.

Yapay zeka, makinelerin algoritmalar sayesinde olguları kavrama, muhakeme etme ve sonuç çıkarma yeteneklerine yani problem çözme yeteneğine sahip olması olarak tanımlanabilir. Yapay genel zeka, biyolojik olarak insan sinir sistemlerinden esinlenerek matematiksel olarak tasarlanan görsel algılama konuşma ve ses tanıma, hareket, problem çözme işlemlerini yapabilen yazılımsal ve donanımsal sistemlerdir.

Fikir babası “makineler düşünebilir mi? “ sorusunu ortaya atan Alan Turing’dir. İnsanların yaptığı hesaplama özelliğini mekanik aksamlar daha hızlı ve hatasız yapabiliyorsa insanların başka özelliklerini de makineler yapabilir mi?

Yapay zekanın temeli olan yapay sinir ağlarından bahsetmek gerekirse, Yapay zeka denilince yapay sinir ağlarından bahsetmek gerekir. Yapay sinir ağları insan beyninin bilgi işleme tekniğinden esinlenerek geliştirilmiş bir teknolojidir. Bu teknoloji ile basit bir biyolojik sinir sistemi taklit edilir.

Ve formülü:

şeklindedir.

Kısaca formülü açıklamak gerekirse:

Giriş çıkış ve gizli katmanlar vardır. Bu katmanlarda nöronlar vardır. Katman sayısındaki nöron sayısına bağlı olarak öğrenme sayısı artar. Ancak öğrenme performansı artar denemez. Performans katman sayısı ve girdi ile belirlenemez.

W:ağırlık vektörü, b: bias değeri, x: girdi ve y: çıktı’yı ifade eder.

Sinir ağlarında eğitim ağırlıkların ve bias değerlerinin güncellenmesiyle sağlanır. Amaç en iyi ağırlık ve bias değerini elde etmektir. En iyi değerleri bulmak için çıkması gereken sonuç ve sinir ağlarının verdiği sonuç karşılaştırılır ve hata oranı bulunur. Buna göre en iyi değerler belirlenir. Burada en istenmeyen sonuç overfitting(gereğinden fazla ezber yapılması)dir.

Yapay zeka çalışmalarında en çok tercih edilen yazılım dili “Python”dur. Biraz fazla zamanınızı alabilir ama size python öğrenmenizi  tavsiye ediyorum. Diğer dillere göre daha açık bir yazılım dilidir.

Bir diğer öğrenilmesi gereken uygulama ise opencvdir. Açık kaynak kodlu olup görüntü işleme üzerinde kullanılmaktadır. Kendine has bazı kodları ve kendi içinde çokça uygulamaları vardır. Bunları da öğrenmenizi tavsiye ederim.

Python 2 sürümüne karşılık python 3. Sürümlerinizi kullanmanız daha iyi olacaktır.

Tüm bu çalışmalar sonucunda yüz tanıma uygulaması yaptım.

Öncelikle bir veritabanı oluşturdum. kodları;

import numpy as np
import cv2
import matplotlib.pyplot as plt
import time
from PIL import Image

face_id = int(input("Id gir\n"))
count = 0
yüz=cv2.CascadeClassifier('C://Users//lenovo//AppData//Local//Programs//Python//Python36//Lib//site-packages//cv2//data/haarcascade_frontalface_default.xml')
kameraaç=cv2.VideoCapture(0) #genelde cap=cv2... diye atama yapılır

while True:
ret,çerçeve=kameraaç.read() #kameradan gelen veriyi iki değişkene atadık
gri=cv2.cvtColor(çerçeve,1) #arka plana attığı görselleri renkli şekilde atması için
yüzler =yüz.detectMultiScale(gri,1.3,5) #grideki resmi al 1.3 ile ölçekle 5'er de yanlardan
for (x,y,c,d) in yüzler: #kareyi oluşturmak için
cv2.rectangle(çerçeve,(x,y),(x+c,y+d),(255,0,0),2) #dikdörtgene çerçeveyi at--x-y al---mavi yap--
#cv2.putText(çerçeve, 'Ahmet', (x,y), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (255,255,255), 2, cv2.LINE_AA)
count += 1
cv2.imwrite("C://Users//lenovo//Desktop//Yeni Kod//dataset//user." + str(face_id) + '.' + str(count) + ".jpg", gri[y:y+d,x:x+c])
key = cv2.waitKey(1) & 0xFF
if count > 50:
break

 

  1. satırdaki kodda yüz tanıma için opencv’nin kendi içinde bulunan uygulamasını çektim.

Veritabanına atılacak fotoğraflar -dataset adlı bi dosya oluşturulmuş olmalı- user isminde kaydedildi.

Daha sonra veritabanını okuma işlemi var. kodları;

import numpy as np
import cv2
from PIL import Image

rec = cv2.face.LBPHFaceRecognizer_create()
det = cv2.CascadeClassifier(‘C://Users//lenovo//AppData//Local//Programs//Python//Python36//Lib//site-packages//cv2//data/haarcascade_frontalface_default.xml’)

def  resimleriCek(path):
resimler=[os.path.join(path,f) for f in os.listdir(path)]
yuzOrnekler=[]
idler=[]
for resim in resimler:
PIL_resim = Image.open(resim).convert(‘L’)
numpy_resim = np.array(PIL_resim,’uint8′)
id_resim = int(os.path.split(resim)[-1].split(“.”)[1])
print(id_resim)
yüzler = det.detectMultiScale(numpy_resim)
for(x,y,c,d) in yüzler:
yuzOrnekler.append(numpy_resim[y:y+d,x:x+c])
idler.append(id_resim)
return yuzOrnekler,idler

yüzler, idler = resimleriCek(“dataset//”)
rec.train(yüzler, np.array(idler))
rec.save(“trainer//trainer.xml”)

Trainer adlı bir dosya oluşturulması gerekiyor.

6.satırdaki kod python3 için yazılmıştır. bu kısım python2 de farklıdır.

Daha sonra ise yüz tanıma kodları yazıldı. kodları;

 

import cv2
import numpy as np
import time

rec = cv2.face.LBPHFaceRecognizer_create()
rec.read(“trainer//trainer.xml”)
det = cv2.CascadeClassifier(‘C://Users//lenovo//AppData//Local//Programs//Python//Python36//Lib//site-packages//cv2//data/haarcascade_frontalface_default.xml’)

font = cv2.FONT_HERSHEY_SIMPLEX
kameraAc = cv2.VideoCapture(0)

while True:

ret,çerçeve = kameraAc.read() #kameradan gelen veriyi iki değişkene atadık
gri = cv2.cvtColor(çerçeve,cv2.COLOR_BGR2GRAY)
yüzler = det.detectMultiScale(gri,1.3,5) #grideki resmi al 1.3 ile ölçekle 5’er de yanlardan
for (x,y,c,d) in yüzler: #kareyi oluşturmak için
cv2.rectangle(çerçeve,(x,y),(x+c,y+d),(255,0,0),2) #dikdörtgene çerçeveyi at–x-y al—mavi yap–
Id,conf = rec.predict(gri[y:y+d,x:x+c])
if conf<95:
if Id == 5:
Id = “ahmet”

else:
Id=”bu kim”
else:
Id = “Bu kim”
cv2.putText(çerçeve, str(Id), (x,y), font, 0.75, (255,255,255), 2, cv2.LINE_AA)
cv2.imshow(“YuzTanima”, çerçeve)
key = cv2.waitKey(1) & 0xFF
if key == ord(‘q’):
break

Çekilen fotoğraftaki kişiyi belirlenen isme göre tanırken diğer kişilere ise “bu kim” şeklinde karşılık verdi. Burada tanımlanan kişiler arttırılarak tanına kişi sayısı arttırılabilir. Bu uygulama yüz ve göz tanıma temelli kapı kilit sistemlerinin temelidir.

Bir de bazı dosyaların oluşturulması gerektiği için dosyanın son hali:

Şeklinde olmalıdır. Burada kullanılan tek gereç bilgisayardır. Bu uygulama raspberry ile de kullanılabilir.

uygulamanın bir videosu:

 

Hazırlayan: Ahmet KARAZOR

Selçuk üniversitesi elektrik elektronik mühendisliği

S.Ü. Yapay Zeka ve Görüntü İşleme Topluluğu (S.Ü. YAZGİT)

İletişim: ahmetkarazoryazgit@gmail.com