说出一个基于opencv的人脸识别,并写出详细代码
时间: 2023-12-25 13:04:59 浏览: 65
基于Opencv的人脸识别代码
4星 · 用户满意度95%
以下是一个基于OpenCV的人脸识别的代码示例,其中使用了Haar级联分类器来检测人脸,并使用LBPH(Local Binary Patterns Histograms)算法进行人脸识别。这里假设已经有了人脸图片库,并且已经进行了训练得到了识别模型。
```python
import cv2
import numpy as np
# 加载Haar级联分类器用于人脸检测
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 加载LBPH算法模型用于人脸识别
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.read('trainer.yml')
# 加载人脸图片库,用于显示人名
names = ['Person 1', 'Person 2', 'Person 3'] # 人名列表
face_images = []
for i in range(len(names)):
img = cv2.imread('person_{}.jpg'.format(i+1), 0)
face_images.append(img)
# 初始化摄像头
cap = cv2.VideoCapture(0)
while True:
# 从摄像头捕获图片
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 转换为灰度图像
# 检测人脸
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
# 对每一个检测到的人脸进行识别
for (x,y,w,h) in faces:
# 绘制矩形框
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
# 提取人脸ROI并进行识别
roi_gray = gray[y:y+h, x:x+w]
id_, confidence = recognizer.predict(roi_gray)
# 显示人名和置信度
if confidence < 100:
name = names[id_]
confidence = " {0}%".format(round(100 - confidence))
else:
name = "unknown"
confidence = " {0}%".format(round(100 - confidence))
cv2.putText(img, name, (x+5,y-5), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)
cv2.putText(img, str(confidence), (x+5,y+h-5), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 1)
# 显示图片
cv2.imshow('img',img)
# 按下q键退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
```
在上述代码中,首先加载了Haar级联分类器和LBPH算法模型,然后加载了人脸图片库,用于在识别时显示人名。接着,程序启动摄像头,不断进行人脸检测和识别,并在检测到人脸时绘制矩形框、识别人脸并显示人名和置信度。最后,按下q键退出程序,并释放摄像头资源。
需要注意的是,这里使用的是OpenCV的Python接口,需要先安装OpenCV for Python。此外,还需要准备好人脸图片库和识别模型,可以通过OpenCV提供的API进行训练。
阅读全文