要构建SLR(手语识别),我们需要做三件事:
机器学习数据集构建机器学习模型(我们将使用CNN)应用模型平台(我们将使用OpenCV)
1)数据集
可以在此处下载手势数据集(kaggle网站的/datamunge/sign-language-mnist)。
我们的机器学习数据集包含24个(J和Z除外)American Sign Laguage字母表的许多图像。每个图像的大小为28x28像素,这意味着每个图像总共784个像素。
加载机器学习数据集
要加载数据集,请使用以下Python代码:
我们的数据集采用CSV(逗号分隔值)格式。train_X和test_X包含每个像素的值。train_Y和test_Y包含图像标签。您可以使用以下Python代码查看机器学习数据集:
数据预处理
train_X和test_X包含所有像素像素值的数组。我们从这些值创建了一个图像。我们的图像尺寸是28x28,因此我们必须将阵列分成28x28像素组。为此,我们将使用以下代码:
现在我们可以使用这个数据集来训练我们的机器学习模型了。
2)建立和训练模型
我们将使用CNN(卷积神经网络)来识别字母。我们用keras。
机器学习模型的Python实现如下:
我们的模型由Conv2D和MaxPooling层组成,然后是一些全连接层(Dense)。
第一个Conv2D(卷积)层采用(28,28,1)的输入图像。最后一个全连接层为我们提供了26个字母的输出。
我们正在使用第二个Conv2D层之后的Dropout来正则化我们的训练。
我们在最后一层使用softmax激活函数。
最后我们的模型看起来像这样:
我们必须编译并拟合机器学习模型。为此,我们将使用如下Python代码:
我们正在使用SGD优化器来编译我们的模型。您也可以将时期减少到25。
最后要检查准确性:
要保存训练过的机器学习模型,我们可以使用:
classifier.save('CNNmodel.h5')
3)OpenCV
以下Python实现方法为示例,可以根据需要自己调整。
导入Python库并加载模型
辅助函数
预测
我们必须从输入图像预测字母表。我们的模型将输出作为整数而不是字母,因为标签是以整数形式给出的(A为1,B为2,C为3,依此类推......)
创建窗体
我们必须创建一个窗口来从我们的网络摄像头获取输入。我们作为输入的图像应该是28x28灰度图像。因为我们在28x28尺寸的图像上训练我们的模型。示例代码如下:
我们的机器学习模型准确度约为94%,因此它应该识别字母而没有任何问题。