代码如下(示例):
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()
大功告成