Добрый день! Меня зовут Андрей Соболев, и сегодня мы создадим простую «булочку» для Django, которая будет проверять, что человек на фотографии — это лицо человека (что может пригодиться во многих ситуациях).
Для этого нам понадобится OpenCV и 5 минут свободного времени.
Идти.
Монтаж
Для начала установим необходимые библиотеки в докер-контейнер:И добавьте зависимости в файл require.txt: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/ * * *
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 #распознавание лиц
-
Можно Ли Протестировать Api Ногами?
19 Oct, 24 -
Популярно О 3D Графике. Часть 2. Игры И 3D
19 Oct, 24 -
Обзор Amazon Kindle Fire
19 Oct, 24 -
Подробности О Поддереве Git
19 Oct, 24 -
Русский World Of Warcraft Выйдет В 2008 Году
19 Oct, 24