Как загрузить изображение в папку и передать его путь к функции просмотра в django? - PullRequest
0 голосов
/ 20 января 2020

Я хочу загрузить файл изображения, используя тег входного файла из шаблона django. Затем я хочу сделать 2 вещи: 1) Сначала я хочу сохранить загруженное изображение в каталоге в моем проекте. Я хочу загрузить файл в каталог img в папке stati c в моем приложении, чтобы легко получить к нему доступ. 2) Во-вторых, я хочу отправить имя файла этого недавно сохраненного изображения в функцию просмотра под названием detect_im()

ШАБЛОН:

<form style="display:inline-block;">
      <input type="file" class="form-control-file">
      <input type="submit" value="Upload"=>
</form>

ПРОСМОТР ФУНКЦИИ в views.py

def detect_im(request):
    haar_file = 'C:\\Users\\Aayush\\ev_manage\\face_detector\\haarcascade_frontalface_default.xml'
    datasets = 'datasets\\'
    myid = random.randint(1111, 9999)

    path = "C:\\Users\\Aayush\\ev_manage\\face_detector\\" + datasets + str(myid)
    if not os.path.isdir(path):
        os.mkdir(path)

    (width, height) = (130, 100)
    face_cascade = cv2.CascadeClassifier(haar_file)


    filename = ""  //I WANT THE STORED FILE NAME VALUE HERE TO COMPLETE THE PATH FOR FURTHER DETECTION PROCESS BY OPENCV.


    image_path = "C:\\Users\\Aayush\\ev_manage\\face_detector\\static\\img\\" + filename

    count = 1
    while count < 30:
        im = cv2.imread(image_path)
        gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, 1.3, 4)
        for (x, y, w, h) in faces:
            cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2)
            face = gray[y:y + h, x:x + w]
            face_resize = cv2.resize(face, (width, height))
            cv2.imwrite('% s/% s.png' % (path, count), face_resize)
        count += 1

        key = cv2.waitKey(10)
        if key == 27:
            break

    return render(request, 'add_dataset.html', {'uid': myid})

Последний поток должен быть таким: пользователь добавляет изображение и нажимает на кнопку загрузки, затем изображение загружается в каталог и вызывается функция detect_im () с именем файла и имя файла используется в переменной пути для opencv, чтобы определить лицо из него.

Спасибо за чтение. Пожалуйста, напишите ответ, по крайней мере, с некоторыми добавлениями кода, потому что я ладья ie в python.

1 Ответ

0 голосов
/ 20 января 2020

загрузить файл изображения с помощью тега входного файла из шаблона django и сохранить загруженное изображение в каталоге в моем проекте

Попробуйте использовать подушку:

Сначала установите пакет

pip3 install Pillow

Затем создайте поле и функцию

в ваших models.py:

# models.py 
import os

from django.db import models
from django.utils.timezone import now as timezone_now
from django.utils.translation import ugettext_lazy as _


def upload_to(instance, filename):
    now = timezone_now()
    base, ext = os.path.splitext(filename)
    ext = ext.lower()
    return f"(your_dir)/{now:%Y/%m/%Y%m%d%H%M%S}{ext}"
    # Do add the date as it prevents the same file name from occuring twice
    # the ext is reserved for the file type and don't remove it


class MyExampleClass(models.Model):
    ...
    picture = models.ImageField(_("Picture"), upload_to=upload_to, blank=True, null=True)

Затем создайте форму для загрузите изображение:

# forms.py 
from django import forms


class MyExampleForm(forms.ModelForm):
    class Meta:
        model = MyExampleClass
        fields = ["picture"]

Не забудьте отобразить его в виде и вашем URL:

# views.py 
from django.shortcuts import render, redirect

from .forms import MyExampleForm


def add_image(request):
    form = MyExampleForm()
    if request.method == "POST":
        form = MyExampleForm(data=request.POST, files=request.FILES)
    if form.is_valid():
        form.save()
        return redirect("")
    else:
        return render(request, "myexamplehtml.html", {"form": form})

# quotes/urls.py
from django.urls import path

from .views import MyExampleView

urlpatterns = [
    path('foobar/', add_image, name='myexampleview'),
]

Наконец, добавьте его в файл HTML:

{% block content %}
    <form method="post" action="your_url" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">submit</button>
    </form>
{% endblock %}

Что касается второй части, я думаю, что вы можете получить доступ к переменной вашего пользователя следующим образом:

MyExampleModel._meta.get_field('picture')

и затем поместить этот код туда, где вы хотите, чтобы он функционировал

Надеюсь, что это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...