目录

1. 数据集介绍

2. 训练、保存网络

3. 手势识别

4. 识别结果

5. 总结


1. 数据集介绍

本实验所用数据集为从Kaggle平台下载的手语数据集(sign_mnist)中选取的部分数据。

sign_mnist 数据集格式的模式化与经典 MNIST 紧密匹配。每个训练和测试用例表示一个标签 (0-25),作为每个字母 A-Z 的一对一映射(由于手势运动,9=J 或 25=Z 没有情况)。训练数据(27,455 个案例)和测试数据(7172 个案例)大约是标准 MNIST 大小的一半,但在其他方面与标签 pixel1,pixel2….pixel784 的标题行相似,它们表示单个 28×28 像素图像,灰度值在 0-255 之间。原始手势图像数据表示多个用户在不同背景下重复手势。部分示例图片如下:

本实验从以上数据集中选取十个手势分别定义为 0~9,定义示例图如下:

本实验所用数据集将原始的 CSV 文件转换成图片(png)格式,两种格式文件下载见文末总结。

2. 训练、保存网络

随机选取 20 张图片进行展示。

clc; cleargesture_dataset_path = fullfile('dataset', 'train_data');imds=imageDatastore(gesture_dataset_path, 'FileExtensions',...{'.png','.jpg','.tif'},'IncludeSubfolders',true,... 'LabelSource','foldernames');figurenumImages = 11599;perm = randperm(numImages,20); % 随机选取20个数,perm是1*20double数组for i = 1:20 % 此循环是MATLAB自带示例subplot(4,5,i);imshow(imds.Files{perm(i)}); % 显示随机选取的20幅图像drawnow;end

展示如图:

cnn网络结构图:

训练结果:

训练结果显示,其验证准确度达到了 99.97%,效果很好。

3. 手势识别

通过使用测试数据集中的图片进行手势识别,查看识别效果。

clc; clear% 导入训练好的 CNN 网络load("cnn.mat");% 对测试数据集任一图像测试I = imread('dataset\test_data\5\5_100.png');imshow(I);title(classify(net, I));% 查看对测试数据集中手势 5 的识别正确率m = 0;for i = 1:310P = imread(strcat('dataset\test_data\5\5_', num2str(i),'.png'));if double(string(classify(net, P))) ~= 5m = m + 1;endendaccy = (310 - m) / 310;fprintf('The accuracy rate is %6.4f.\n', accy);

4. 识别结果

结果显示,对测试数据集中手势 5 的识别正确率为 93.55%。

5. 总结

1. 识别效果良好,最终的手势识别测试可以改进做一个 GUI 界面更好。

2. 本实验所用数据集和全部源代码下载。