人脸模型训练-推理完整过程附代码

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')

 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值