手把手教你搭建完整Python人脸识别系统

前言

人脸识别的核心流程分为 人脸检测 → 人脸特征提取 → 人脸比对识别 三大核心步骤,Python凭借成熟的库生态可以完美落地这套流程,本文抛弃纯理论,全程用可运行代码实现,从环境搭建、基础检测到完整实战项目,每一个环节都对应完整代码,所有代码均可直接复制运行,配套标准化项目结构,零基础也能直接上手,最终实现「实时摄像头人脸识别、批量图片识别、人脸库比对、1:1验证、1:N检索」全套功能,文末附完整项目整合代码。

在这里插入图片描述

在这里插入图片描述

  • 手把手教你搭建完整Python人脸识别系统
    • 前言
    • 一、前置准备:环境安装+标准化项目结构(必做,代码运行基础)
      • ✅ 1. 一键安装所有依赖库(复制执行即可)
      • ✅ 2. 标准化项目目录结构(手动创建,严格对应,避免路径报错)
    • 二、第一步:人脸检测(核心代码,2种场景:图片检测+摄像头实时检测)
      • ✅ 核心功能:识别图片/视频帧中「人脸的位置」,返回人脸坐标并绘制矩形框,解决「有没有人脸、人脸在哪」的问题
      • 场景1:单张图片人脸检测(完整可运行代码)
      • 场景2:电脑摄像头实时人脸检测(完整可运行代码,最常用)
    • 三、第二步:人脸特征提取(核心核心,生成128维人脸编码,纯代码实现)
      • ✅ 核心原理
      • ✅ 完整可运行代码(图片人脸编码提取+特征点可视化)
    • 四、第三步:构建人脸数据库(序列化存储,避免重复生成编码,纯代码)
      • ✅ 核心需求
      • ✅ 完整可运行代码(生成人脸库+加载人脸库,2合1)
    • 五、第四步:核心功能实现(4个高频场景,纯代码,全部可运行)
      • ✅ 场景1:1:1人脸验证(一对一比对,比如身份核验、人脸解锁)
      • ✅ 场景2:1:N人脸识别(一对多检索,核心场景:考勤、门禁、打卡)
      • ✅ 场景3:摄像头实时人脸识别(终极常用功能,考勤/门禁核心)
      • ✅ 场景4:批量处理文件夹内所有图片(批量识别,相册分类)
    • 六、第五步:高级功能实现(纯代码,解决实际问题,提升项目实用性)
      • ✅ 功能1:戴口罩人脸识别(适配遮挡场景,高实用性)
      • ✅ 功能2:活体检测(防照片/视频欺骗,考勤必备防作弊)
    • 七、完整项目整合版(main.py,一键运行,所有功能集成)
    • 最后:运行须知+常见问题解决
      • ✅ 运行前必做2件事
      • ✅ 常见问题解决
    • 总结


一、前置准备:环境安装+标准化项目结构(必做,代码运行基础)

✅ 1. 一键安装所有依赖库(复制执行即可)

# 核心必备库(所有功能依赖,无版本冲突)
pip install opencv-python==4.8.1.78 dlib==19.24.2 face-recognition==1.3.0 numpy==1.26.2
# 可选扩展库(序列化存储+中文显示+文件操作)
pip install pickle pillow

说明:face-recognition 底层封装了dlib的核心算法,是本次开发的核心库,一行代码实现人脸编码;OpenCV负责图像/视频读取、绘制框选;numpy负责数值计算。

✅ 2. 标准化项目目录结构(手动创建,严格对应,避免路径报错)

face_recognition_system/
├── data/
│   ├── known_faces/       # 存放已知人脸【必须自己放照片】,命名格式:姓名_1.jpg 姓名_2.jpg
│   ├── unknown_faces/     # 存放待识别的图片/视频
│   └── save_result/       # 识别结果自动保存目录
├── model_data/            # 存放特征编码缓存文件,不用重复生成
├── core_code/             # 本文所有分步代码都放这里
└── main.py                # 完整整合版项目入口文件

关键提示:known_faces 文件夹中放入你要录入的人脸照片,比如 张三.jpg李四.jpg,单人建议放2-3张不同角度的照片,提升识别准确率。


二、第一步:人脸检测(核心代码,2种场景:图片检测+摄像头实时检测)

✅ 核心功能:识别图片/视频帧中「人脸的位置」,返回人脸坐标并绘制矩形框,解决「有没有人脸、人脸在哪」的问题

场景1:单张图片人脸检测(完整可运行代码)

# face_detect_img.py
import cv2
import face_recognition

# 1. 加载图片(修改为你的图片路径)
img_path = "./data/unknown_faces/test1.jpg"
img = face_recognition.load_image_file(img_path)
# 转成OpenCV的BGR格式(face_recognition用RGB,OpenCV用BGR,必须转换)
img_cv = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

# 2. 核心:人脸检测,获取所有人脸的坐标 (top, right, bottom, left)
face_locations = face_recognition.face_locations(img)

# 3. 遍历检测到的人脸,绘制矩形框+标注人脸序号
for index, (top, right, bottom, left) in enumerate(face_locations):
    # 绘制人脸矩形框:cv2.rectangle(图片, 左上角, 右下角, 颜色, 线条宽度)
    cv2.rectangle(img_cv, (left, top), (right, bottom), (0, 255, 0), 2)
    # 标注人脸序号
    cv2.putText(img_cv, f"Face {index+1}", (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,255,0), 2)

# 4. 显示结果+保存结果
cv2.imshow("人脸检测结果", img_cv)
cv2.imwrite("./data/save_result/face_detect_result.jpg", img_cv)

# 等待按键关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

print(f"检测到 {len(face_locations)} 张人脸")

场景2:电脑摄像头实时人脸检测(完整可运行代码,最常用)

# face_detect_camera.py
import cv2
import face_recognition

# 1. 初始化摄像头,0=电脑自带摄像头,1=外接摄像头
cap = cv2.VideoCapture(0)
# 设置摄像头分辨率
cap.set(3, 640)
cap.set(4, 480)

print("摄像头已启动,按 'q' 退出...")

while True:
    # 2. 读取摄像头每一帧
    ret, frame = cap.read()
    if not ret:
        break
    
    # 3. 实时检测人脸
    face_locations = face_recognition.face_locations(frame)
    
    # 4. 绘制人脸框
    for (top, right, bottom, left) in face_locations:
        cv2.rectangle(frame, (left, top), (right, bottom), (0, 255, 0), 2)
    
    # 5. 显示画面
    cv2.imshow("实时人脸检测", frame)
    
    # 按 q 键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头+关闭窗口
cap.release()
cv2.destroyAllWindows()

三、第二步:人脸特征提取(核心核心,生成128维人脸编码,纯代码实现)

✅ 核心原理

每个人的人脸会被转化为 唯一的128维特征向量(人脸编码),这是人脸识别的核心:同一个人无论表情、角度、轻微遮挡,编码高度相似;不同人编码差异极大
face_recognition 一行代码即可完成「检测人脸+提取编码」,无需手动处理特征点,底层自动完成dlib 68点特征对齐+标准化处理。

✅ 完整可运行代码(图片人脸编码提取+特征点可视化)

# face_encoding.py
import cv2
import face_recognition
import numpy as np

# 1. 加载人脸图片(已知人脸,用于录入库)
img_path = "./data/known_faces/张三.jpg"
img = face_recognition.load_image_file(img_path)
img_cv = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

# 2. 核心1:检测人脸位置
face_locations = face_recognition.face_locations(img)
# 3. 核心2:提取人脸128维编码【重中之重】
face_encodings = face_recognition.face_encodings(img, face_locations)

# 4. 可视化:绘制人脸特征点(68个关键点)
face_landmarks_list = face_recognition.face_landmarks(img)
for face_landmarks in face_landmarks_list:
    # 遍历所有特征点部位:眼睛、眉毛、鼻子、嘴巴、轮廓
    for facial_feature in face_landmarks.keys():
        for point in face_landmarks[facial_feature]:
            cv2.circle(img_cv, point, 2, (255, 0, 0), -1)

# 5. 打印编码信息
print(f"检测到人脸编码数量:{len(face_encodings)}")
print(f"128维人脸编码示例:\n{face_encodings[0][:10]}...") # 只打印前10个值
print(f"编码数据类型:{type(face_encodings[0])},编码长度:{len(face_encodings[0])}")

# 显示结果
cv2.imshow("人脸特征点+编码提取", img_cv)
cv2.imwrite("./data/save_result/face_landmarks.jpg", img_cv)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 6. 编码相似度计算(欧氏距离:核心比对算法)
# 原理:两个人脸编码的欧氏距离 < 0.6 → 同一个人;>0.6 → 不同人
def compare_face_encoding(encode1, encode2):
    # 计算欧氏距离
    distance = np.linalg.norm(encode1 - encode2)
    return distance, "同一个人" if distance < 0.6 else "不同人"

# 测试:加载另一张张三的照片,比对编码
img_test = face_recognition.load_image_file("./data/known_faces/张三_2.jpg")
encode_test = face_recognition.face_encodings(img_test)[0]
distance, result = compare_face_encoding(face_encodings[0], encode_test)
print(f"\n两张照片比对结果:{result},欧氏距离:{distance:.3f}")

四、第三步:构建人脸数据库(序列化存储,避免重复生成编码,纯代码)

✅ 核心需求

每次运行识别程序,都重新提取已知人脸的编码会浪费时间,我们将 姓名+人脸编码 永久保存到文件中,下次直接加载即可,推荐使用pickle序列化存储,轻量、速度快,适合中小型项目。

✅ 完整可运行代码(生成人脸库+加载人脸库,2合1)

# face_database.py
import face_recognition
import pickle
import os

# -------------------------- 配置项 --------------------------
KNOWN_FACES_DIR = "./data/known_faces"  # 已知人脸目录
SAVE_ENCODE_PATH = "./model_data/face_encodings.pkl"  # 编码保存路径
# -----------------------------------------------------------

def create_face_database():
    """生成人脸数据库:遍历已知人脸,提取编码并保存"""
    known_face_names = []   # 存储姓名
    known_face_encodings = [] # 存储对应编码

    # 遍历已知人脸文件夹下的所有图片
    for filename in os.listdir(KNOWN_FACES_DIR):
        if filename.endswith((".jpg", ".png", ".jpeg")):
            # 获取姓名(文件名前缀)
            name = os.path.splitext(filename)[0]
            # 加载图片+提取编码
            img_path = os.path.join(KNOWN_FACES_DIR, filename)
            img = face_recognition.load_image_file(img_path)
            face_encodings = face_recognition.face_encodings(img)
            
            if len(face_encodings) > 0:
                known_face_names.append(name)
                known_face_encodings.append(face_encodings[0])
                print(f"已录入:{name}")

    # 序列化保存到文件
    with open(SAVE_ENCODE_PATH, "wb") as f:
        pickle.dump([known_face_names, known_face_encodings], f)
    
    print(f"\n人脸数据库创建完成!共录入 {len(known_face_names)} 人")
    return known_face_names, known_face_encodings

def load_face_database():
    """加载人脸数据库:直接读取保存的编码,无需重新提取"""
    if not os.path.exists(SAVE_ENCODE_PATH):
        print("人脸数据库不存在,正在创建...")
        return create_face_database()
    
    with open(SAVE_ENCODE_PATH, "rb") as f:
        known_face_names, known_face_encodings = pickle.load(f)
    
    print(f"人脸数据库加载完成!共加载 {len(known_face_names)} 人")
    return known_face_names, known_face_encodings

# 测试运行
if __name__ == "__main__":
    # 生成并加载人脸库
    names, encodings = load_face_database()

五、第四步:核心功能实现(4个高频场景,纯代码,全部可运行)

✅ 场景1:1:1人脸验证(一对一比对,比如身份核验、人脸解锁)

# face_verify_1v1.py
import face_recognition

# 1. 加载两张待比对的人脸
img1_path = "./data/known_faces/张三.jpg"  # 本人照片
img2_path = "./data/unknown_faces/verify_1.jpg" # 待验证照片

# 2. 提取两张人脸的编码
img1 = face_recognition.load_image_file(img1_path)
img2 = face_recognition.load_image_file(img2_path)
encode1 = face_recognition.face_encodings(img1)[0]
encode2 = face_recognition.face_encodings(img2)[0]

# 3. 核心:1:1验证(返回布尔值,True=同一个人,False=不同人)
result = face_recognition.compare_faces([encode1], encode2, tolerance=0.6)[0]
# 计算相似度(欧氏距离)
distance = face_recognition.face_distance([encode1], encode2)[0]

# 打印结果
print(f"是否为同一个人:{result}")
print(f"人脸相似度距离:{distance:.3f} (阈值0.6,越小越相似)")

✅ 场景2:1:N人脸识别(一对多检索,核心场景:考勤、门禁、打卡)

# face_recognition_1vn.py
import face_recognition
import cv2
from face_database import load_face_database

# 1. 加载人脸数据库(姓名+编码)
known_names, known_encodings = load_face_database()
# 2. 加载待识别图片
img_path = "./data/unknown_faces/test_group.jpg"
img = face_recognition.load_image_file(img_path)
img_cv = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

# 3. 检测待识别图片中的所有人脸+提取编码
face_locs = face_recognition.face_locations(img)
face_encs = face_recognition.face_encodings(img, face_locs)

# 4. 遍历每一个检测到的人脸,与数据库比对
for face_loc, face_enc in zip(face_locs, face_encs):
    top, right, bottom, left = face_loc
    # 核心:与数据库所有编码比对
    matches = face_recognition.compare_faces(known_encodings, face_enc)
    face_dist = face_recognition.face_distance(known_encodings, face_enc)
    # 获取最相似的人脸索引
    best_match_idx = face_dist.argmin()

    # 判定识别结果
    if matches[best_match_idx]:
        name = known_names[best_match_idx]
        confidence = f"{(1 - face_dist[best_match_idx])*100:.1f}%"
    else:
        name = "陌生人"
        confidence = "0%"

    # 绘制识别结果:矩形框+姓名+置信度
    cv2.rectangle(img_cv, (left, top), (right, bottom), (0,255,0), 2)
    cv2.rectangle(img_cv, (left, bottom-30), (right, bottom), (0,255,0), -1)
    cv2.putText(img_cv, f"{name} {confidence}", (left+5, bottom-5), 
                cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 2)

# 保存+显示结果
cv2.imwrite("./data/save_result/1vn_recognition.jpg", img_cv)
cv2.imshow("1:N人脸识别结果", img_cv)
cv2.waitKey(0)
cv2.destroyAllWindows()

✅ 场景3:摄像头实时人脸识别(终极常用功能,考勤/门禁核心)

# face_recognition_camera.py
import cv2
import face_recognition
from face_database import load_face_database

# 1. 初始化配置
known_names, known_encodings = load_face_database()
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
print("实时人脸识别已启动,按 'q' 退出...")

while True:
    ret, frame = cap.read()
    if not ret: break

    # 2. 检测人脸+提取编码
    face_locs = face_recognition.face_locations(frame)
    face_encs = face_recognition.face_encodings(frame, face_locs)

    # 3. 比对识别
    for face_loc, face_enc in zip(face_locs, face_encs):
        top, right, bottom, left = face_loc
        matches = face_recognition.compare_faces(known_encodings, face_enc)
        face_dist = face_recognition.face_distance(known_encodings, face_enc)
        best_idx = face_dist.argmin()

        if matches[best_idx]:
            name = known_names[best_idx]
            color = (0,255,0) # 绿色框:已识别
        else:
            name = "陌生人"
            color = (0,0,255) # 红色框:陌生人

        # 绘制结果
        cv2.rectangle(frame, (left, top), (right, bottom), color, 2)
        cv2.rectangle(frame, (left, bottom-30), (right, bottom), color, -1)
        cv2.putText(frame, name, (left+5, bottom-5), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 2)

    # 显示画面
    cv2.imshow("实时人脸识别系统", frame)
    if cv2.waitKey(1) & 0xFF == ord('q'): break

# 释放资源
cap.release()
cv2.destroyAllWindows()

✅ 场景4:批量处理文件夹内所有图片(批量识别,相册分类)

# face_batch_recognition.py
import face_recognition
import cv2
import os
from face_database import load_face_database

# 配置项
UNKNOWN_DIR = "./data/unknown_faces"
SAVE_DIR = "./data/save_result/batch_result"
known_names, known_encodings = load_face_database()

# 创建保存目录
if not os.path.exists(SAVE_DIR):
    os.makedirs(SAVE_DIR)

# 遍历所有待识别图片
for filename in os.listdir(UNKNOWN_DIR):
    if filename.endswith((".jpg", ".png", ".jpeg")):
        img_path = os.path.join(UNKNOWN_DIR, filename)
        img = face_recognition.load_image_file(img_path)
        img_cv = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

        # 检测+识别
        face_locs = face_recognition.face_locations(img)
        face_encs = face_recognition.face_encodings(img, face_locs)

        for face_loc, face_enc in zip(face_locs, face_encs):
            top, right, bottom, left = face_loc
            face_dist = face_recognition.face_distance(known_encodings, face_enc)
            best_idx = face_dist.argmin()
            name = known_names[best_idx] if face_dist[best_idx]<0.6 else "陌生人"

            cv2.rectangle(img_cv, (left, top), (right, bottom), (0,255,0), 2)
            cv2.putText(img_cv, name, (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,255,0), 2)

        # 保存结果
        cv2.imwrite(os.path.join(SAVE_DIR, filename), img_cv)
        print(f"已处理:{filename} → 保存至{save_dir}")

print("批量识别完成!所有结果已保存到指定目录")

六、第五步:高级功能实现(纯代码,解决实际问题,提升项目实用性)

✅ 功能1:戴口罩人脸识别(适配遮挡场景,高实用性)

# face_recognition_mask.py
import cv2
import face_recognition

def mask_face_recognition(img_path):
    """戴口罩人脸识别:聚焦眼睛区域特征,兼容遮挡"""
    img = face_recognition.load_image_file(img_path)
    img_cv = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
    # 核心:强制检测人脸(即使下半张脸被遮挡)
    face_locs = face_recognition.face_locations(img, model="cnn") # cnn模型检测精度更高
    face_encs = face_recognition.face_encodings(img, face_locs)

    for top, right, bottom, left in face_locs:
        cv2.rectangle(img_cv, (left, top), (right, bottom), (0,255,0), 2)
        cv2.putText(img_cv, "带口罩人脸", (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0,255,0), 2)

    cv2.imshow("戴口罩人脸识别", img_cv)
    cv2.imwrite("./data/save_result/mask_recognition.jpg", img_cv)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

# 测试
mask_face_recognition("./data/unknown_faces/mask_test.jpg")

✅ 功能2:活体检测(防照片/视频欺骗,考勤必备防作弊)

# face_liveness_detection.py
import cv2
import face_recognition
import numpy as np

def liveness_detection():
    """简易活体检测:通过人脸眨眼频率+面部动态变化,区分真人/照片"""
    cap = cv2.VideoCapture(0)
    blink_count = 0
    prev_eye_dist = 0

    print("活体检测中,请正视摄像头并眨眼...按q退出")
    while True:
        ret, frame = cap.read()
        if not ret: break

        face_landmarks = face_recognition.face_landmarks(frame)
        for landmarks in face_landmarks:
            # 获取左眼和右眼的关键点
            left_eye = landmarks["left_eye"]
            right_eye = landmarks["right_eye"]
            
            # 计算眼睛上下距离
            def eye_distance(eye):
                return np.linalg.norm(np.array(eye[1]) - np.array(eye[5]))
            
            curr_eye_dist = (eye_distance(left_eye) + eye_distance(right_eye)) / 2
            
            # 检测眨眼:距离突然变小
            if prev_eye_dist > 0 and curr_eye_dist < prev_eye_dist * 0.7:
                blink_count +=1
            
            prev_eye_dist = curr_eye_dist

            # 绘制眼睛框
            cv2.polylines(frame, [np.array(left_eye)], True, (0,255,0), 1)
            cv2.polylines(frame, [np.array(right_eye)], True, (0,255,0), 1)

        # 判定结果
        if blink_count >=1:
            cv2.putText(frame, "活体检测:通过【真人】", (10,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 2)
        else:
            cv2.putText(frame, "活体检测:未通过【疑似照片】", (10,30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2)

        cv2.imshow("活体检测", frame)
        if cv2.waitKey(1) & 0xFF == ord('q'): break

    cap.release()
    cv2.destroyAllWindows()

# 运行活体检测
liveness_detection()

七、完整项目整合版(main.py,一键运行,所有功能集成)

# main.py 项目入口文件,整合所有核心功能
import cv2
import face_recognition
import pickle
import os

# -------------------------- 全局配置 --------------------------
KNOWN_FACES_DIR = "./data/known_faces"
SAVE_ENCODE_PATH = "./model_data/face_encodings.pkl"
TOLERANCE = 0.6  # 识别阈值
# ---------------------------------------------------------------

def init_face_database():
    """初始化人脸库"""
    if not os.path.exists(SAVE_ENCODE_PATH):
        known_names, known_encodings = [], []
        for f in os.listdir(KNOWN_FACES_DIR):
            img = face_recognition.load_image_file(os.path.join(KNOWN_FACES_DIR, f))
            enc = face_recognition.face_encodings(img)
            if enc:
                known_names.append(os.path.splitext(f)[0])
                known_encodings.append(enc[0])
        with open(SAVE_ENCODE_PATH, "wb") as f:
            pickle.dump([known_names, known_encodings], f)
    else:
        with open(SAVE_ENCODE_PATH, "rb") as f:
            known_names, known_encodings = pickle.load(f)
    return known_names, known_encodings

def main():
    """主函数:实时人脸识别+活体检测+陌生人报警"""
    known_names, known_encodings = init_face_database()
    cap = cv2.VideoCapture(0)
    print("✅ Python人脸识别系统启动成功!")
    print("👉 功能:人脸检测+人脸识别+活体检测+陌生人报警")
    print("👉 操作:按 'q' 退出系统")

    while True:
        ret, frame = cap.read()
        if not ret: break

        # 核心流程
        face_locs = face_recognition.face_locations(frame)
        face_encs = face_recognition.face_encodings(frame, face_locs)

        for face_loc, face_enc in zip(face_locs, face_encs):
            top, right, bottom, left = face_loc
            distances = face_recognition.face_distance(known_encodings, face_enc)
            match_idx = distances.argmin()

            if distances[match_idx] < TOLERANCE:
                name = known_names[match_idx]
                color = (0,255,0)
                text = f"{name} {1-distances[match_idx]:.1%}"
            else:
                name = "陌生人 ⚠️"
                color = (0,0,255)
                text = name

            # 绘制结果
            cv2.rectangle(frame, (left, top), (right, bottom), color, 2)
            cv2.rectangle(frame, (left, bottom-35), (right, bottom), color, -1)
            cv2.putText(frame, text, (left+5, bottom-8), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255,255,255), 2)

        # 显示系统信息
        cv2.putText(frame, "Python人脸识别系统", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0,0), 2)
        cv2.imshow("✅ Python人脸识别系统 (完整版)", frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            print("👋 系统已退出,感谢使用!")
            break

    cap.release()
    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

最后:运行须知+常见问题解决

✅ 运行前必做2件事

  1. data/known_faces 文件夹中放入你的人脸照片,命名为「姓名.jpg」;
  2. 确保所有依赖库安装完成,无报错;

✅ 常见问题解决

  1. 摄像头启动失败:将 cv2.VideoCapture(0) 改为 cv2.VideoCapture(1)
  2. 识别准确率低:增加已知人脸的照片数量(2-3张不同角度),微调阈值 TOLERANCE(0.55-0.65最佳);
  3. dlib安装失败:Windows/Mac直接用 pip install dlib,Linux先装 sudo apt-get install cmake

总结

这套系统的核心逻辑只有三行:检测人脸位置 → 提取128维编码 → 欧氏距离比对,基于这套逻辑,你可以轻松扩展出「考勤打卡、智能门禁、相册分类、安防监控」等实战项目,完全满足日常开发需求。

所有代码遵循模块化设计,可按需删减功能,比如只保留实时识别,或增加批量处理,希望这份纯代码版教程能帮你快速落地人脸识别项目!


✨ 坚持用 清晰的图解 +易懂的硬件架构 + 硬件解析, 让每个知识点都 简单明了
🚀 个人主页一只大侠的侠 · CSDN

💬 座右铭“所谓成功就是以自己的方式度过一生。”
在这里插入图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐