OpenCV ile C++ Kullanarak Yüz Tanıma
Görsel işleme, yapay zeka ve bilgisayarlı görü uygulamalarında yüz tanıma önemli bir yer tutar. OpenCV kütüphanesi sayesinde yüz tespiti yapmak oldukça kolaydır. Bu yazıda, C++ ile bir yüz tespit uygulamasının nasıl geliştirileceğini adım adım anlatacağız.
Bu projede OpenCV kütüphanesini kullanacağız. OpenCV'yi sisteminize kurduğunuzdan emin olun. Eğer OpenCV kurulu değilse, OpenCV resmi sitesi üzerinden indirip yükleyebilirsiniz. Bu proje, bir resimdeki yüzleri tespit edecek ve yüzlerin üzerine numaralandırılmış çerçeveler çizecektir. Kullanıcı tarafından belirlenen bir görüntü dosyası işlenecek ve sonuç ekranda gösterilecektir.
1. Gerekli Kütüphaneleri Dahil Etme
Öncelikle OpenCV ve temel giriş-çıkış işlemleri için gerekli kütüphaneleri ekliyoruz:
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std;
Bu kütüphaneler OpenCV fonksiyonlarını ve C++ giriş-çıkış işlemlerini kullanmamızı sağlar.
2. Yüz Algılama Fonksiyonu Tanımlama
Bir resimde yüzleri tespit eden ve bunları çerçeve içine alan detectFace fonksiyonunu tanımlıyoruz:
void detectFace(Mat& img, CascadeClassifier& faceCascade) { vector<Rect> faces; Mat gray; // Görüntüyü gri tonlamaya çeviriyoruz çünkü Haarcascade gri görüntüler üzerinde çalışır. cvtColor(img, gray, COLOR_BGR2GRAY); // Histogram eşitleme ile kontrastı artırıyoruz, böylece yüz algılama daha doğru olur. equalizeHist(gray, gray); // Haarcascade sınıflandırıcısını kullanarak yüzleri tespit ediyoruz. faceCascade.detectMultiScale(gray, faces, 1.1, 2, 0, Size(30, 30)); int faceCount = 1; for (const auto& face : faces) { // Yüzlerin etrafına dikdörtgen çerçeve çiziyoruz. rectangle(img, face, Scalar(255, 0, 0), 3); // Yüzlerin üzerine "Face1", "Face2" şeklinde numaralandırılmış etiketler ekliyoruz. string label = "Face" + to_string(faceCount++); putText(img, label, Point(face.x, face.y - 10), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(255, 0, 0), 2); } // Sonuçları ekranda gösteriyoruz. imshow("Face Detection", img); }
3. Ana Fonksiyonun Oluşturulması
Ana program, görüntüyü yükleyip detectFace fonksiyonunu çağıracaktır:
int main() { // Kullanıcı tarafından belirtilen bir görüntü dosyasını yüklüyoruz. string imagePath = "C:\\Users\\misss\\Downloads\\face_image.jpg"; Mat image = imread(imagePath); // Görüntü açılmazsa hata mesajı verip programı sonlandırıyoruz. if (image.empty()) { cout << "Could not open or find the image!" << endl; return -1; } // Haarcascade sınıflandırıcısını yüklüyoruz. CascadeClassifier faceCascade; faceCascade.load("C:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml"); // Eğer dosya yüklenmezse hata mesajı veriyoruz. if (faceCascade.empty()) { cout << "Error loading face cascade!" << endl; return -1; } cout << "Face Detection started..." << endl; // Yüz algılama fonksiyonunu çağırıyoruz. detectFace(image, faceCascade); // Kullanıcının bir tuşa basmasını bekliyoruz. waitKey(0); return 0; }
Bu kısımda:
- Resmi okuyoruz ve geçerli olup olmadığını kontrol ediyoruz.
- Haarcascade dosyasını yüklüyoruz.
- Yüz tespiti işlemini başlatıyoruz.
- Sonuçları ekranda gösteriyoruz.
Sonuç
Bu kod, OpenCV kullanarak bir resim içindeki yüzleri başarılı bir şekilde tespit eder ve etiketler. Eğer OpenCV ve haarcascade dosyanız doğru şekilde yüklenmişse, programınızı derleyip çalıştırarak yüz tanıma işlemini gerçekleştirebilirsiniz. Gelişmiş bir sistem oluşturmak için farklı Haarcascade modelleri deneyebilir veya derin öğrenme tabanlı bir model ile entegrasyon yapabilirsiniz.
Hiç yorum yok