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-90f89d7c0f81new-friend.org/ru/195/2800/12918/profile-registration (contoh cara kerja solusi ini).