Что такое django?

Django - это веб-фреймворк на Python, который пользуется большой популярностью в сообществе Python из-за большого количества входящих в него функций. Это позволяет быстро разрабатывать приложение.

Для классификации изображений мы будем использовать предварительно обученную модель VGG-16 с весами ImageNet.

Требования:

Керас

джанго

Приступим к созданию проекта

Создание проекта:

Чтобы начать работу с проектом django, нам нужно выполнить некоторые начальные настройки. Django предоставляет несколько инструментов командной строки, которые помогут вам начать свой проект. Перейдите в предпочитаемый каталог, в котором вы хотите создать свой проект. Откройте терминал для пользователей Linux и cmd для пользователей Windows и введите следующую команду

django-admin startproject classify

Эта команда создаст «классифицирующий» репозиторий, содержащий следующие файлы

Это следующие файлы:

Внешний каталог classify / root является контейнером для вашего проекта. Его имя не имеет значения для Django; вы можете переименовать его как угодно.

manage.py: утилита командной строки, которая позволяет вам различными способами взаимодействовать с этим проектом Django.

Внутренний каталог classify / - это фактический пакет Python для вашего проекта. Его имя - это имя пакета Python, которое вам нужно будет использовать для импорта чего-либо внутри него (например, classify.urls).

classify / __ init__.py: пустой файл, который сообщает Python, что этот каталог следует рассматривать как пакет Python. Если вы новичок в Python, узнайте больше о пакетах в официальных документах Python.

classify / settings.py: Настройки / конфигурация для этого проекта Django. Настройки Django расскажут вам все о том, как работают настройки.

classify / urls.py: объявления URL для этого проекта Django; «оглавление» вашего сайта на Django.

classify / asgi.py: точка входа для ASGI-совместимых веб-серверов для обслуживания вашего проекта.

classify / wsgi.py: точка входа для WSGI-совместимых веб-серверов для обслуживания вашего проекта.

Начнем кодирование Во-первых, загрузим нашу модель.

Откройте файл settings.py из проекта classify и вставьте приведенный ниже код.

import keras
import numpy as np
from keras import backend as K
import tensorflow as tf
from tensorflow.python.keras.backend import set_session
from keras.applications import vgg16


def get_session():
    config = tf.ConfigProto()
    config.gpu_options.allow_growth = True
    return tf.Session(config=config)

K.tensorflow_backend.set_session(get_session())

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
SESS = tf.Session(config=config)
print("model loading")
GRAPH1 = tf.get_default_graph()

set_session(SESS)
# Load the VGG model
VGG_MODEL = vgg16.VGG16(weights="imagenet")

Этот код загрузит вашу модель при запуске проекта, так что каждый раз, когда вам нужно прогнозировать, вам не нужно загружать модели . Помните, что в этом коде мы будем использовать переменную VGG-16, SESS, GRAPH1 в views.py файл в ближайшее время.

Вставьте приведенный ниже код в конец файла settings.py.

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')


MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = 'media/'

Этот код создаст медиафайл, в котором будет сохранено загруженное изображение.

Теперь давайте создадим файл views.py внутри внутреннего каталога classify для доступа к модели и классификации изображения . Вот как должна выглядеть структура вашей папки на этом этапе.

Давайте отредактируем файл views.py. Вставьте следующий код

from django.shortcuts import render
from django.http import JsonResponse
import base64
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
from django.conf import settings 
from tensorflow.python.keras.backend import set_session
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.applications.imagenet_utils import decode_predictions
import matplotlib.pyplot as plt
import numpy as np
from keras.applications import vgg16
import datetime
import traceback

def index(request):
    if  request.method == "POST":
        f=request.FILES['sentFile'] # here you get the files needed
        response = {}
        file_name = "pic.jpg"
        file_name_2 = default_storage.save(file_name, f)
        file_url = default_storage.url(file_name_2)
        original = load_img(file_url, target_size=(224, 224))
        numpy_image = img_to_array(original)
        

        image_batch = np.expand_dims(numpy_image, axis=0)
        # prepare the image for the VGG model
        processed_image = vgg16.preprocess_input(image_batch.copy())
        
        # get the predicted probabilities for each class
        with settings.GRAPH1.as_default():
            set_session(settings.SESS)
            predictions=settings.VGG_MODEL.predict(processed_image)
       
        label = decode_predictions(predictions)
        label = list(label)[0]
        response['name'] = str(label)
        return render(request,'homepage.html',response)
    else:
        return render(request,'homepage.html')

Здесь функция индекса помогает классифицировать изображение и отправлять прогноз в файл homepage.html. Блок if проверяет, что изображение было загружено, и дает прогноз, в противном случае отображается простая форма.

Наконец, давайте создадим homepage.html в каталоге шаблонов . Создайте каталог шаблонов на том же уровне, что и файл manage.py.

Давайте превратим форму в файл homepage.html, чтобы получить изображение от пользователя.

<form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="sentFile" />
    <input type="submit" name="submit" value="Upload" />
</form>
{{name}}

Здесь форма помогает нам получить изображение от пользователя, где {{name}} - это визуализированный прогноз, отправленный файлом views.py.

Для маршрутизации всего этого мы должны изменить файл urls.py на следующий.

from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
    path('', views.index, name='homepage'),
    path('admin/', admin.site.urls),
]

Вот и все.

Проверить магию

Теперь давайте проверим, все ли вы сделали правильно, выполнив следующую команду в терминале или cmd.

python manage.py runserver

Вы должны получить следующий ответ.

Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

Откройте браузер и вставьте URL-адрес http://127.0.0.1:8000/, затем нажмите кнопку выбора файла, чтобы загрузить изображение, чтобы увидеть результаты, отображаемые на той же странице через несколько секунд. .

Результаты

Если вам понравился этот пост, ХИТ Купи мне кофе! Спасибо за чтение.

Каждый ваш небольшой вклад будет побуждать меня создавать больше подобного контента.