OpenCV ile Yüz Tanıma
OpenCV kütüphanesi BSD lisansı ile yayınlanan bir kütüphane. Hem akademik, hem de ticari kullanıma açık. Kütüphanenin asıl odaklandığı konu gerçek zamanlı uygulamalar için hızlı ve etkin hesaplama araç ve yöntemlerinin geliştirilmesi.
En son sürümü OpenCV 3.4, 23 Aralık 2017 tarihinde duyurulan kütüphane, bugüne kadar yaklaşık 11 milyon kez indirilmiş. Github üzerinde 25,988 opencv projesi mevcut. Bunlardan 6193 adedi Python ile yapılmış.
Bu yazımda size bir github projesini tanıtacağım: https://github.com/ageitgey/face_recognition/
İnsan yüzlerini tanımak amacıyla geliştirilmiş bir proje bu. MIT lisansıyla paylaşılıyor. Güncel.
Bu projeyi Ubuntu 16.04 üzerinde, Python 3.5.2 ile test ettim.
Tek resim üzerinde olduğu gibi, video kareleri ve webcam görüntüleri üzerinde de verimli bir şekilde çalışıyor.
Yüz tanıma kodlarını çalıştırmak için gereken kurulumların nasıl yapılacağı proje sayfasında ayrıntılı bir şekilde anlatılmış. Ben tekrarlamayacağım.
Proje sayfasında verilen örnek kodların hepsini tek tek test ettim. Hepsi çalışır durumda. Sadece webcam ile görüntü tarama kodlarında küçük bir değişiklik yapmam gerekti. Çünkü benim bilgisayarımın webcam kamerası görüntüleri tepetaklak gösteriyor. Sizin bilgisayarınızda benimki gibi bir sorun yoksa, eklediğim düzeltme işlemine de gerek duymayacaksınız.
Önce kodları paylaşayım (Bu kodlar, kendisine bir resim dosyasıyla tanıtılan yüzü, gerçek zamanlı webcam görüntülerinde yakalayıp işaretliyor. Orijinal kodlarda ‘obama.jpg’ kullanılmakta. Aynı kodların başka görseller üzerinde de etkin bir şekilde çalıştığını göstermek amacıyla kendi resmimi tanıttım.) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
import face_recognition import cv2 # This is a demo of running face recognition on live video from your webcam. It's a little more complicated than the # other example, but it includes some basic performance tweaks to make things run a lot faster: # 1. Process each video frame at 1/4 resolution (though still display it at full resolution) # 2. Only detect faces in every other frame of video. # PLEASE NOTE: This example requires OpenCV (the `cv2` library) to be installed only to read from your webcam. # OpenCV is *not* required to use the face_recognition library. It's only required if you want to run this # specific demo. If you have trouble installing it, try any of the other demos that don't require it instead. # Get a reference to webcam #0 (the default one) video_capture = cv2.VideoCapture(0) # Load a sample picture and learn how to recognize it. #obama_image = face_recognition.load_image_file("obama.jpg") obama_image = face_recognition.load_image_file("ahmet.jpg") obama_face_encoding = face_recognition.face_encodings(obama_image)[0] # Initialize some variables face_locations = [] face_encodings = [] face_names = [] process_this_frame = True while True: # Grab a single frame of video ret, frame = video_capture.read() frame=cv2.flip(frame,0) # ters gösteren kamera için ben ekledim # Resize frame of video to 1/4 size for faster face recognition processing small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25) # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses) rgb_small_frame = small_frame[:, :, ::-1] # Only process every other frame of video to save time if process_this_frame: # Find all the faces and face encodings in the current frame of video 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: # See if the face is a match for the known face(s) match = face_recognition.compare_faces([obama_face_encoding], face_encoding) name = "Unknown" if match[0]: #name = "Barack" name = "Ahmet" face_names.append(name) process_this_frame = not process_this_frame # Display the results for (top, right, bottom, left), name in zip(face_locations, face_names): # Scale back up face locations since the frame we detected in was scaled to 1/4 size top *= 4 right *= 4 bottom *= 4 left *= 4 # Draw a box around the face cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2) # Draw a label with a name below the face 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) # Display the resulting image cv2.imshow('Video', frame) # Hit 'q' on the keyboard to quit! if cv2.waitKey(1) & 0xFF == ord('q'): break # Release handle to the webcam video_capture.release() cv2.destroyAllWindows() |
Kodları test ettiğim bilgisayardaki sistem ve kütüphaneler şöyle:
Ubuntu 16.04
Python 3.5.2
OpenCV 3.2.0
face-recognition 1.0.0
Kodlar çok açık ve anlaşılır şekilde yazılmış. Ayrıntıya girmeyeceğim. Betiği durdurmak istediğinizde ‘q’ butonuna basmanız yeterli.
Aynı kodları test etmek için siz de kendi fotoğrafınızı kullanabilirsiniz.
Videoda betiğin nasıl çalıştığını görmek mümkün. Tanıtım fotoğrafımda gözlük yok. Ama gözlük taktığımda bile tanıma sorunu olmuyor. Yüzün orta bölümünde büyükçe bir bölüm kapatılırsa, tanıma ancak o zaman engelleniyor.
Şu anda elimde Raspberry Pi için kamera olmadığından testlerimi sadece dizüstü bilgisayarımda yaptım. Uygun bir zamanda aynı işlemleri Raspberry Pi üzerinde de tekrarlayacağım.
Beni izlemeye devam edin.
Ahmet Aksoy
Referanslar:
- https://github.com/ageitgey/face_recognition
- https://opencv.org/
- http://python.gurmezin.com/opencv-ile-yuz-tanima
Hocam iyi günler 33.satırda betik hata veriyor (small_frame = cv2.resize(frame,(0,0),fx=0.25,fy=0.25))
Hata mesajıda şu:
cv2.error: /io/opencv/modules/imgproc/src/resize.cpp:4044: error: (-215) ssize.width > 0 && ssize.height > 0 in function resize
Burada boyutlandırma ile ilgili bir hata veriyor galiba
Merhaba,
Kodda bir sorun görünmüyor. Ancak sizin görüntüyü üreten cihazınızla ilgili bir sorununuz olabilir gibi.
Bu satırın başına # koyup deneyin. Ekranda görüntü oluşuyor mu?
Hocam merhabalar,
Ben Windows 10 işletim sistemi üzerinde çalışıyorum face_recongition modulü yüklemeye çalıştığımda hata alıyorum cmd komut satırına
yazıyorum ve karışılığında şöyle bir hata alıyorum;
Command “c:\python27\python.exe -u -c “import setuptools, tokenize;__file__=’c:\\users\\yakup\\appdata\\local\\temp\\pip-install-xcitja\\dlib\\setup.py’;f=getattr(tokenize, ‘open’, open)(__file__);code=f.read().replace(‘\r\n’, ‘\n’);f.close();exec(compile(code, __file__, ‘exec’))” install –record c:\users\yakup\appdata\local\temp\pip-record-ckielj\install-record.txt –single-version-externally-managed –compile” failed with error code 1 in c:\users\yakup\appdata\local\temp\pip-install-xcitja\dlib\
acaba bu hata ile ilgili bir fikriniz var mı ?
bir kaç yabanbı kaynağı inceledim orda önce dlib yüklemem gerektiğini söylemişler
bu kod yardımıyla dlib yüklemeye çalışıyorum ondada yine buna benzer bir hata alıyorum. Cmd komut istemcisini yönetici olarak çalıştırdım fakat hala problem var
Merhaba,
Ben Python 3 ile çalışıyorum. Size de öyle yapmanızı öneririm. Çünkü bir yıl sonra resmi Python 2 desteği tamamen kalkacak.
Yine de durumu görebilmek için Windows 10 üzerine Python 2.7.15 kurdum ve “pip install face_recognition” komutu verdim.
Önce “cmake” kurmamı istedi. “cmake” kurulumundan sonra da “dlib” derleme hatası verdi. Doğrudan “dlib” kurmak istediğimde yine aynı sorunla karşılaştım.
Kısacası “Python 2.7” için “dlib” ve dolayısıyla “face_recognition” kurulumunda sistemsel bir sorun olduğu görülüyor.
Hata mesajını internet üzerinde araştırarak bir çözüm üretmek mümkün olabilir ama, değmeyeceğini düşünüyorum.
Size de Python 3 kurmanızı ve bundan sonraki çalışmalarınızı onunla sürdürmenizi öneriyorum.
İyi çalışmalar.
Merhabalar ben python 3.5 kullanıyorum fakat hala olmuyor Cmake yi indirdim fakat dlib ve face recognition da aynı hataları alıyorum
Merhaba,
https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv adresinden kendi sisteminize uygun olan OpenCV’yi indirip kurabilirsiniz. Burada, derlenmiş farklı kütüphaneleri de vardır..
Ancak, Python sürümünüze uygun 32bit veya 64 bit seçeneğini doğru şekilde belirlemeniz gerekir.
Hala sorun yaşıyorsanız, tekrar mesaj yazın.
İyi çalışmalar.
hocam nolur raspberry pi ile yapımını paylaşın nolur ya
Ne yazık ki bu aralar raspberry-pi ile ilgili çalışmalara ayıracak zaman bulamıyorum. Umarım en kısa zamanda uygun bir fırsat yakalarım.