1、下载opencv 源码
官网地址:http://opencv.org

下载后找到下面文件 代码中会引用

2、准备训练集
如下图我准备了五个人的训练集,每个人一个文件夹

3、模型训练完整代码:
import cv2
import os
import numpy as np
import pickle
def train_model(dataset_path):
# 初始化人脸检测器
face_detector = cv2.CascadeClassifier('D:/pic/opencv-4.12.0/data/haarcascades/haarcascade_frontalface_default.xml')
# 准备训练数据
faces = []
labels = []
label_dict = {}
current_label = 0
# 遍历数据集文件夹
for person_name in os.listdir(dataset_path):
person_path = os.path.join(dataset_path, person_name)
if os.path.isdir(person_path):
label_dict[current_label] = person_name
for image_name in os.listdir(person_path):
image_path = os.path.join(person_path, image_name)
img = cv2.imread(image_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces_rect = face_detector.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
for (x, y, w, h) in faces_rect:
face_roi = gray[y:y + h, x:x + w]
faces.append(face_roi)
labels.append(current_label)
current_label += 1
# 训练模型
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.train(faces, np.array(labels))
# 保存模型
recognizer.save('face_model.yml')
with open('label_dict.pickle', 'wb') as f:
pickle.dump(label_dict, f)
print(f"训练完成! 共训练 {len(label_dict)} 个人的数据")
if __name__ == '__main__':
#图片路径
path = 'd:/pic/mycodetest/'
train_model(path)
4、摄像头实时推理完整代码
import cv2
import pickle
def recognize_faces():
# 加载模型
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('face_model.yml')
with open('label_dict.pickle', 'rb') as f:
label_dict = pickle.load(f)
# 初始化摄像头
cap = cv2.VideoCapture(0)
face_detector = cv2.CascadeClassifier('D:/pic/opencv-4.12.0/data/haarcascades/haarcascade_frontalface_default.xml')

最低0.47元/天 解锁文章
1515

被折叠的 条评论
为什么被折叠?



