info@matlabiran.ir

خانه » کتاب آموزشی » تشخیص چهره و دنبال کردن آن به صورت زنده در متلب

تشخیص چهره و دنبال کردن آن به صورت زنده در متلب

شناسایی و ردیابی چهره در متلب

شناسایی و ردیابی چهره در متلب

این مثال چگونگی شناسایی و تخصیص اتوماتیک چهره را در یک ویدیو زنده نشان می دهد. این کار از طریق الگوریتم KLT انجام می شود.

مقدمه

شناسایی و تشخیص اجسام در پردازش تصویر کامپیوتری که شامل موارد متعددی از جمله “تشخیص حرکت”، “ایمنی خودرو” و “سیستم های نظارتی” می باشد. در این مثال شما یک سیستم ساده را برای ردیابی و تعقیب یک چهره در یک ویدیو زنده از وبکم را توسعه خواهید داد. متلب سیستم پشتیبانی از وبکم را از طریق Hardware Support Package ارائه می دهد که برای اجرای این دستور شما می توانید آن را دانلود و نصب کنید. (این دستور را در نرم افزار متلب تایپ کنید:  supportPackageInstaller)

سیستم ردیابی و تعقیب چهره در این مثال می تواند در یکی از دو حالت زیر کار کند. “شناسایی” و “ردیابی”. در حالت “شناسایی” شما از vision.CascadeObjectDetector برای شناسایی چهره در هر فریم استفاده می نمایید. اگر چهره ای شناسایی شد، شما باید گوشه های کنار چهره را مشخص کنید. و یک vision.PointTracker رو مقدار دهی اولیه نمایید و پس از آن به حالت “ردیابی” بروید.

در حالت “ردیابی” شما باید نقاط را به وسیله یک ابزار ردیابی کننده ی نقاط، ردیابی کنید. به محض این که شما نقاط را ردیابی می کنید برخی از آن ها به دلیل نوسانات مختلف از دست خواهند رفت. اگر تعداد نقاطی که ردیابی می شوند کمتر از یک حد معین گردید، به این معنی است که چهره دیگر ردیابی نمی شود. بنابراین شما باید مجددا به حالت “شناسایی” بروید تا مجددا چهره را شناسایی کنید.

تنظیمات اولیه

ایجاد تنظیمات اولیه برای شناسایی چهره، نقاط ردیابی، پیدا کردن و نمایش فریم های ویدیویی:

% Create the face detector object.
faceDetector = vision.CascadeObjectDetector();

% Create the point tracker object.
pointTracker = vision.PointTracker(‘MaxBidirectionalError’, 2);

% Create the webcam object.
cam = webcam();

% Capture one frame to get its size.
videoFrame = snapshot(cam);
frameSize = size(videoFrame);

% Create the video player object.
videoPlayer = vision.VideoPlayer(‘Position’, [100 100 [frameSize(2), frameSize(1)]+30]);

شناسایی و ردیابی

دریافت و پردازش فریم های ویدیویی از وبکم که در یک حلقه انجام می شود و شناسایی و ردیابی چهره. این حاقه برای 400 فریم تا زمان بسته شدن video player کار می کند.

runLoop = true;
numPts = 0;
frameCount = 0;

while runLoop && frameCount < 400

% Get the next frame.
videoFrame = snapshot(cam);
videoFrameGray = rgb2gray(videoFrame);
frameCount = frameCount + 1;

if numPts < 10
% Detection mode.
bbox = faceDetector.step(videoFrameGray);

if ~isempty(bbox)
% Find corner points inside the detected region.
points = detectMinEigenFeatures(videoFrameGray, ‘ROI’, bbox(1, :));

% Re-initialize the point tracker.
xyPoints = points.Location;
numPts = size(xyPoints,1);
release(pointTracker);
initialize(pointTracker, xyPoints, videoFrameGray);

% Save a copy of the points.
oldPoints = xyPoints;

% Convert the rectangle represented as [x, y, w, h] into an
% M-by-2 matrix of [x,y] coordinates of the four corners. This
% is needed to be able to transform the bounding box to display
% the orientation of the face.
bboxPoints = bbox2points(bbox(1, :));

% Convert the box corners into the [x1 y1 x2 y2 x3 y3 x4 y4]
% format required by insertShape.
bboxPolygon = reshape(bboxPoints’, 1, []);

% Display a bounding box around the detected face.
videoFrame = insertShape(videoFrame, ‘Polygon’, bboxPolygon, ‘LineWidth’, 3);

% Display detected corners.
videoFrame = insertMarker(videoFrame, xyPoints, ‘+’, ‘Color’, ‘white’);
end

else
% Tracking mode.
[xyPoints, isFound] = step(pointTracker, videoFrameGray);
visiblePoints = xyPoints(isFound, :);
oldInliers = oldPoints(isFound, :);

numPts = size(visiblePoints, 1);

if numPts >= 10
% Estimate the geometric transformation between the old points
% and the new points.
[xform, oldInliers, visiblePoints] = estimateGeometricTransform(…
oldInliers, visiblePoints, ‘similarity’, ‘MaxDistance’, 4);

% Apply the transformation to the bounding box.
bboxPoints = transformPointsForward(xform, bboxPoints);

% Convert the box corners into the [x1 y1 x2 y2 x3 y3 x4 y4]
% format required by insertShape.
bboxPolygon = reshape(bboxPoints’, 1, []);

% Display a bounding box around the face being tracked.
videoFrame = insertShape(videoFrame, ‘Polygon’, bboxPolygon, ‘LineWidth’, 3);

% Display tracked points.
videoFrame = insertMarker(videoFrame, visiblePoints, ‘+’, ‘Color’, ‘white’);

% Reset the points.
oldPoints = visiblePoints;
setPoints(pointTracker, oldPoints);
end

end

% Display the annotated video frame using the video player object.
step(videoPlayer, videoFrame);

% Check whether the video player window has been closed.
runLoop = isOpen(videoPlayer);
end

% Clean up.
clear cam;
release(videoPlayer);
release(pointTracker);
release(faceDetector);

شناسایی و ردیابی چهره در متلب

شناسایی و ردیابی چهره در متلب

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد.