django配合face_recognition进行人脸识别

本文介绍如何使用Django框架和face_recognition库实现面部识别功能,包括内网穿透配置、前端界面设计、后端视图处理及识别算法应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里我是用了frp进行内网穿透的
face_recognition_pypi
在安装face_recognition的时候,需要安装dlib,Ubuntu可以参考我另一篇文章
由于再使用face_recognition的时候要编译C++,服务器再编译C++的时候,内存不够或者是配置不够,导致一直编译失败。
所以使用frp对服务器开放一个端口映射到本地电脑
穿透方法

  1. 在frp下载对应电脑版本的frp.如果服务器和本地电脑系统不一样也是可以的.
  2. 解压下回来的文件,把frpcfrpc.ini文件留在本地电脑,frpsfrps.ini放在服务器上面。
    配置文件就根据frp文档设置.

要先确保本地的face_recognition能用
django下的设置
前端的代码:
页面很简陋

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="{% url 'image_upload' %}" method="post" enctype="multipart/form-data" >
   {% csrf_token %}
   上传:
    <input type="file" name="picture1">
    <input type="submit" value="上传">

  </form>
<form action="{% url 'image_upload2' %}" method="post" enctype="multipart/form-data" >
   {% csrf_token %}
   上传:
    <input type="file" name="picture2">
    <input type="submit" value="上传">

  </form>

                        <br>
    <a href="{% url 'face_test' %}"><button>识别</button>
{#                    <button onclick={% url 'face_test' %}>识别</button>#}
    </a>
                    <h1>返回值:{{ info }}</h1>

</body>
</html>

django一些基础的设置,就不列出来了

forms.py
class UploadImageForm(forms.ModelForm):

    class Meta:
        model = UserProfile
        fields = ['image', ]

view.py 代码

大概的意思就是,先保存用全局变量保存两张图片,然后调用识别函数的时候,再进行识别

from io import BytesIO
from PIL import Image
import numpy as np

class UploadImageView(View):

    def post(self, request):
        # data = request.FILES.get('image', None)

        name1 = request.FILES.get('picture1')
        name1 = str(name1)


        img_bytes = request.FILES.get('picture1').read()
        im = Image.open(BytesIO(img_bytes))
        im.convert('RGB')
        global picture1
        picture1 = np.array(im)


        image_form = UploadImageForm(
            request.POST, request.FILES, instance=request.user)
        if image_form.is_valid():
            image_form.save()
            # # 取出cleaned data中的值,一个dict
            # image = image_form.cleaned_data['image']
            # request.user.image = image
            # request.user.save()
            return render(request, 'test.html', {'info': '已上传'+name1})
        else:
            return HttpResponse(
                '{"status":"fail"}',
                content_type='application/json')


class UploadImageView2(View):
    # login_url = '/login/'
    # redirect_field_name = 'next'

    def post(self, request):
        name2 = request.FILES.get('picture2')
        name2 = str(name2)
        img_bytes = request.FILES.get('picture2').read()
        # print(name)
        # convert_img_raw_data = base64.b64decode(img_b64_string)
        im = Image.open(BytesIO(img_bytes))
        im.convert('RGB')
        global picture2
        picture2 = np.array(im)
        # 这时候用户上传的文件就已经被保存到imageform了 ,为modelform添加instance值直接保存
        image_form = UploadImageForm2(
            request.POST, request.FILES, instance=request.user)
        if image_form.is_valid():
            image_form.save()
            # # 取出cleaned data中的值,一个dict
            # image = image_form.cleaned_data['image']
            # request.user.image = image
            # request.user.save()
            return render(request, 'test.html', {'info': '已上传'+name2 })
        else:
            return HttpResponse(
                '{"status":"fail"}',
                content_type='application/json')


def face_test(request):
    # -*- coding:utf-8 -*-
    # Author: cmzz
    # @Time :19-2-21
    import face_recognition

    # f = open(1, 'rb')
    # photo1 = f.read()
    # f2 = open(2, 'rb')
    # photo2 = f2.read()

    # picture_of_me = face_recognition.load_image_file("")
    my_face_encoding = face_recognition.face_encodings(picture1)[0]
    # my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]

    # my_face_encoding now contains a universal 'encoding' of my facial features that can be compared to any other picture of a face!

    # unknown_picture = face_recognition.load_image_file("")
    unknown_face_encoding = face_recognition.face_encodings(picture2)[0]

    # Now we can see the two face encodings are of the same person with `compare_faces`!

    results = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding)
    if results[0] == True:

        result= "是同一个人"
    else:
        result = "不是同一个人"
    # f.close()
    # f2.close()
    return render(request, 'test.html', {'info': result})

识别如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总体来说识别率还是挺高的,识别速度也还可以.大概就是1秒左右,face_recognition不单单只有这个功能,还有其他功能,有需要的可以在文章开头上面找到face_recognition的链接进行学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值