一、项目简介
1. 项目背景
活体人脸检测(Liveness Detection)是一种用于防止人脸识别系统被照片或视频攻击的重要技术。通过深度学习模型,尤其是YOLO(You Only Look Once)模型,可以高效、准确地识别真人与非真人的面部图像,从而提高人脸识别系统的安全性和可靠性。
2. 项目目标
- 构建一个能够检测活体人脸的系统
- 实现一个用户友好的UI界面
- 使用YOLOv8/v7/v6/v5模型进行检测
- 提供完整的训练数据集
二、环境准备
1. 硬件要求
- 一台带有GPU(建议使用NVIDIA)的计算机
2. 软件要求
- 操作系统:Windows, macOS, 或 Linux
- Python 3.8 及以上版本
- CUDA 10.2 及以上版本(如果使用GPU)
- cuDNN 7 及以上版本
3. 安装必要的软件和库
- 安装 Python 访问 Python 官方网站 下载并安装最新版本的 Python。
- 安装 pip(Python 包管理工具) 通常 Python 自带 pip。如果没有,可以通过以下命令安装:
sudoapt-getinstall python3-pip # Ubuntubrew install python # macOS
- 创建虚拟环境
python -m venv liveness_envsource liveness_env/bin/activate # Linux/macOSliveness_env\Scripts\activate # Windows
- 安装深度学习相关库
pip install torch torchvision torchaudio # 如果使用PyTorchpip install tensorflow # 如果使用TensorFlowpip install opencv-pythonpip install matplotlibpip install numpypip install Flask # 用于创建UI
三、数据集准备
1. 收集和标注数据
- 从公开数据集或自己采集真人与非真人的面部图像
- 使用LabelImg或其他标注工具进行标注,生成YOLO格式的标注文件(*.txt)
2. 数据集结构
dataset/
│
├── images/
│ ├── train/
│ ├── val/
│
└── labels/
├── train/
├── val/
3. 数据增强(可选)
使用 albumentations 库进行数据增强:
import albumentations as A
from albumentations.pytorch import ToTensorV2
import cv2
transform = A.Compose([
A.HorizontalFlip(p=0.5),
A.RandomBrightnessContrast(p=0.2),
A.Rotate(limit=15),
ToTensorV2()])
image = cv2.imread('path_to_image')
transformed = transform(image=image)
transformed_image = transformed["image"]
四、训练模型
1. 下载 YOLOv5 仓库并安装依赖
git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install-r requirements.txt
2. 配置训练参数
修改
data.yaml
文件以适配你的数据集:
train: ../dataset/images/train
val: ../dataset/images/val
nc:2# 类别数量(活体与非活体)names:['live','spoof']# 类别名称
3. 开始训练
python train.py --img640--batch16--epochs50--data data.yaml --weights yolov5s.pt --cache
五、模型测试
1. 测试单张图片
from yolov5.models.common import DetectMultiBackend
from yolov5.utils.datasets import LoadImages
from yolov5.utils.general import non_max_suppression, scale_coords
from yolov5.utils.plots import plot_one_box
import torch
model = DetectMultiBackend(weights='best.pt')
stride, names, pt, jit, onnx, engine = model.stride, model.names, model.pt, model.jit, model.onnx, model.engine
device = torch.device('cuda'if torch.cuda.is_available()else'cpu')
dataset = LoadImages('path_to_image')for path, img, im0s, vid_cap, s in dataset:
img = torch.from_numpy(img).to(device)
img = img.float()
img /=255.0if img.ndimension()==3:
img = img.unsqueeze(0)
pred = model(img)
pred = non_max_suppression(pred,0.25,0.45, classes=None, agnostic=False)for i, det inenumerate(pred):iflen(det):
det[:,:4]= scale_coords(img.shape[2:], det[:,:4], im0s.shape).round()for*xyxy, conf, cls inreversed(det):
label =f'{names[int(cls)]}{conf:.2f}'
plot_one_box(xyxy, im0s, label=label, color=(255,0,0), line_thickness=2)
cv2.imshow('result', im0s)
cv2.waitKey(0)
六、UI界面设计
1. 使用 Flask 创建基本界面
from flask import Flask, request, render_template
import os
app = Flask(__name__)
UPLOAD_FOLDER ='uploads'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
app.config['UPLOAD_FOLDER']= UPLOAD_FOLDER
@app.route('/')defindex():return render_template('index.html')@app.route('/upload', methods=['POST'])defupload_file():if'file'notin request.files:return'No file part'file= request.files['file']iffile.filename =='':return'No selected file'iffile:
file_path = os.path.join(app.config['UPLOAD_FOLDER'],file.filename)file.save(file_path)# 调用检测函数并返回结果
result = detect_liveness(file_path)return result
defdetect_liveness(image_path):# 在这里调用训练好的YOLO模型进行检测passif __name__ =='__main__':
app.run(debug=True)
2. 创建
index.html
文件
<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>活体人脸检测系统</title></head><body><h1>活体人脸检测系统</h1><formaction="/upload"method="post"enctype="multipart/form-data"><inputtype="file"name="file"><inputtype="submit"value="上传并检测"></form></body></html>
七、部署
1. 在本地测试 Flask 应用
python app.py
访问
http://127.0.0.1:5000
查看效果。
2. 使用 Docker 部署
创建
Dockerfile
文件:
FROM python:3.8-slim
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
构建并运行 Docker 镜像:
docker build -t liveness-detection .docker run -p5000:5000 liveness-detection
八、声明
声明:本文只是简单的项目思路,如有部署的想法,想要(UI界面+YOLOv8/v7/v6/v5代码+训练数据集+视频教学)的可以联系作者.
版权归原作者 A等天晴 所有, 如有侵权,请联系我们删除。