代码如下(示例):
import cv2 as cv import os import numpy as np from PIL import Image
代码如下(示例):
import cv2 as cv import os import numpy as np from PIL import Image def train_img(path): #调用训练集 face = cv.CascadeClassifier('haarcascade_frontalface_alt2.xml') #图片集 picture = [] #标签集 ids = [] #图片集合 Imagepaths = [os.path.join(path, f) for f in os.listdir(path)] #循环每一张图片 for Imagepath in Imagepaths: #提取这张图片的id号 id = int(os.path.split(Imagepath)[1].split('.')[0]) #将图片转灰 PIL_img = Image.open(Imagepath).convert('L') #将图片转化为uint8 img_numpy = np.array(PIL_img, 'uint8') #提取人脸 faces = face.detectMultiScale(img_numpy) for x, y, w, h in faces: picture.append(img_numpy[y:y+h, x:x+w]) ids.append(id) return picture, ids path = 'D://ll//' faces, ids = train_img(path) recognizer = cv.face.LBPHFaceRecognizer_create() recognizer.train(faces, np.array(ids)) recognizer.write('d:\\train.xml')
import cv2 as cv recognizer = cv.face.LBPHFaceRecognizer_create() recognizer.read('d:\\train.xml') def compare_img(img): face = cv.CascadeClassifier('haarcascade_frontalface_alt2.xml') gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) faces = face.detectMultiScale(gray) for x, y, w, h in faces: cv.rectangle(img,(x, y), (x+w, y+h), (0,255,0),2) id, picture = recognizer.predict(gray[y:y+h, x:x+w]) print('图片-->',id,'相似度评分:',picture) cv.imshow('out', img) img = cv.imread('D:\\33.jpg') compare_img(img) cv.waitKey(0) cv.destroyAllWindows()
大功告成