1. IR-Depth Face Detection and Lip Localization Using Kinect V2
Intermediate
Toolbox: Computer Vision, Image Processing
Deliverables: Code .m, Depth Pipeline, Report
🎯 Problem & Objective: Accurate facial feature and lip contour localization are fundamental components in Audio-Visual Automatic Speech Recognition (AV-ASR) under acoustic noise. This project fuses infrared (IR) intensity and registered depth maps from Microsoft Kinect V2 to eliminate background clutter, detect the 3D nose tip as a geometric anchor, and accurately constrain the search space for lip tracking.
⚙️ Key MATLAB Functions:
vision.CascadeObjectDetectorimregionalmaxactivecontourpcfromkinectimbinarize
📊 Expected Output & Metrics: 3D surface depth point cloud, segmented mouth ROI bounding box, lip contour boundary tracking overlay, and lip center localization error (< 2.5 mm).
irImg = imread('kinect_ir_sample.png');
depthMap = load('kinect_depth_sample.mat').depth;
headMask = depthMap >= 600 & depthMap <= 1200;
irFiltered = mat2gray(irImg) .* double(headMask);
faceDetector = vision.CascadeObjectDetector('FrontalFaceCART');
faceBBox = faceDetector(uint8(irFiltered * 255));
if ~isempty(faceBBox)
faceDepth = depthMap(faceBBox(1,2):faceBBox(1,2)+faceBBox(1,4), ...
faceBBox(1,1):faceBBox(1,1)+faceBBox(1,3));
[minDepth, minIdx] = min(faceDepth(:));
[noseY, noseX] = ind2sub(size(faceDepth), minIdx);
lipY = faceBBox(1,2) + noseY + round(0.18 * faceBBox(1,4));
lipX = faceBBox(1,1) + noseX - round(0.20 * faceBBox(1,3));
lipW = round(0.40 * faceBBox(1,3)); lipH = round(0.22 * faceBBox(1,4));
outImg = insertObjectAnnotation(irFiltered, 'rectangle', [lipX, lipY, lipW, lipH], 'Lip ROI');
figure; imshow(outImg); title('Depth-Constrained Lip Localization');
end
Est. Duration: 1–2 Weeks
Request Custom Project →
2. Robust Unconstrained Face Detection and Lip Localization Using Gabor Filters
Intermediate
Toolbox: Image Processing, Computer Vision
Deliverables: Code .m, Filter Bank Script, Report
🎯 Problem & Objective: Address illumination variance, non-uniform shadows, and facial clutter in unconstrained video by applying a multi-scale, multi-orientation 2D Gabor filter bank. Compute magnitude energy responses to isolate high-frequency directional edges representing mouth corners and lip vermilion borders for robust visual speech decoding.
⚙️ Key MATLAB Functions:
gaborimgaborfiltimmorphologyimgradientregionprops
📊 Expected Output & Metrics: 24-channel Gabor filter magnitude maps, reconstructed mouth feature vector, lip corner coordinates, and 96.2% localization precision under low illumination.
wavelengths = [4 8 16];
orientations = [0 45 90 135];
gaborBank = gabor(wavelengths, orientations);
I = imread('face_unconstrained.jpg');
if size(I,3) == 3, I = rgb2gray(I); end
[mag, phase] = imgaborfilt(I, gaborBank);
mouthEnergy = sum(mag(:,:,[1, 2, 4]), 3);
mouthEnergy = mat2gray(mouthEnergy);
bwMouth = imbinarize(mouthEnergy, 'adaptive', 'Sensitivity', 0.55);
stats = regionprops(bwMouth, 'Area', 'BoundingBox', 'Centroid');
figure;
subplot(1,2,1); imshow(I); title('Original Input Face');
subplot(1,2,2); imshow(mouthEnergy, []); colormap('jet'); colorbar;
title('Gabor Energy Saliency Map');
Est. Duration: 1–2 Weeks
Request Custom Project →
3. Face and Lip Localization in Unconstrained Imagery Using Modified HSI Color Space
Beginner
Toolbox: Image Processing, Computer Vision
Deliverables: Code .m, Color Segmentation GUI, Report
🎯 Problem & Objective: Implement an illumination-invariant color segmentation algorithm using a modified Hue-Saturation-Intensity (HSI) color space and YCbCr chromaticity transformations. Separate human skin pixels from background clutter, extract eye-pair candidates, and isolate reddish lip tones based on chrominance differences ($Cr/Cb$).
⚙️ Key MATLAB Functions:
rgb2hsvrgb2ycbcrbwconncompregionpropsimfill
📊 Expected Output & Metrics: Segmented skin binary mask, eye-lip facial geometry triangle plot, lip boundary box, and 94.8% detection rate on unconstrained web images.
rgb = imread('portrait_sample.jpg');
hsv = rgb2hsv(rgb);
ycbcr = rgb2ycbcr(rgb);
H = hsv(:,:,1); S = hsv(:,:,2); V = hsv(:,:,3);
Cb = double(ycbcr(:,:,2)); Cr = double(ycbcr(:,:,3));
skinMask = (H >= 0.0 & H <= 0.15) & (S >= 0.23 & S <= 0.68) & (V >= 0.35);
skinMask = imclose(skinMask, strel('disk', 5));
skinMask = imfill(skinMask, 'holes');
lipMap = (Cr.^2) .* ((Cr.^2) - 1.2 * (Cr ./ (Cb + eps)));
lipMap = mat2gray(lipMap) .* skinMask;
lipBW = lipMap > 0.45;
stats = regionprops(lipBW, 'BoundingBox', 'Area');
figure;
subplot(1,3,1); imshow(rgb); title('Input Image');
subplot(1,3,2); imshow(skinMask); title('Skin Binary Mask');
subplot(1,3,3); imshow(lipMap, []); title('Lip Chrominance Map');
Est. Duration: 4–6 Hours
Request Custom Project →
4. Perspective Distortion Modeling in Face Images and Object Tracking Library
Advanced
Toolbox: Computer Vision, Image Processing
Deliverables: Code .m, Tracking Library, Report
🎯 Problem & Objective: Smartphone wide-angle lenses and close-range selfie cameras cause severe geometric perspective distortion (nose enlargement, forehead curvature, lateral cheek contraction). This project models the physical perspective warping transform as a parametric family of nonlinear projective mappings to restore canonical frontal face geometry, coupled with a modular Kanade-Lucas-Tomasi (KLT) point tracking library.
⚙️ Key MATLAB Functions:
projective2dimwarpvision.PointTrackerestimateGeometricTransform2DcameraParameters
📊 Expected Output & Metrics: Unwarped orthographic face reconstruction, optical flow trajectory vector field, tracking stability across 300 frames, and 18.3% recognition boost on wide-angle face datasets.
focalLength = [450, 450];
principalPoint = [320, 240];
radialDistortion = [-0.18, 0.04];
camParams = cameraParameters('IntrinsicMatrix', [focalLength(1) 0 0; 0 focalLength(2) 0; principalPoint 1], ...
'RadialDistortion', radialDistortion);
rawFrame = imread('distorted_face.jpg');
correctedFrame = undistortImage(rawFrame, camParams);
pointTracker = vision.PointTracker('MaxBidirectionalError', 2);
points = detectFASTFeatures(rgb2gray(correctedFrame), 'MinContrast', 0.15);
initialize(pointTracker, points.Location, correctedFrame);
[trackedPoints, isFound] = pointTracker(correctedFrame);
figure; imshow(correctedFrame); hold on;
plot(trackedPoints(isFound,1), trackedPoints(isFound,2), 'g+', 'LineWidth', 2);
title('Perspective Corrected Frame with KLT Point Tracking');
Est. Duration: 2–3 Weeks
Request Custom Project →
5. Viola-Jones Cascade Classifier & Additive Classifiers for Rapid Visual Recognition
Beginner
Toolbox: Computer Vision, Statistics & ML
Deliverables: Code .m, ROC Evaluation, Report
🎯 Problem & Objective: Implement and benchmark the seminal Viola-Jones object detection framework using integral image computation, rectangular Haar-like features, and AdaBoost boosting for additive stage rejection. Analyze the trade-offs between cascade tree depth, false positive rates (FPR), and frame throughput.
⚙️ Key MATLAB Functions:
vision.CascadeObjectDetectorintegralImageinsertObjectAnnotationperfcurvetrainCascadeObjectDetector
📊 Expected Output & Metrics: Multi-scale bounding boxes overlaid on group photos, ROC curve plotting detection probability vs false alarm rate, and 60+ FPS processing speed.
faceDetector = vision.CascadeObjectDetector('FrontalFaceCART', 'MinSize', [40 40]);
eyeDetector = vision.CascadeObjectDetector('EyePairBig');
mouthDetector = vision.CascadeObjectDetector('Mouth');
img = imread('group_faces.jpg');
faceBBoxes = faceDetector(img);
annotatedImg = insertObjectAnnotation(img, 'rectangle', faceBBoxes, 'Face', ...
'LineWidth', 3, 'Color', 'cyan', 'TextColor', 'black');
fprintf('Detected %d human faces successfully.\n', size(faceBBoxes, 1));
figure; imshow(annotatedImg);
title(sprintf('Viola-Jones Detection: %d Faces Found', size(faceBBoxes, 1)));
Est. Duration: 4–8 Hours
Request Custom Project →
6. Parallel GPU-Accelerated Feature Extraction & Large-Scale Face Matching
Intermediate
Toolbox: Parallel Computing, Computer Vision
Deliverables: Code .m, GPU Benchmark Suite, Report
🎯 Problem & Objective: Match probe facial embeddings across massive databases of 100,000+ enrolled subjects without latency bottlenecks. Develop parallel multi-core (`parfor`) and CUDA GPU (`gpuArray`) matrix operations to parallelize feature extraction, compute pairwise cosine distance tensors, and achieve sub-millisecond query search times.
⚙️ Key MATLAB Functions:
gpuArrayparforpdist2gatherpagefuntall
📊 Expected Output & Metrics: CPU vs GPU execution speedup curves (8.5x to 22x speedup), Top-1 and Top-5 Rank retrieval accuracy, and latency breakdown per 10k database entries.
numEnrolled = 50000;
featureDim = 512;
dbEmbeddings = normc(randn(numEnrolled, featureDim, 'single'));
probeVector = normc(randn(1, featureDim, 'single'));
gpuDB = gpuArray(dbEmbeddings);
gpuProbe = gpuArray(probeVector);
tic;
similarityScores = gpuDB * gpuProbe';
[topScores, topIndices] = maxk(similarityScores, 5);
gpuTime = toc;
topScores = gather(topScores);
topIndices = gather(topIndices);
fprintf('GPU Matching Complete in: %.4f ms across %d identities.\n', gpuTime*1000, numEnrolled);
fprintf('Top Match Candidate Index: #%d (Score: %.4f)\n', topIndices(1), topScores(1));
Est. Duration: 1–2 Weeks
Request Custom Project →
7. Internal vs. External Facial Feature Salience Analysis for Central Vision Loss
Intermediate
Toolbox: Image Processing, Statistics & ML
Deliverables: Code .m, Saliency Study Scripts, Report
🎯 Problem & Objective: Individuals affected by Age-Related Macular Degeneration (AMD) or Central Vision Loss (CVL) experience central scotoma obscuring internal features (eyes, nose, mouth). This project models scotoma occlusions and investigates the classification salience of external features (hairline, jawline, ears) versus internal features using Gabor spatial filters and SVM classifiers.
⚙️ Key MATLAB Functions:
fitcsvmroipolyfspecialimfilterpredict
📊 Expected Output & Metrics: Scotoma visual simulation overlays, feature importance weight bar charts, classification accuracy degradation curves (Internal: 42% vs External: 81% under CVL scotoma).
img = imread('face_sample.jpg');
[H, W, ~] = size(img);
[X, Y] = meshgrid(1:W, 1:H);
centerX = W/2; centerY = H/2 + 10;
scotomaRadius = 55;
scotomaMask = exp(-((X - centerX).^2 + (Y - centerY).^2) / (2 * scotomaRadius^2));
cvlSimulated = double(rgb2gray(img)) .* (1 - scotomaMask);
outerMask = (X - centerX).^2 + (Y - centerY).^2 > (1.3 * scotomaRadius)^2;
externalFeatures = cvlSimulated .* outerMask;
figure;
subplot(1,2,1); imshow(uint8(cvlSimulated)); title('Simulated Central Scotoma (CVL)');
subplot(1,2,2); imshow(uint8(externalFeatures)); title('Isolated External Salient Features');
Est. Duration: 1–2 Weeks
Request Custom Project →
8. Attention-Guided Deep Convolutional Neural Network (CNN) for Face Recognition
Advanced
Toolbox: Deep Learning, Computer Vision
Deliverables: Code .m, Custom Layer Scripts, Report
🎯 Problem & Objective: Standard CNNs treat all image regions uniformly, causing degradation when faces exhibit extreme poses, partial occlusions (glasses, scarves), or dynamic illumination. Design a custom Spatial Attention and Channel Attention module (CBAM) integrated into a ResNet-50 / MobileNetV2 backbone, trained with ArcFace additive angular margin loss for discriminative feature separation.
⚙️ Key MATLAB Functions:
dlnetworklayerGraphtrainingOptionstrainNetworkdlgradientsoftmax
📊 Expected Output & Metrics: Grad-CAM attention heatmap visualizations highlighting discriminative facial keypoints, training loss/accuracy trajectories, and 99.42% verification accuracy on LFW benchmark.
net = resnet50;
lgraph = layerGraph(net);
numIdentities = 100;
newLayers = [
fullyConnectedLayer(512, 'Name', 'fc_embedding', 'WeightLearnRateFactor', 10)
batchNormalizationLayer('Name', 'bn_embedding')
fullyConnectedLayer(numIdentities, 'Name', 'fc_arcface')
softmaxLayer('Name', 'softmax')
classificationLayer('Name', 'output')
];
lgraph = replaceLayer(lgraph, 'fc1000', newLayers(1));
lgraph = addLayers(lgraph, newLayers(2:end));
lgraph = connectLayers(lgraph, 'fc_embedding', 'bn_embedding');
options = trainingOptions('adam', ...
'InitialLearnRate', 1e-4, ...
'MaxEpochs', 20, ...
'MiniBatchSize', 32, ...
'Shuffle', 'every-epoch', ...
'Plots', 'training-progress', ...
'Verbose', false);
Est. Duration: 2–4 Weeks
Request Custom Project →
9. Microcontroller-Integrated Automotive Security System with RFID & Face Authentication
Intermediate
Toolbox: Computer Vision, MATLAB Support Package for Arduino / Serial
Deliverables: Code .m, Hardware Schematics, Report
🎯 Problem & Objective: Prevent vehicle theft and key-cloning vulnerabilities by engineering a Two-Factor Authentication (2FA) embedded security system. The vehicle immobilizer verifies a 13.56 MHz RFID card via microcontroller serial UART communication, triggers an onboard dashboard webcam to capture driver facial features, and validates identity in MATLAB before unlocking ignition relays.
⚙️ Key MATLAB Functions:
serialportreadlinewritelinewebcamsnapshotvision.CascadeObjectDetector
📊 Expected Output & Metrics: Real-time UART event logging terminal, snapshot biometric match confirmation, GPIO relay control status, and 0% unauthorized vehicle ignition grant.
s = serialport("COM4", 9600, "Timeout", 10);
configureTerminator(s, "CR/LF");
flush(s);
cam = webcam(1);
disp("Automotive Security Online. Waiting for RFID Tag...");
rfidTag = readline(s);
validUID = "A4:3F:89:C2";
if contains(rfidTag, validUID)
disp("RFID Verified. Initiating Driver Biometric Face Check...");
img = snapshot(cam);
detector = vision.CascadeObjectDetector();
bbox = detector(img);
if ~isempty(bbox)
writeline(s, "AUTH_SUCCESS_IGNITION_ON");
disp("Access Granted: Ignition Enabled.");
else
writeline(s, "AUTH_FAIL_FACE_NOT_FOUND");
end
else
writeline(s, "AUTH_FAIL_INVALID_RFID");
end
clear cam; delete(s);
Est. Duration: 1–2 Weeks
Request Custom Project →
10. MATLAB-based Face Recognition System using PCA/DCT and Neural Networks
Beginner
Toolbox: Deep Learning, Statistics & Machine Learning
Deliverables: Code .m, SOM Architecture, Report
🎯 Problem & Objective: Implement an efficient, low-memory face recognition pipeline combining Discrete Cosine Transform (DCT) / Principal Component Analysis (PCA) feature compression with a Self-Organizing Map (SOM) Kohonen neural network or Multi-Layer Perceptron (MLP) for unsupervised identity clustering.
⚙️ Key MATLAB Functions:
dct2pcaselforgmaptrainplotsomhitsconfusionmat
📊 Expected Output & Metrics: 2D Kohonen weight neighbor connection grid, DCT energy compaction plots, confusion matrix, and 93.5% classification accuracy on the AT&T (ORL) database.
numSamples = 200; featureLen = 64;
featureMatrix = zeros(featureLen, numSamples);
for i = 1:numSamples
faceImg = im2double(imread(sprintf('orl_faces/s%d.pgm', i)));
dctCoeffs = dct2(faceImg);
lowFreq = dctCoeffs(1:8, 1:8);
featureMatrix(:, i) = lowFreq(:);
end
dimensions = [10 10];
net = selforgmap(dimensions);
net.trainParam.epochs = 150;
net = train(net, featureMatrix);
y = net(featureMatrix);
figure; plotsomhits(net, featureMatrix);
title('SOM Neuron Cluster Activation Distribution');
Est. Duration: 6–8 Hours
Request Custom Project →
11. Fisherfaces (LDA) vs. Eigenfaces (PCA) Biometric Classification on Yale Database
Beginner
Toolbox: Statistics & Machine Learning, Image Processing
Deliverables: Code .m, Comparative Benchmark, Report
🎯 Problem & Objective: Formulate and directly compare the performance of Principal Component Analysis (Eigenfaces) vs Linear Discriminant Analysis (Fisherfaces) on the Yale Face Database. Compute within-class ($S_W$) and between-class ($S_B$) scatter matrices to maximize class separability while minimizing illumination sensitivity.
⚙️ Key MATLAB Functions:
pcaeigfitcdiscrpdist2confusionchart
📊 Expected Output & Metrics: Top 10 reconstructed Eigenfaces and Fisherfaces visualization, cumulative variance explained curve, and accuracy comparison table under drastic lighting shifts.
[coeff, score, latent, tsquared, explained] = pca(X_train);
k = find(cumsum(explained) >= 95, 1);
eigenfaces = coeff(:, 1:k);
projTrain = (X_train - mean(X_train)) * eigenfaces;
projTest = (X_test - mean(X_train)) * eigenfaces;
distMatrix = pdist2(projTest, projTrain, 'euclidean');
[minVal, minIdx] = min(distMatrix, [], 2);
predictedLabels = y_train(minIdx);
accuracy = mean(predictedLabels == y_test) * 100;
fprintf('Eigenfaces (PCA) Classification Accuracy: %.2f%%\n', accuracy);
Est. Duration: 4–6 Hours
Request Custom Project →
12. 3D Facial Mesh Reconstruction & 68-Point Landmark Head Pose Estimation
Advanced
Toolbox: Computer Vision, Deep Learning
Deliverables: Code .m, 3D Mesh Viewer, Report
🎯 Problem & Objective: Regress 68 2D/3D facial landmarks from monocular RGB video frames using deep cascaded networks (MTCNN / ERT). Fit a 3D Morphable Model (3DMM) to reconstruct 3D dense facial vertex geometry and solve the Perspective-n-Point (PnP) problem for real-time continuous head pose tracking (Roll, Pitch, Yaw).
⚙️ Key MATLAB Functions:
detectFacialLandmarksestimateWorldCameraPoserotm2eultrisurfplotTransforms
📊 Expected Output & Metrics: Interactive 3D wireframe mesh plot, 3-axis head rotation vector HUD, Mean Absolute Error (MAE < 3.2° across pose angles), and 35 FPS tracking throughput.
detector = vision.CascadeObjectDetector();
img = imread('pose_test_subject.jpg');
bbox = detector(img);
if ~isempty(bbox)
landmarks = detectFacialLandmarks(img, bbox(1,:));
modelPoints3D = [
0.0, 0.0, 0.0;
0.0, -330.0, -65.0;
-225.0, 170.0, -135.0;
225.0, 170.0, -135.0;
-150.0, -150.0, -125.0;
150.0, -150.0, -125.0
];
imagePoints2D = landmarks([31, 9, 37, 46, 49, 55], :);
[R, t] = estimateWorldCameraPose(imagePoints2D, modelPoints3D, cameraIntrinsics([500 500],[320 240],[480 640]));
eulAngles = rotm2eul(R.R, 'ZYX') * (180/pi);
fprintf('Head Pose -> Yaw: %.2f deg, Pitch: %.2f deg, Roll: %.2f deg\n', eulAngles(1), eulAngles(2), eulAngles(3));
end
Est. Duration: 2–3 Weeks
Request Custom Project →
13. Anti-Spoofing & Liveness Detection using Local Binary Patterns (LBP) & Frequency Analysis
Advanced
Toolbox: Computer Vision, Image Processing, Statistics & ML
Deliverables: Code .m, Liveness Test Suite, Report
🎯 Problem & Objective: Defend biometric systems against Presentation Attacks (printed photo spoofing, tablet screen replays, 3D silicone masks). Extract multi-scale Uniform Local Binary Patterns (uLBP) to detect micro-texture surface degradation and 2D Fourier Power Spectrum high-frequency specular reflections, feeding an SVM liveness classifier.
⚙️ Key MATLAB Functions:
extractLBPFeaturesfft2fftshiftfitcsvmpredictrocmetrics
📊 Expected Output & Metrics: 2D Fourier power spectrum surface plots, live vs spoof probability scores, Half Total Error Rate (HTER < 2.1%), and BPCER / APCER ISO/IEC 30107-3 compliance.
faceCrop = imread('probe_face_crop.jpg');
if size(faceCrop, 3) == 3, faceGray = rgb2gray(faceCrop); end
faceGray = imresize(faceGray, [128 128]);
lbpRadius1 = extractLBPFeatures(faceGray, 'Radius', 1, 'NumNeighbors', 8, 'Upright', false);
lbpRadius2 = extractLBPFeatures(faceGray, 'Radius', 2, 'NumNeighbors', 16, 'Upright', false);
F = fftshift(fft2(double(faceGray)));
powerSpectrum = abs(F).^2;
highFreqEnergy = sum(powerSpectrum(:) > median(powerSpectrum(:)) * 10);
livenessVector = [lbpRadius1, lbpRadius2, highFreqEnergy];
[predictedLabel, score] = predict(svmAntiSpoofModel, livenessVector);
fprintf('Liveness Classification: %s (Confidence: %.2f%%)\n', string(predictedLabel), max(score)*100);
Est. Duration: 2–3 Weeks
Request Custom Project →
14. Masked Face Recognition & Infrared Thermal Temperature Screening Fusion
Intermediate
Toolbox: Computer Vision, Image Processing, Deep Learning
Deliverables: Code .m, Thermal-RGB Registration, Report
🎯 Problem & Objective: Standard face recognition algorithms fail when subjects wear surgical or N95 face masks that obscure the lower 60% of facial features. Build a dual-stream fusion system extracting periocular (eyes, forehead, brows) deep features combined with calibrated FLIR Long-Wave Infrared (LWIR) radiometric thermal registration for non-contact fever detection.
⚙️ Key MATLAB Functions:
imregisterimregconfigactivationsinsertShapeheatmap
📊 Expected Output & Metrics: Registered RGB-Thermal fused video display, forehead inner-canthus core temperature reading (±0.3°C precision), mask compliance status, and 97.6% masked recognition rate.
rgbImg = imread('subject_rgb_masked.jpg');
thermalMatrix = load('thermal_raw_kelvin.mat').T_Celsius;
detector = vision.CascadeObjectDetector();
bbox = detector(rgbImg);
periocularBBox = [bbox(1,1), bbox(1,2), bbox(1,3), round(bbox(1,4)*0.45)];
foreheadThermal = thermalMatrix(periocularBBox(2):periocularBBox(2)+periocularBBox(4), ...
periocularBBox(1):periocularBBox(1)+periocularBBox(3));
maxTemp = max(foreheadThermal(:));
periocularCrop = imresize(imcrop(rgbImg, periocularBBox), [224 224]);
features = activations(net, periocularCrop, 'global_average_pooling2d-default');
isFever = maxTemp > 37.8;
fprintf('Subject Core Temp: %.2f °C | Fever Alert: %s\n', maxTemp, string(isFever));
Est. Duration: 1–2 Weeks
Request Custom Project →
15. Facial Micro-Expression & Emotion Recognition using Transfer Learning and BiLSTM
Advanced
Toolbox: Deep Learning, Computer Vision
Deliverables: Code .m, Temporal BiLSTM Network, Report
🎯 Problem & Objective: Facial micro-expressions occur involuntarily within 1/25th to 1/5th of a second, revealing suppressed human psychological states. Build a hybrid spatio-temporal deep neural network leveraging a pre-trained CNN (GoogLeNet/ResNet) for spatial feature extraction per frame, cascaded into a Bidirectional Long Short-Term Memory (BiLSTM) network to classify 7 universal emotional states (Happiness, Sadness, Anger, Surprise, Fear, Disgust, Neutral).
⚙️ Key MATLAB Functions:
bilstmLayersequenceInputLayertrainNetworkactivationsclassify
📊 Expected Output & Metrics: Real-time rolling probability bar graph for 7 emotions, temporal Action Unit (AU) activation curves, and 91.8% F1-score on the CK+ and RAF-DB facial expression datasets.
numFeatures = 1000;
numHiddenUnits = 128;
numClasses = 7;
layers = [
sequenceInputLayer(numFeatures, 'Name', 'seq_in')
bilstmLayer(numHiddenUnits, 'OutputMode', 'last', 'Name', 'bilstm')
dropoutLayer(0.4, 'Name', 'drop')
fullyConnectedLayer(numClasses, 'Name', 'fc')
softmaxLayer('Name', 'softmax')
classificationLayer('Name', 'class_out')
];
options = trainingOptions('adam', ...
'MaxEpochs', 30, ...
'MiniBatchSize', 16, ...
'InitialLearnRate', 0.001, ...
'GradientThreshold', 1, ...
'Plots', 'training-progress');
Est. Duration: 2–3 Weeks
Request Custom Project →