Простое распознавание лица «на лету» в Django

от автора

Доброго дня!

Меня зовут Соболев Андрей и сегодня мы с вами создадим простую «плюшку» к Django, которая будет проверять, что на фотографии именно лицо человека (что бывает полезно в куче ситуаций).

Для этого нам понадобится 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/ * * * 

И добавим зависимости в requirements.txt

opencv-python matplotlib numpy 

detect_face

Создадим файл utils.py (к примеру в папке main) и добавим туда следующие строчки

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

На этом все.
Как видим, все довольно просто (если нужна простая проверка конечно).

Полезные ссылки

towardsdatascience.com/face-detection-in-2-minutes-using-opencv-python-90f89d7c0f81
new-friend.org/ru/195/2800/12918/profile-registration (пример работы данного решения)

ссылка на оригинал статьи https://habr.com/ru/post/504748/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *