Простое Распознавание Лиц На Лету В 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/ * * *

И добавьте зависимости в файл require.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)

Вот и все.

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



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

по направлениюdatascience.com/face-detection-in-2-minute-using-opencv-python-90f89d7c0f81 new-friend.org/ru/195/2800/12918/profile-registration (пример того, как работает это решение).

Теги: #python #django #OpenCV #Numpy #распознавание лиц

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.