التعرف على الوجه البسيط على الطاير في جانغو

يوم جيد!

اسمي أندري سوبوليف واليوم سنقوم بإنشاء "كعكة" بسيطة لجانغو ، والتي ستتحقق من أن وجه الشخص موجود في الصورة (وهو أمر مفيد في كثير من المواقف).

للقيام بذلك ، نحتاج إلى OpenCV و 5 دقائق من وقت الفراغ. اذهب.

التركيب


أولاً ، قم بتثبيت المكتبات الضرورية في حاوية عامل الميناء:

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/
* * *

وأضف التبعيات إلى.txt.:

opencv-python
matplotlib
numpy

وظيفة كشف الوجه


قم بإنشاء ملف utils.py (على سبيل المثال ، في المجلد الرئيسي ، يمكنك الحصول على أي مجلد آخر) وإضافة الأسطر التالية هناك:

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

الاندماج في نموذج إدخال المستخدم


استيراد وظيفتنا:

from main.utils import detect_face 

و "تحقق من الوجه" عند تسجيل مستخدم جديد.

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"))

مثال بدون إطار


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)

هذا كل شئ.

كما ترى ، كل شيء بسيط للغاية (إذا كنت بحاجة إلى فحص بسيط بالطبع).

روابط مفيدة


directiondatascience.com/face-detection-in-2-minutes-using-opencv-python-90f89d7c0f81
new-friend.org/ru/195/2800/12918/profile-registration (مثال لكيفية عمل هذا الحل).

All Articles