始化行。
现在我们已经初始化了我们的人脸识别器,也准备了我们的训练数据,现在是时候训练人脸识别器了。我们将通过调用人脸识别器的序列(面向量,标签向量)方法来实现这一点。
你有没有注意到,不是直接将标签矢量直接传递给人脸识别器,而是先把它转换成numpy数组?这是因为OpenCV希望标签向量是一个numpy数组。
仍然不满意? 想看到一些行动? 下一步是真正的行动,我保证!
预测
现在是我最喜欢的部分,预测部分。 这是我们真正了解我们的算法是否确实能够识别受过训练的对象脸部的地方。 我们将拍摄两张我们的景点的测试图像,从他们每个人身上检测脸部,然后将这些脸部传递给我们训练有素的脸部识别器,看看它们是否识别它们。
下面是一些实用功能,我们将用它来绘制围绕脸部的边界框(矩形)并将边界名称放在边界框附近。
第一个函数draw_rectangle根据传入的矩形坐标在图像上绘制一个矩形。 它使用OpenCV的内置函数cv2.rectangle(img,topLeftPoint,bottomRightPoint,rgbColor,lineWidth)绘制矩形。 我们将使用它在测试图像中检测到的脸部周围画一个矩形。
第二个函数draw_text使用OpenCV的内置函数cv2.putText(img,text,startPoint,font,fontSize,rgbColor,lineWidth)在图像上绘制文本。
既然我们有绘图功能,我们只需要调用人脸识别器预测(人脸)方法来测试我们的测试图像上的人脸识别器。 以下功能为我们做了预测。
第6行读取测试图像 第7行从测试图像中检测脸部 第11行通过调用面部识别器的预测(面部)方法来识别面部。 该方法将返回一个标签 第12行获取与标签关联的名称 第16行在检测到的脸部周围绘制矩形 第18行绘制预测主体在面部矩形上方的名称
现在我们已经很好地定义了预测函数,下一步就是在我们的测试图像上实际调用这个函数,并显示这些测试图像以查看我们的人脸识别器是否能正确识别它们。 所以让我们来做。 这就是我们一直在等待的。
结语
你可以从这个Github下载完整的代码和相关文件 打开GitHab.
人脸识别是一个非常有趣的想法,OpenCV使得它非常简单,易于我们对其进行编码。 只需几行代码即可完成全面工作的人脸识别应用程序,并且我们可以通过一行代码更改在所有三个人脸识别器之间切换。 就这么简单。
尽管EigenFaces,FisherFaces和LBPH人脸识别器都不错,但是使用面向梯度直方图(HOG)和神经网络进行人脸识别还有更好的方法。 因此,更先进的人脸识别算法现在是一个使用OpenCV和机器学习相结合的日子。
|