进行人脸识别需要用到图像处理的哪些内容,图像识别和计算机视觉的关系
人脸检测是指图像中人脸定位的过程,而人脸识别是在人脸检测的基础上进一步判断一个人的身份。OpenCV提供了三种人脸识别方法:特征脸、鱼脸、局部二进制模式直方图、LBPH(局部二进制编码直方图)。
1、特征脸
特征脸人脸识别的基本步骤:
(1)调用cv2 . face . eigen face recognizer _ create()方法创建一个EigenFaces识别器;
(2)调用识别器的train()方法,利用已知图像训练模型;
(3)调用识别器的predict()方法识别未知图像,确认其身份。
使用的功能:
Recognizer=cv2 . face . EigenFaces recognizer _ create([num _ components[,threshold]])参数描述:Recognizer是返回的eigen faces Recognizer对象。
Num_components是分析时组件的数量,默认值为0,表示根据实际输入确定。
阈值是人脸识别中使用的阈值。
recognizer.train(src,labels)的参数描述:src是用于训练的已知图像的数组。
Labels是一个标签数组,与已知图像数组中的人脸一一对应,同一个人的人脸标签应该设置为相同的值。
Label,confidence=recognizer . predict(testimg)参数描述:testimg是未知人脸图像,label是返回的标签值。
置信度是返回的置信度,表示模型中未知人脸和已知人脸之间的距离。0表示完全匹配,小于5000可视为可靠匹配结果。
代码如下:
导入cv2import numpy为npimg1=cv2.imread(xxx ,0)img2=cv2.imread(xxx ,0)img3=cv2.imread(xxx ,0)img4=cv2.imread(xxx ,0)img5=cv2.imread(xxx ,0)img1=cv2.resize(img1,dsize=(200,200),interpolation=cv2。INTER _ NEAREST)img 2=cv2 . resize(img 2,dsize=(200,200),interpolation=cv2。INTER _ NEAREST)img 3=cv2 . resize(img 3,dsize=(200,200),interpolation=cv2。INTER _ NEAREST)img 4=cv2 . resize(img 4,dsize=(200,200),Interpolation=cv2 . INTER _ NEAREST)im G5=cv2 . resize(img 5,DSize=(200,200),Interpolation=cv2 . INTER _ NEAREST)#创建训练图像数组train_images=[img1,img2,img3,img,IMG5] #在训练图像数组labels=np.array([1,2 0) testimg=cv2.resize (testimg,dsize=(200,200),interpolation=cv2 . inter _ nearest)#识别人脸标签,置信度=recognizer.predict (testimg) #输出识别结果print(匹配标签:,label)print(置信度:,置信度)注意:读取图像时,必须转换为灰度图像;
所有用于训练的已知人脸图像和用于测试的未知人脸图像必须具有相同的大小(这一点在程序中已经有所体现,你可以根据自己的实际和需求来设置大小);
recognizer=cv2 . face . eigenfacecognizer _ create()函数中的人脸来自OpenCV的贡献库,所以需要安装opencv-contrib-python,并且要和opencv-python的版本一致,否则程序会报错。
以下是与训练图像数组完全相同的图像和与训练图像数组完全不同的图像的结果:
2、鱼脸
鱼脸人脸识别的基本步骤:
(1)调用cv2 . face . fisher face recognizer _ create()方法创建FisherFaces识别器;
(2)调用识别器的train()方法,利用已知图像训练模型;
(3)调用识别器的predict()方法识别未知图像,确认其身份。
代码类似于EigenFaces,只要识别器将被创建。
只需将recognizer=cv2 . face . eigen face recognizer _ create()改为recognizer=cv2 . face . fisher face recognizer _ create()。
3、LBPH
LBPH算法图像处理的基本原理;
在像素X周围(附近)取8个像素并进行比较。如果像素值大于像素X,取0;否则,取1。将8个像素对应的0和1连接起来得到一个8作为二进制数,转换成十进制数作为像素X的LBP值;
对图像的所有像素进行同样的处理,得到整幅图像的LBP图像,图像的直方图就是图像的LBPH。
LBPH人脸识别的基本步骤:
(1)调用cv2 . face . lbphfacecognizer _ create()方法创建lbph识别器;
(2)调用识别器的train()方法,利用已知图像训练模型;
(3)调用识别器的predict()方法识别未知图像,确认其身份。
使用的功能:
Recognizer=cv2 . face . lbphfacecognizer _ create([,radius [,neighbors [,grid _ x [,grid _ y [,threshold]])参数描述:Recognizer是返回的LBPH recognizer对象。
是邻域的半径。
Neighbors是邻域中的像素数,默认情况下为8。
Grid_x是当LBP图像被分成多个单元时水平方向上的单元数。默认值为8。
Grid_x是当LBP图像被分成多个单元时垂直方向上的单元数。默认值为8。
阈值是人脸识别中使用的阈值。
recognizer.train(src,labels)的参数描述:src是用于训练的已知图像的数组。
Labels是一个标签数组,与已知图像数组中的人脸一一对应,同一个人的人脸标签应该设置为相同的值。
Label,confidence=recognizer . predict(testimg)参数描述:testimg是未知人脸图像,label是返回的标签值。
置信度是返回的置信度,表示模型中未知人脸和已知人脸之间的距离。0表示完全匹配,小于50可视为可靠匹配结果。
代码实现:
导入cv2import numpy为npimg1=cv2.imread(xxx ,0)img2=cv2.imread(xxx ,0)img3=cv2.imread(xxx ,0)img4=cv2.imread(xxx ,0)img5=cv2.imread(xxx ,0)#img1=cv2.resize(img1,dsize=(200,200),interpolation=cv2。INTER _ NEAREST)img 2=cv2 . resize(img 2,dsize=(200,200),interpolation=cv2。INTER _ NEAREST)img 3=cv2 . resize(img 3,dsize=(200,200),interpolation=cv2。INTER _ NEAREST)img 4=cv2 . resize(img 4,dsize=(200,200),Interpolation=cv2 . INTER _ NEAREST)im G5=cv2 . resize(img 5,DSize=(200,200),Interpolation=cv2 . INTER _ NEAREST)#创建训练图像数组train_images=[img1,img2,img3,img,IMG5] #在训练图像数组labels=np.array([1,2 0) testimg=cv2.resize (testimg,dsize=(200,200),interpolation=cv2 . inter _ nearest)#识别人脸标签,置信度=recognizer.predict (testimg) #输出识别结果print(匹配标签:,label)print(置信度:,置信度)