基于 face_recognition
与 Django 的人脸识别服务案例
人脸识别技术近年来发展迅速,广泛应用于安防、社交媒体、身份验证等场景。本文将介绍如何结合 face_recognition
库和 Django 框架,搭建一个简单的人脸识别服务。在这个案例中,我们将实现一个用户上传图片并进行人脸识别的功能。
环境准备
首先,确保你已经安装了必要的库。可以使用以下命令安装 Django
和 face_recognition
:
pip install Django face_recognition
同时,你需要安装 dlib
库(face_recognition
的依赖),在 Windows 系统下可能需要先安装 CMake 和 Visual Studio,具体请参考 dlib 的官方文档,可以直接有下面的命令进行安装:
pip install dlib
创建 Django 项目和应用
在命令行中,使用以下命令创建一个新的 Django 项目:
django-admin startproject face_recognition_project
cd face_recognition_project
django-admin startapp face_recognition_app
然后在 face_recognition_project/settings.py
中注册新创建的应用:
INSTALLED_APPS = [
...
'face_recognition_app',
]
创建模型
我们需要一个模型来存储用户上传的人脸信息。在 face_recognition_app/models.py
中定义如下模型:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=100)
image = models.ImageField(upload_to='people/')
def __str__(self):
return self.name
记得在项目中添加文件上传的媒体配置,在 settings.py
中加入以下代码:
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
然后在你项目的主 URL 配置 face_recognition_project/urls.py
中添加媒体文件支持:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
创建表单
在 face_recognition_app/forms.py
创建一个表单,用于上传图片:
from django import forms
from .models import Person
class PersonForm(forms.ModelForm):
class Meta:
model = Person
fields = ['name', 'image']
创建视图
在 face_recognition_app/views.py
中,我们将实现一个视图来处理文件上传和人脸识别:
import face_recognition
import numpy as np
from django.shortcuts import render, redirect
from .forms import PersonForm
from .models import Person
def upload_image(request):
if request.method == 'POST':
form = PersonForm(request.POST, request.FILES)
if form.is_valid():
person = form.save()
# 进行人脸识别处理
image_path = person.image.path
# 加载图像并提取人脸特征
image = face_recognition.load_image_file(image_path)
face_encodings = face_recognition.face_encodings(image)
if face_encodings:
# 你可以在这里保存特征到数据库或者进行匹配
print("人脸特征已提取")
return redirect('success')
else:
form = PersonForm()
return render(request, 'upload.html', {'form': form})
创建模板
在 face_recognition_app/templates/upload.html
中创建一个简单的表单:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>人脸识别上传</title>
</head>
<body>
<h1>上传人脸图片</h1>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">上传</button>
</form>
</body>
</html>
配置 URL
在 face_recognition_app/urls.py
中配置 URL:
from django.urls import path
from .views import upload_image
urlpatterns = [
path('upload/', upload_image, name='upload_image'),
]
然后在项目的主 URL 配置 face_recognition_project/urls.py
中包含该应用的 URL:
from django.urls import include, path
urlpatterns += [
path('', include('face_recognition_app.urls')),
]
启动服务器
最后,运行 Django 服务器,进行测试:
python manage.py migrate
python manage.py runserver
通过浏览器访问 http://127.0.0.1:8000/upload/
,你可以上传人脸图片并进行识别。
总结
本文介绍了如何使用 Django 和 face_recognition
库构建简单的人脸识别服务。通过上传人脸图片,我们可以提取人脸特征以供后续分析。可以根据需求对系统进行扩展,例如将人脸特征存储到数据库进行比对、设置用户管理系统等。希望本案例对你有所帮助!