Pengenalan wajah sederhana dengan cepat di Django

Selamat siang!

Nama saya Andrey Sobolev dan hari ini kami akan membuat "roti" sederhana untuk Django, yang akan memeriksa apakah wajah orang tersebut ada di foto (yang berguna dalam banyak situasi).

Untuk melakukan ini, kita perlu OpenCV dan 5 menit waktu luang. Pergilah.

Instalasi


Pertama, instal perpustakaan yang diperlukan dalam wadah buruh pelabuhan:

FROM python:3.8.3-buster

RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y \
    gcc && apt-get install -y \  
    libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev libjpeg-dev libfreetype6-dev python-dev libpq-dev python-dev libxml2-dev libxslt-dev postgresql-client git && \
    apt-get install -y libxrender1 libxext-dev fontconfig && \
    pip3 install -U pip setuptools 

COPY ./requirements.txt /home/
* * *

Dan tambahkan dependensi ke requirement.txt:

opencv-python
matplotlib
numpy

Fungsi pemeriksaan wajah detect_face


Buat file utils.py (misalnya, di folder utama, Anda dapat memiliki folder lain) dan tambahkan baris berikut:

import cv2 as cv
import numpy as np

def detect_face(in_memory_photo):
    face_cascade = cv.CascadeClassifier(cv.__path__[0] + "/data/haarcascade_frontalface_default.xml")
    in_memory_photo = in_memory_photo.read()
    nparr = np.fromstring(in_memory_photo, np.uint8)
    img = cv.imdecode(nparr, 4)
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    if len(faces) > 0:
        return True
    else:
        return False

Integrasi ke dalam formulir input pengguna


Impor fungsi kami:

from main.utils import detect_face 

Dan "periksa wajah" saat mendaftarkan pengguna baru.

if request.method == "POST":
    form = RegistrationForm(request.POST, request.FILES)

    if form.is_valid():

        try:
            in_memory_uploaded_file = request.FILES["photo"]
        except:
            in_memory_uploaded_file = None

        if not in_memory_uploaded_file or not detect_face(in_memory_uploaded_file):
            messages.add_message(request, messages.WARNING, _("You can only upload a face photo. Please try to uploading a different photo."))
            return HttpResponseRedirect(reverse("main:profile_registration"))

Contoh tanpa kerangka kerja


import os
import cv2 as cv
import numpy as np

def detect_face(in_memory_photo):
    face_cascade = cv.CascadeClassifier(cv.__path__[0] + "/data/haarcascade_frontalface_default.xml")
    in_memory_photo = in_memory_photo.read()
    nparr = np.fromstring(in_memory_photo, np.uint8)
    img = cv.imdecode(nparr, 4)
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    if len(faces) > 0:
        return True
    else:
        return False

with open(os.path.dirname(os.path.abspath(__file__)) + '/photo.jpg', 'rb') as in_memory_photo: 
    is_it_face = detect_face(in_memory_photo)
    print(is_it_face)

Itu saja.

Seperti yang Anda lihat, semuanya cukup sederhana (jika Anda memerlukan pemeriksaan sederhana tentunya).

tautan yang bermanfaat


menujudatascience.com/face-detection-in-2-minutes-using-opencv-python-90f89d7c0f81
new-friend.org/ru/195/2800/12918/profile-registration (contoh cara kerja solusi ini).

All Articles