opencv-python人脸识别完整门禁系统
时间: 2025-05-01 16:36:25 浏览: 17
### 使用 OpenCV-Python 实现人脸识别门禁系统的完整教程
构建一个人脸识别门禁系统涉及多个技术环节,包括但不限于人脸检测、特征提取、模型训练以及实时监控等功能模块。以下是基于 OpenCV-Python 的人脸识别门禁系统实现的核心要点及其代码示例。
#### 1. 数据准备
为了完成人脸识别任务,需要收集一组已知人员的脸部数据集作为训练样本。这些数据可以存储为图像文件,并通过标签区分不同个体的身份[^3]。
```python
import os
from PIL import Image
def prepare_training_data(data_folder_path):
dirs = os.listdir(data_folder_path)
faces = []
labels = []
for dir_name in dirs:
label = int(dir_name.replace("s", ""))
subject_dir_path = data_folder_path + "/" + dir_name
subject_images_names = os.listdir(subject_dir_path)
for image_name in subject_images_names:
if image_name.startswith("."):
continue
image_path = subject_dir_path + "/" + image_name
image = Image.open(image_path).convert('L')
face_np = np.array(image, 'uint8')
faces.append(face_np)
labels.append(label)
return faces, labels
```
此函数会读取指定路径下的所有子目录中的脸部照片,并将其转换成灰度图以便后续处理。
#### 2. 训练分类器
利用上述获取的数据集来训练LBPH(Local Binary Patterns Histograms)分类器或其他适合的机器学习算法。
```python
recognizer = cv2.face.LBPHFaceRecognizer_create()
faces, labels = prepare_training_data("training-data")
print("Training...")
recognizer.train(faces, np.array(labels))
print("Trained!")
```
这里调用了 `cv2.face.LBPHFaceRecognizer_create()` 方法创建了一个新的 LBPH 面部分类器实例,并传入之前整理好的面部数据与对应的标签数组对其进行训练。
#### 3. 实现实时捕获与预测逻辑
最后一步是在摄像头流中捕捉当前画面并对其中出现的人脸执行匹配操作。
```python
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces_detected = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)
for (x,y,w,h) in faces_detected:
roi_gray = gray[y:y+h,x:x+w]
label, confidence = recognizer.predict(roi_gray)
text_to_show = f"{label} ({confidence})"
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
cv2.putText(frame,text_to_show,(x,y-10),cv2.FONT_HERSHEY_SIMPLEX,.9,(36,255,12),2)
cv2.imshow('Video',frame)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
该脚本启动默认网络摄像机设备并持续显示每一帧的画面,在每张新抓拍到的照片上查找可能存在的面孔位置;一旦发现潜在的目标,则尝试运用先前已经过良好调整过的模型去辨认它所属的具体身份类别。
---
###
阅读全文
相关推荐















