OpenCV genel amaçlı nesne tespiti için pek çok sınıflandırıcı sunmaktadır. Bu sınıflandırıcılardan en yaygın bilineni Paul Viola ve Michael Jones tarafından keşfedilen ve Viola-Jones yüz dedektörü olarak adlandırılan “haar-based cascade” sınıflandırıcıdır. OpenCV data klasörü altında bulunan bazı sınıflandırıcılar aşağıda verilmiştir:
Sınıflandırıcı İsmi | XML Dosya Yolu |
Yüz Tespiti | haarcascade_frontalface_default.xml |
Sol Göz Tespiti | haarcascade_lefteye_2splits.xml |
Sağ Göz Tespiti | haarcascade_righteye_2splits.xml |
Ağız Tespiti | haarcascade_mcs_mouth.xml |
Burun Tespiti | haarcascade_mcs_nose.xml |
Gülümseme Tespiti | haarcascade_smile.xml |
Yüz tespit örneği için küçük bir Python uygulama tüm kodu aşağıda verilmiştir. Öncelikle gerekli kütüphaneler yüklenmiştir. Yüz tespit edilecek. jpg formatlı görüntü cv2.imread fonksiyonu ile okunmaktadır. cv2.CascadeClassifier fonksiyonu ile tabloda verilen yüz tespiti için kullanılacak olan XML dosya yolu belirtilmektedir. Görüntüdeki yüzleri bulmamızı sağlayan detectMultiScale fonksiyonu birkaç seçenek sunmaktadır. minFeatureSize, düşünülen minimum yüz boyutudur (20×20 piksel gibi). searchScaleFactor görüntüyü yeniden ölçekleme (rescale) miktarıdır. Kod içinde verilen 1.1 değeri, verilen görüntünün %10 oranında boyutunun azaltılması anlamına gelmektedir. minNeighbors parametresi bir yüzü dikdörtgen içine almak için ne kadar komşu sayısının gerekli olduğunu hesaplamaktadır ve genellikle 3 ya da 5 iyi bir seçimdir. detectMultiScale fonksiyonu tespit edilen yüzlerin (x,y,w,h) konum bilgisini tutmaktadır. Yüz tespitinin başarısını göstermek için cv2.rectangle fonksiyonu ile tutulan koordinat bilgilerini dikdörtgen kutu içerisine alınmaktadır. Bir görüntü OpenCV kullanarak yüklendiğinde BGR renk formatındadır. Bu sebeple matplotlib kullanarak renkli görüntüyü göstermek istediğimizde cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) ile görüntüyü RGB formatına çevirmemiz gerekmektedir.
import cv2 import matplotlib.pyplot as plt img = cv2.imread('meghan-harry.jpg') face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') faces = face_cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=3) print('Yüz Tespiti: ', len(faces)) for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (100, 255, 0), 2) plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
OpenCV 3.3 ayrıca yüz tanıma için derin sinir ağları (deep neural networks-dnn) modülü sunmaktadır. Bu modül Caffe, TensorFlow ve PyTorch derin öğrenme platformlarını desteklemektedir. Bu üç popüler platformdan eğitilmiş modelleri yükleme ve kullanma imkanı sunan OpenCV ayrıca farklı sınıflandırma modelleri, nesne tespiti, cinsiyet ve yaş tespiti gibi pek çok probleme çözüm sunmaktadır. Caffe, TensorFlow ve PyTorch modüllerini içeren ve bu platformda eğitilmiş modelleri yüklemeye imkan tanıyan dnn modüllerine buradan ulaşılabilmektedir. .prototxt dosyaları model mimarilerini yani katmanları ve .caffemodel katmanların ağırlıklarını içermektedir.
Caffe model şu şekilde yüklenmektedir:
import cv2 import numpy as np net_caffe = cv2.dnn.readNetFromCaffe('bvlc_googlenet.prototxt', 'bvlc_googlenet.caffemodel')
Torch eğitim modelini okumak ve yüklemek için:
net_torch = cv2.dnn.readNetFromTorch('torch_enet_model.net')
TensorFlow eğitim modelini okumak ve yüklemek için:
net_tensorflow = cv2.dnn.readNetFromTensorflow('tensorflow_inception_graph.pb')