基于机器视觉的数字1-10手势识别系统( 四 )


这个程序文件是一个用于预测空间数据的脚本 。它使用库来加载预训练的模型,并对给定的图像帧进行预测 。以下是脚本的主要功能:
导入所需的库和模块 。定义了一些辅助函数,如加载图像帧、加载标签、预测等 。定义了一个函数,用于在给定的图像帧文件夹中进行预测 。解析命令行参数,包括模型文件、图像帧文件夹、输入层名称、输出层名称和批处理大小 。调用函数进行预测,并将预测结果保存到文件中 。
总体而言,这个程序文件是一个用于预测空间数据的脚本,它可以根据给定的图像帧和预训练模型进行预测,并将结果保存到文件中 。
5.6 .py
class SVM:def __init__(self):self.X = []self.Y = []self.classifier = Nonedef load_data(self):for i in range(0, 2):for f in os.listdir("C:/Users/15690/Desktop/800SVM/code/datasets/images/%s" % i):Images = cv2.imread("C:/Users/15690/Desktop/800SVM/code/datasets/images/%s/%s" % (i, f))image = cv2.resize(Images, (256, 256), interpolation=cv2.INTER_CUBIC)hist = cv2.calcHist([image], [0, 1], None, [256, 256], [0.0, 255.0, 0.0, 255.0])self.X.append(((hist / 255).flatten()))self.Y.append(i)print(str(((hist / 255).flatten())) + ' ' + str(i))self.X = np.array(self.X)self.Y = np.array(self.Y)def train(self):cv = StratifiedKFold(n_splits=10)self.classifier = svm.SVC(kernel='rbf', gamma=0.0001, C=1000, probability=True, random_state=0)mean_tpr = 0.0mean_fpr = np.linspace(0, 1, 100)cnt = 0for i, (train, test) in enumerate(cv.split(self.X, self.Y)):cnt += 1probas_ = self.classifier.fit(self.X[train], self.Y[train]).predict_proba(self.X[test])fpr, tpr, thresholds = roc_curve(self.Y[test], probas_[:, 1])mean_tpr += np.interp(mean_fpr, fpr, tpr)mean_tpr[0] = 0.0roc_auc = auc(fpr, tpr)plt.plot(fpr, tpr, lw=1, label='ROC fold {0:.2f} (area = {1:.2f})'.format(i, roc_auc))plt.plot([0, 1], [0, 1], '--', color=(0.6, 0.6, 0.6), label='Luck')mean_tpr /= cntmean_tpr[-1] = 1.0mean_auc = auc(mean_fpr, mean_tpr)plt.plot(mean_fpr, mean_tpr, 'k--', label='Mean ROC (area = {0:.2f})'.format(mean_auc), lw=2)plt.xlim([-0.05, 1.05])plt.ylim([-0.05, 1.05])plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.title('Receiver operating characteristic example')plt.legend(loc="lower right")plt.show()def save_model(self):os.chdir("./save_model")joblib.dump(self.classifier, "train_model.m")
这个程序文件是用来训练支持向量机(SVM)模型的 。程序首先导入了必要的库和模块,然后读取了一组图片数据,并对图片进行了预处理和特征提取 。接下来,程序使用交叉验证和ROC曲线评估了SVM模型的性能,并绘制了平均ROC曲线 。最后,程序保存了训练好的模型 。
6.系统整体结构
整体功能和构架概括:
这个项目是一个基于机器视觉的数字1-10手势识别系统 。它包含了多个程序文件,每个文件都有不同的功能,共同构建了整个系统 。以下是每个文件的功能的整理:
文件名功能概述
.py
将指定文件夹中的视频文件转换成帧,并计算每个视频文件的帧数
.py
对输入的图像进行手部分割
hog.py
提取图像的HOG特征
play.py
加载文件并显示其中的数据
.py
预测空间数据,使用预训练的模型对给定的图像帧进行预测
.py
训练支持向量机(SVM)模型
ui.py
用户界面,用于交互和展示手势识别系统
以上是每个文件的功能概述,它们共同构成了基于机器视觉的数字1-10手势识别系统 。
7.手势建模
手势模型对于手势识别来说十分重要,因为模型的好坏关系到识别范围的确定 。一般来说,模型会根据用户具体的需求来进行选取,如果手部动作较为简单,不涉及到复杂的手指变化,一般采用简单的模型就能满足需求,如果手部动作复杂,有各种细节的描述,则需要进行精确的建模 。目前基本有两类手势建模的方法:基于表观的手势建模和基于3D模型的手势建模R:基于表观的手势建模是建立在人手图像的表观之上的,通过分析具体手势的表观特征来进行建模;基于3D模型的手势建模则考虑到了具体手势产生的中间媒体,例如手和手臂 。图对描述了手势模型的具体分类 。