使用Python从图像创建用于人脸识别的数据集

使用Python从图像创建用于人脸识别的数据集,python,opencv,computer-vision,image-recognition,knn,Python,Opencv,Computer Vision,Image Recognition,Knn,我正在尝试用Python编写一个人脸识别程序(我将应用k-nn算法进行分类) 首先,我将图像转换为灰度,然后(通过使用Opencv的imagedata函数)用图像像素(128x128=16384个特征总数)创建了一个长列向量 所以我得到了如下的数据集(最后一列是类标签,我只显示了数据集的前7个特性,而不是16384) 但当我将k-nn应用于这个数据集时,我得到了令人尴尬的结果。我是否需要对该数据集应用额外的过程,而不仅仅是将图像转换为像素表示 谢谢。这是怎么打印的?您是否尝试过使用重塑功能?它将

我正在尝试用Python编写一个人脸识别程序(我将应用k-nn算法进行分类)

首先,我将图像转换为灰度,然后(通过使用Opencv的imagedata函数)用图像像素(128x128=16384个特征总数)创建了一个长列向量

所以我得到了如下的数据集(最后一列是类标签,我只显示了数据集的前7个特性,而不是16384)

但当我将k-nn应用于这个数据集时,我得到了令人尴尬的结果。我是否需要对该数据集应用额外的过程,而不仅仅是将图像转换为像素表示


谢谢。

这是怎么打印的?您是否尝试过使用重塑功能?它将2D图像转换为带/不带多个通道的一维图像


此外,图像的像素也不是。你可以在脸后面有很多不同的物体——窗帘、书、其他的脸等等。像脸的边界、眼睛之间的距离等东西对这些东西更为不变。

如果你想让它正常工作,是的,你需要做一个特征变换

PCA或LDA工作良好。PCA将获取一组输入向量(在本例中为矢量化图像),并找到跨越输入集的特征面。然后,在测试过程中,将输入向量(即图像)投影到这组特征面上,并使用生成的坐标向量作为特征向量。有关更多信息,请参见[]


我个人使用这种基本的PCA方法在计算机上进行的实验是成功的。

您可能需要将眼睛、鼻尖和嘴对齐


您可能还需要更复杂的图像表示方法。例如,梯度方向和自商图像将是良好的起点

通常,人脸识别管道需要几个阶段才能有效。某种程度的几何规范化对精度至关重要。您要么需要手动标记基准点并获取每个图像的变换,要么自动检测基准点,因为有开源的基准点检测器。尝试opencv的getAffineTransform函数。此外,照明差异可能会造成巨大的问题。您可以尝试照明规范化技术(例如,自商图像),因为它们对于漫反射和阴影(而不是镜面反射)非常有效。对于降维,主成分分析(PCA)或线性判别分析(LDA)是很好的起点。而不是原始像素特征,你可能会考虑更有意义的特征,如LBP,HOG,或SIFT。此外,使用更复杂(尽管更复杂)的分类器(如SVM),您将能够获得比KNN更高的精度。

您能更详细地描述尴尬的结果吗?还有,你有多少张图片?
176, 176, 175, 175, 177, 173, 178, 1 
162, 161, 167, 162, 167, 166, 166, 2