21xrx.com
2024-12-26 15:55:22 Thursday
登录
文章检索 我的文章 写文章
用Python编写的OpenCV人脸识别程序
2023-07-28 07:53:20 深夜i     --     --
Python OpenCV 人脸识别程序

OpenCV是一个广泛使用于计算机视觉领域的开源库,它提供了许多用于图像处理和分析的函数和工具。在这个快节奏的世界中,安全一直是一个重要的关注点。为了确保安全,人脸识别技术成为了一个热门话题。本文将介绍如何使用Python编写基于OpenCV的人脸识别程序。

首先,你需要安装Python和OpenCV库。使用pip命令在命令行中输入以下命令来安装它们:


pip install opencv-python

一旦安装完成,你可以开始编写代码了。在使用前,你需要准备一张人脸图像作为参考,这将用于训练你的人脸识别模型。将该图像保存在你的项目目录中,并命名为“reference.jpg”。

接下来,导入必要的库,包括cv2、numpy和PIL库,以及人脸识别模型。代码如下所示:

python

import cv2

import numpy as np

from PIL import Image

# 导入人脸识别模型

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 导入参考图像并将其转换为灰度图像

reference_image = Image.open('reference.jpg').convert('L')

reference_np = np.array(reference_image, 'uint8')

# 初始化人脸识别器

recognizer = cv2.face.LBPHFaceRecognizer_create()

# 初始化人脸标签列表

face_labels = []

然后,我们需要训练人脸识别模型。使用以下代码来实现:

python

def train_model():

  # 打开一个视频捕获对象

  video_capture = cv2.VideoCapture(0)

  # 初始化一个计数器

  count = 0

  # 循环读取摄像头捕获的图像帧

  while True:

    # 读取当前帧

    ret, frame = video_capture.read()

    # 将当前帧转换为灰度图像

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 检测人脸

    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.5, minNeighbors=5)

    for (x, y, w, h) in faces:

      # 保存人脸图像

      roi_gray = gray[y:y + h, x:x + w]

      cv2.imwrite(f'faces/face{count}.jpg', roi_gray)

      # 添加标签

      face_labels.append(count)

      # 绘制矩形框和标签

      cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

      cv2.putText(frame, f'Face {count}', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

      # 计数器加一

      count += 1

    # 显示图像

    cv2.imshow('Video', frame)

    # 按下'q'退出循环

    if cv2.waitKey(1) & 0xFF == ord('q'):

      break

  # 释放视频捕获对象和窗口

  video_capture.release()

  cv2.destroyAllWindows()

  # 训练人脸识别模型

  recognizer.train(faces, np.array(face_labels))

  recognizer.save('model.yml')

训练完成后,我们可以使用以下代码来测试人脸识别模型:

python

def recognize_faces():

  # 打开一个视频捕获对象

  video_capture = cv2.VideoCapture(0)

  # 加载刚才训练的模型

  recognizer.read('model.yml')

  # 循环读取摄像头捕获的图像帧

  while True:

    # 读取当前帧

    ret, frame = video_capture.read()

    # 将当前帧转换为灰度图像

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 检测人脸

    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.5, minNeighbors=5)

    for (x, y, w, h) in faces:

      # 绘制矩形框

      cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

      # 识别人脸并返回标签和置信度

      label, confidence = recognizer.predict(gray[y:y + h, x:x + w])

      # 根据置信度判断是否为已知人脸

      if confidence < 50:

        # 绘制标签

        cv2.putText(frame, f'Face {label}', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

      else:

        cv2.putText(frame, 'Unknown', (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

    # 显示图像

    cv2.imshow('Video', frame)

    # 按下'q'退出循环

    if cv2.waitKey(1) & 0xFF == ord('q'):

      break

  # 释放视频捕获对象和窗口

  video_capture.release()

  cv2.destroyAllWindows()

通过调用这两个函数,我们可以开始训练和测试我们的人脸识别程序。这只是一个简单的示例,你可以根据自己的需求来优化和扩展它。人脸识别技术的应用范围非常广泛,可以用于身份验证、安防监控等领域。希望本文能够对你进一步了解OpenCV和人脸识别有所帮助。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复