Python ve OpenCV ile yüz tanıma

 

#python #facedetection #vscode #macosx #coding #video #opencv

Microsoft devrim niteliğinde olan vscode editörü ile gerçekten platform bağımsız yazılım geliştirme olayına çok iyi bir alternatif getirmiş durumda. Mac os işletim sistemi ile gayet başarılı çalışıyor.

Öncelikle kullanacağım görsel kütüphanenin adı OpenCV.

OpenCV (Açık Kaynak Görsel Kütüphane) , Intel tarafından 1999 yılında başlatılan popüler bir bilgisayarlı görsel kütüphanesidir ve BSD lisansı altında yayımlandığı için akademik projelerde ve ticari ürünlerde kullanılabiliyor kendileri.

OpenCV’nin barındırdığı algoritmalar:

Kullanacağımız diğer modül ise face_recognition; (Kurulum ile ilgili detaylı bilgi için: https://github.com/ageitgey/face_recognition)

Face Recognition’ın barındırdığı algoritmalar:

  • Find faces in pictures
  • Find and manipulate facial features in pictures
  • Digital make-up
  • Identify faces in pictures
  • Real-time face recognition (Biz bu özelliği kullanacağız)

Real-time face recognition

Real-time face recognition ile python içerisinde kamerayı açacağız ve anlık olarak yüz tarama yapacağız. Realtime olarak sizi tanıyabilmesi için bir veri ile karşılaştırıyor olması ve sizi önceden biliyor olması gerekiyor. Bunu da kişiye ait bir profil resmi uygulamamıza import ederek halledeceğiz.

Yani programa kendimizi tanıtıyoruz;

 

=> Mennan Sevim

 

Sonraki aşamada yazacağımız uygulama, sisteme tanıtılan “Mennan Sevim” resmine ait yüzü kamerada arıyor ve bulduğu zaman gerekli işlemleri yaptırabiliyoruz.

Kodlama kısmına geçersek işleyiş şöyle: //face_recognition ve opencv kütüphanelerini import edelim

# face_recognition ve opencv kütüphanelerini import ederek başlıyoruz
import face_recognition
import cv2

# opencv metodu olan VideoCapture ile webcam'den görüntü almayı başlatıyoruz // 0 default webcam video_capture = cv2.VideoCapture(0)

# Yukarıdaki "mennan sevim" resmini yüklüyoruz ve encoding bilgisini alıyoruz
mennan_image = face_recognition.load_image_file("mennan.jpg")
mennan_face_encoding = face_recognition.face_encodings(mennan_image)[0]

# Encoding ve açıklama kısmını burada tanımlıyoruz, birden fazla tanımlayabiliriz
known_face_encodings = [mennan_face_encoding].
known_face_names = ["Mennan Sevim"]

face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
while True:

# Videodan anlık bir kare yakalıyoruz
ret, frame = video_capture.read()

# Aldığımız kareyi 1/4 oranında küçültüyoruz ve bu daha hızlı sonuç vermeyi sağlıyor
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)

# BGR(opencv) türündeki resmi RGB(face_recognition) formatına çeviriyoruz
rgb_small_frame = small_frame[:, :, ::-1]

if process_this_frame:
 # Uyumlu tüm yüzlerin lokasyonlarını bulan kodlar
 face_locations = face_recognition.face_locations(rgb_small_frame)
 face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations)
 face_names = []

for face_encoding in face_encodings:
 # Eğer eşleşen yüzleri topla
 matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
 name = "Bilinmeyen"
 
 # Eşleşme bulunduysa
 if True in matches:
  first_match_index = matches.index(True)
  name = known_face_names[first_match_index]
  face_names.append(name)
  process_this_frame = not process_this_frame

 # Sonuçları göster
 for (top, right, bottom, left), name in zip(face_locations, face_names):
  top *= 4
  right *= 4
  bottom *= 4
  left *= 4

# Yüzü çerçeve içerisine al
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

# "Mennan Sevim" etiketini oluştur
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)

# Oluşan çerçeveyi ekrana yansıt
c v2.imshow('Video', frame)

# Çıkış için 'q'
if cv2.waitKey(1) & 0xFF == ord('q'):
break

# Kamerayı kapat
video_capture.release()
cv2.destroyAllWindows()

Sonuç 🙂

 

 

Leave a reply:

Your email address will not be published.