当前位置: 首页 > article >正文

python版opencv人脸训练与人脸识别

1.人脸识别准备

使用的两个opencv包

D:\python2023>pip list |findstr opencv
opencv-contrib-python     4.8.1.78
opencv-python             4.8.1.78

数据集使用前一篇Javacv的数据集,网上随便找的60张图片,只是都挪到了D:\face目录下方便遍历

D:\face\1 30张刘德华图片
D:\face\2 30张刘亦菲图片

2.人脸识别模型训练

# -*- coding: utf-8 -*-
import os

import cv2
import numpy as np

recognizer = cv2.face.LBPHFaceRecognizer().create() # Fisher需要reshape
classifier = cv2.CascadeClassifier('E:\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml')
def load_dataset(dataset_path):
    images=[]
    labels=[]
    for root,dirs,files in os.walk(dataset_path):
        for file in files:
            images.append(cv2.imread(os.path.join(root, file),cv2.IMREAD_GRAYSCALE))
            labels.append(int(os.path.basename(root)))
    return images,labels
if __name__ == '__main__':
    images,labels = load_dataset('D:\\face')
    recognizer.train(images,np.array(labels))
    recognizer.save('face_model.xml')

3.人脸识别推理预测

# -*- coding: utf-8 -*-
import os

import cv2


def face_detect(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    classifier = cv2.CascadeClassifier('E:\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml')
    faces = classifier.detectMultiScale(gray, 1.2, 5)
    if (len(faces) == 0):
        return None, None
    (x, y, w, h) = faces[0]
    return gray[y:y + w, x:x + h], faces[0]


def draw_rectangle(img, rect):
    (x, y, w, h) = rect
    cv2.rectangle(img, (x, y), (x + w, y + h), (255, 255, 0), 2)


def draw_text(img, text, x, y):
    cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 0), 2)


def predict(image):
    image_copy = image.copy()
    face, rect = face_detect(image_copy)
    tuple = recognizer.predict(face)
    print(tuple)
    draw_rectangle(image_copy, rect)
    draw_text(image_copy, str(tuple[0]), rect[0], rect[1])
    return image_copy


if __name__ == '__main__':
    recognizer = cv2.face.LBPHFaceRecognizer().create()  # Fisher需要reshape
    recognizer.read("face_model.xml")
    for root, dirs, files in os.walk('D:\\face\\2'):
        for file in files:
            file_path = os.path.join(root, file)
            predict_image = predict(cv2.imread(file_path))
            cv2.imshow('result', predict_image)
            cv2.waitKey(1000)

总结

代码逻辑基本同Javacv,但更简洁,这里训练出来模型准确度也高于Javacv (可能是参数不一致导致的)


http://www.kler.cn/a/104582.html

相关文章:

  • 压缩包已知密码却跳过密码界面直接弹出解压
  • k8s快速部署nacos2.2.0集群
  • 深入理解NLP
  • 一文说尽零售数据分析指标体系
  • python+requests+unittest执行自动化接口测试!
  • 在 Python 中使用 Pillow 进行图像处理【2/4】
  • 阿里云服务结构--长期更新
  • 【JavaSE语法】数据类型与变量
  • 微信小程序设计之主体文件app-wxss/less
  • MATLAB R2023b安装包下载链接
  • 华为昇腾NPU卡 大模型LLM ChatGLM2模型推理使用
  • 递归神经网络 (RNN)
  • springboot移除nacos yml无法加载
  • (免费领源码)java#Springboot#mysql装修选购网站99192-计算机毕业设计项目选题推荐
  • FPGA驱动步进电机-Sin曲线加速
  • 【STM32】时钟设置函数(寄存器版)
  • [ACTF2020 新生赛]Include
  • Canny算子详解及例程
  • [计算机提升] 命令、批处理介绍
  • 成员变量、静态成员变量、局部变量、常量的内存区域