Örneğimizde yüz algılamanın ve yüz takip sisteminin nasıl yapılacağını öğreneceksiniz…
Nesne algılama ve tanıma, otomotiv güvenliği gibi birçok görme uygulamalarında çok önemlidir. Bu örnekte, üç ayrı aşamada yüz tanıma sistemini öğreneceğiz:
1-) İzlenecek bir yüz Algılama
2-) İzlenecek yüzün özelliklerini belirlemek
3-) Yüzü izlemek
Adım 1: Takip Edilecek Yüzü Algılama
Bir yüzü takip başlamadan önce, ilk olarak yüzü tespit etmek gerekir. Bir video karesi içinde bir yüzün konumunu tespit etmek için vision.CascadeObjectDetectorkullanılır.Kaskad nesne dedektörü Viola-Jones algılama algoritması ve tespiti için eğitici bir sınıflandırma modeli kullanır. Temel olarak dedektör yüz algılamak üzere yapılandırılmış, fakat diğer nesne türleri için yapılandırılabilir.
Bu arda video kareleri üzerinde bir yüz izlemek için kaskad nesne dedektörünü kullanabilirsiniz.Yüzü 90 derece yatırır ya da kişi kafasını 180 dedece çevirdiğinde tek başına bu dedektörü kullanmak çeşitli sorunlara yol açabilir. Bu tür uygulamalarda kullanım için geliştirilmiş sınıflandırma modeli kullanmak gereklidir. Bu sorunu önlemek ve her video karesi için yüz tanıma performansının hesaplanması zor bir iş olduğundan , bu örnek için basit yüz tanıma özelliğini kullanacağız.
Adım 2: Takip Edilecek Yüzün Özelliklerini Tanımlama
Videoda yer alan yüzü tanımladıktan sonra , bu yüzü izlemenize yardımcı olacak bir özellik tespit etmektir. Örneğin, şekil, doku, ya da renk kullanabilirsiniz. Seçeceğiniz bu özellik Nesneye özgü ve nesne hareketiyle bile değişmeden kalan bir özellik olmalıdır.
Bu örnekte, izlemek için özellik olarak cilt tonunu kullanıyoruz.Cilt tonu yüz ve arka plan arasındaki kontrast farkı iyi bir uyum sağlar ve yüz döndükçe değişmez…
Adım 3: Takip Edilecek Yüzün Özelliklerini Tanımlama
İzlemek için özellikleri seçilen yüzü tanımladıktan sonra , artık izleme için vision.HistogramBasedTracker kullanabilirsiniz. Histogram, küçük küçük izci-piksel değerleri bir kullanarak bir nesneyi izlememizi sağlar. CAMShift algoritması kullanır. Bu örnekte, renk tonu piksel tespit yüzünün burun bölgesinden çıkarılır. Bu pikseller histogram oluşturulurken izcilerin iz sürme işlemini başlatmak için kullanılır.Bu örnek histogram kullanılarak ardışık video karelerinin üzerinde nesneyi izler.
Nesne algılama ve tanıma, otomotiv güvenliği gibi birçok görme uygulamalarında çok önemlidir. Bu örnekte, üç ayrı aşamada yüz tanıma sistemini öğreneceğiz:
1-) İzlenecek bir yüz Algılama
2-) İzlenecek yüzün özelliklerini belirlemek
3-) Yüzü izlemek
Adım 1: Takip Edilecek Yüzü Algılama
Bir yüzü takip başlamadan önce, ilk olarak yüzü tespit etmek gerekir. Bir video karesi içinde bir yüzün konumunu tespit etmek için vision.CascadeObjectDetectorkullanılır.Kaskad nesne dedektörü Viola-Jones algılama algoritması ve tespiti için eğitici bir sınıflandırma modeli kullanır. Temel olarak dedektör yüz algılamak üzere yapılandırılmış, fakat diğer nesne türleri için yapılandırılabilir.
% Yeni bir kaskat nesne dedektörü oluştur...
faceDetector = vision.CascadeObjectDetector();
% Video karesini kaskat dedektörle oku…
videoFileReader = vision.VideoFileReader(‘visionface.avi’);
videoFrame = step(videoFileReader);
bbox = step(faceDetector, videoFrame);
% Dedektör için yüz sınırlayıcı kutu oluşturun…
videoOut = insertObjectAnnotation(videoFrame,’rectangle’,bbox,’Face’);
figure, imshow(videoOut), title(‘Detected face’);
% Create a cascade detector object.
faceDetector = vision.CascadeObjectDetector();
% Video karesini dedektörle oku…
videoFileReader = vision.VideoFileReader(‘visionface.avi’);
videoFrame = step(videoFileReader);
bbox = step(faceDetector, videoFrame);
%Agılanacak yüzün etrafına sınırlayıcı kutu çizin…
videoOut = insertObjectAnnotation(videoFrame,’rectangle’,bbox,’Face’);
figure, imshow(videoOut), title(‘Detected face’);
Bu arda video kareleri üzerinde bir yüz izlemek için kaskad nesne dedektörünü kullanabilirsiniz.Yüzü 90 derece yatırır ya da kişi kafasını 180 dedece çevirdiğinde tek başına bu dedektörü kullanmak çeşitli sorunlara yol açabilir. Bu tür uygulamalarda kullanım için geliştirilmiş sınıflandırma modeli kullanmak gereklidir. Bu sorunu önlemek ve her video karesi için yüz tanıma performansının hesaplanması zor bir iş olduğundan , bu örnek için basit yüz tanıma özelliğini kullanacağız.
Adım 2: Takip Edilecek Yüzün Özelliklerini Tanımlama
Videoda yer alan yüzü tanımladıktan sonra , bu yüzü izlemenize yardımcı olacak bir özellik tespit etmektir. Örneğin, şekil, doku, ya da renk kullanabilirsiniz. Seçeceğiniz bu özellik Nesneye özgü ve nesne hareketiyle bile değişmeden kalan bir özellik olmalıdır.
Bu örnekte, izlemek için özellik olarak cilt tonunu kullanıyoruz.Cilt tonu yüz ve arka plan arasındaki kontrast farkı iyi bir uyum sağlar ve yüz döndükçe değişmez…
% Video karesinden Hue ayıklanması ile cilt tonu bilgisini alalım…
% Resim Hue Renk Alanına dönüştürülür…
[hueChannel,~,~] = rgb2hsv(videoFrame);
%Veriyi Hue Kanalında görüntülerken yüz çevresini sınırlayan kutuyu çizelim…
figure, imshow(hueChannel), title(‘Hue channel data’);
rectangle(‘Position’,bbox(1,:),’LineWidth’,2,’EdgeColor’,[1 1 0])
Adım 3: Takip Edilecek Yüzün Özelliklerini Tanımlama
İzlemek için özellikleri seçilen yüzü tanımladıktan sonra , artık izleme için vision.HistogramBasedTracker kullanabilirsiniz. Histogram, küçük küçük izci-piksel değerleri bir kullanarak bir nesneyi izlememizi sağlar. CAMShift algoritması kullanır. Bu örnekte, renk tonu piksel tespit yüzünün burun bölgesinden çıkarılır. Bu pikseller histogram oluşturulurken izcilerin iz sürme işlemini başlatmak için kullanılır.Bu örnek histogram kullanılarak ardışık video karelerinin üzerinde nesneyi izler.
% Yüz bölgesindeki burun algılanır…
% Bu bölgede herhangi bir arka plan pikseli
% içermediğinden emin olmak gerekir.
noseDetector = vision.CascadeObjectDetector(‘Nose’);
faceImage = imcrop(videoFrame,bbox(1,:));
noseBBox = step(noseDetector,faceImage);
%Burun sınırlayıcı kutusu is resmin kırpılan yüz .
%görüntüsüne göre tanımlanır Orjinal videoda burun sınırlama
% kutusunu ayarlamak gerekir…
noseBBox(1,1:2) = noseBBox(1,1:2) + bbox(1,1:2);
% Yakalama moduna giriş
tracker = vision.HistogramBasedTracker;
%Hue Kanalında yakalayıcı histogram başlatılıyor.. Burun
initializeObject(tracker, hueChannel, noseBBox(1,:));
% Video görüntülerini izlendiği araç…
videoInfo = info(videoFileReader);
videoPlayer = vision.VideoPlayer(‘Position’,[300 300 videoInfo.VideoSize+30]);
% Video bitene kadar döngü içerisindeki video karelerinin izlenmesi için…
while ~isDone(videoFileReader)
% Sonraki kare
videoFrame = step(videoFileReader);
% RGB -> HSV
[hueChannel,~,~] = rgb2hsv(videoFrame);
% Hue kanalındaki veriler ile izleme…
bbox = step(tracker, hueChannel);
%İzlenen nesnenin çevresine sınırlayıcı kutu çizme
videoOut = insertObjectAnnotation(videoFrame,’rectangle’,bbox,’Face’);
% Video oynatıcıda bu nesneyi görüntüleme
step(videoPlayer, videoOut);
end
% Yayınla…
release(videoFileReader);
release(videoPlayer);