Подключите тензорную модель потока или любой проект Python с помощью flask без каких-либо вызовов API. Добавьте любой прототип машинного обучения и продемонстрируйте свои проекты. Разверните с помощью heroku.

Мотивация:

Поскольку многие студенты хотят реализовать свои проекты в колледже, например проект последнего года обучения, они мало знакомы с различными технологиями. Их основной мотив - производство, а не развертывание, поэтому большинство студентов уделяют минимум времени развертыванию.

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

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

Но вместо этого мы запускаем коды и пытаемся объяснить, что происходит, что может не понравиться вашему гиду. Итак, чтобы оно работало, я создал это руководство для работы с моделями машинного обучения без использования вызовов API и других сложных вещей.

Вы можете развернуть любой проект Python аналогичным образом вместо того, чтобы делать это с помощью tkinter или любой другой платформы.

У такого подхода есть некоторые недостатки:

Никаких вызовов api, следовательно, процесс не будет работать асинхронно. Программе может потребоваться время для завершения процесса, поскольку ее выполнение происходит синхронно.

Содержание:

1. Создайте веб-приложение Flask.

2. Загрузите и проверьте файл модели или используйте свой собственный

3. Создайте форму для ввода данных из веб-приложения Flask.

4. Передайте изображение модели.

5. Результаты прогнозов.

6. Развернуть

7. Поддерживайте

Ссылки на все промежуточные коды предоставляются на каждом шаге.

1. Создайте веб-приложение Flask.

Завершите данный учебник ниже или клонируйте репозиторий git прямо из учебника.



Вы получите готовую файловую структуру, которую и будете использовать. В приведенном выше руководстве мы назвали папку нашего проекта «flask_h5».

2. Загрузите и проверьте файл модели или используйте свой собственный файл модели.

Давайте найдем файл предварительно обученной модели для нашего проекта. Вы можете взять файл модели и код, который хотите использовать.

Мы берем предварительно обученный файл модели прогноза из imageAI.



Я скачал первый файл модели h5 для нашего проекта. Прочтите документацию imageAI, чтобы узнать об этом больше.

ссылка на модель resnet50_weights_tf_dim_ordering_tf_kernels.h5:

Https://github.com/OlafenwaMoses/ImageAI/releases/download/1.0/resnet50_weights_tf_dim_ordering_tf_kernels.h5

Пришло время протестировать нашу модель. Для этого мы создадим новый файл python в папке app, где мы хотим использовать нашу модель в будущем.

Вы можете создать его где угодно, поскольку мы делаем это для тестирования нашей модели, а затем добавить его в папку приложения после тестирования.

Я назвал его process.py.

В конце страницы документации (https://imageai.readthedocs.io/en/latest/prediction/index.html) предоставляется образец кода для прогнозирования одного изображения.

Мы вставим весь код в наш процесс файл.

Здесь мы напишем только код прогнозирования, например необходимые библиотеки, модель загрузки, прогнозирование и возврат результатов (не нужно вставлять все содержимое записной книжки от начала до конца).

Преимущество использования IDE в том, что нам не нужно выяснять наши ошибки и зависимости.

Прежде всего, нам нужен тензорный поток для запуска наших файлов модели, поэтому мы установим библиотеку тензорного потока с помощью pip. Мы берем tensorflow v1, потому что наша модель imageAI совместима с v1.

Вы также можете сделать это через настройки PyCharm.

Перейдите в Файл → Настройки → Проект → Интерпретатор проекта.

Вы увидите все модули, которые установлены в виртуальной среде. Щелкните значок + в правом углу. Найдите тензорный поток. Установите флажок "Укажите версию" и выберите версию 1.15.

Нажмите Установить пакет.

Если вы получаете сообщение об ошибке или не можете установить его из настроек.

Попробуйте эту команду:

pip install tensorflow == 1.15

Работа с process.py

Пропустите эту часть, если вы используете свою собственную модель и код.

Вы увидите ошибку в строке 1, т. Е. При импорте библиотеки.

Здесь нажмите на кнопку с лампочкой и установите библиотеку imageAI. Вы также можете сделать это вручную, написав команду pip в виртуальной среде.

pip install imageai

Установка пакетов может занять некоторое время.

А пока давайте узнаем, что в коде.

При запуске все зависимости импортируются.

Строка 4 извлекает текущее местоположение файла, которое мы удалим позже при подключении к flask.

Строки с 6 по 9 определяют и загружают файл нашей модели. Здесь мы видим, что используется модель resnet, я добавил статическое расположение папки перед файлом ‘static / resnet50_weights_tf_dim_ordering_tf_kernels.h5.

Скопируйте и вставьте файл модели в папку app / static.

Загрузите любое входное изображение и поместите его в папку app / static.

Отредактируйте строку 10 и измените местоположение изображения на наше загруженное изображение.

прогнозы, вероятности = prediction.predictImage (os.path.join (execution_path, «static / input_image_name.jpg»), result_count = 10)

На данный момент установлен наш пакет imageAI. Файл модели, входное изображение также помещаются в статическую папку.

Теперь запустите и проверьте файл process.py.

Если вы получили какую-либо ошибку, попробуйте ее устранить, иначе спросите в разделе комментариев.

Примечание. Не нужно беспокоиться о предупреждениях о тензорном потоке, если у вас нет графического процессора.

Мы видим, что предсказание выполнено успешно.

3. Создайте форму для ввода данных из веб-приложения Flask.

Теперь мы попытаемся создать страницу и взять изображение от пользователя, а затем сохранить его как временные файлы, которые будут удалены позже после использования.

а. В папке шаблонов создайте html-файл с именем predic.html.

Predict.html:

Здесь мы, как обычно, расширим файл макета и начнем наш фактический блок.

Внутри мы добавили поле формы, которое будет принимать изображения.



б. Добавить функцию маршрута для страницы прогноза

Это необходимо для подключения нашего html-файла к flask.

c. Измените layout.html и добавьте ссылку прогнозирования на панели навигации.

Щелкните здесь, чтобы просмотреть код

Запустите приложение flask, набрав команду в виртуальном окружении. Терминал:

python app.py

d. Создайте новую функцию маршрута с именем «upload», которая будет вызываться действием формы, она сохранит наше входное изображение в папке temp.

Добавьте методы для получения запроса на ввод формы. Создайте новую папку с именем temp в папке приложения.

Функция сохранит файл изображения во временной папке и будет использоваться для отправки на предсказание.

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

Мы выберем изображение и проверим, сохраняется ли файл во временной папке или нет.

Я получил ошибку (поскольку после вызова функции загрузки ничего не возвращается), но мой файл сохраняется во временной папке, это означает, что форма работает нормально.

4. Передайте входное изображение в модель.

Создайте новую функцию маршрута «предсказание (имя файла)», которая принимает имя файла в качестве параметра.

Эта функция будет вызвана нашей функцией загрузки после сохранения изображения.



Импортируйте process.py в маршруты вместо добавления всего кода модели.

Я изменил process.py так, чтобы он содержал только одну функцию, которая будет вызываться из маршрута.

Нажмите здесь, чтобы открыть ссылку git для process.py

Функция pred_img в process.py вернет результат словаря, то есть вывод вашей модели.

Создайте новый html-файл, который покажет результаты.

Я создал output.html, который передается в маршруте с переменной результата.

Код для output.html

Наше приложение готово к использованию.

Давай попробуем

1.Выберите изображение

2. Изображение загружено.

3. Последняя строка терминала показывает, что загрузка прошла нормально и изображение передано в функцию прогнозирования. Игнорируйте tf-информацию / предупреждения, если они появятся.

Для пользователей ЦП: чтобы скрыть предупреждения тензорного потока, добавьте код в process.py

В начале:

импорт тензорного потока

os.environ [«TF_CPP_MIN_LOG_LEVEL»] = «3»

Внутри pred_img функция, в которую будет загружена модель:

tenorflow.compat.v1.logging.set_verbosity (tensorflow.compat.v1.logging.ERROR)

5. Результаты прогнозов.

Подводя итог тому, что мы делали до сих пор:

· Принимать данные из формы и передавать их функции маршрутизации.

· Перенаправить данные формы в функцию прогнозирования маршрута.

· Функция прогнозирования маршрута вызывает функцию реальной модели, присутствующую в другом файле.

· Результаты возвращаются в функцию прогнозирования маршрута и передаются как переменная с render_template для отображения результатов пользователю.

6. Развертывание с помощью heroku

Развертывание Flask для тестирования бесплатно можно выполнить с помощью heroku.

Heroku бесплатно предоставляет 500 Мб дискового пространства для развертывания нашего веб-сайта. Разверните с помощью heroku, просто загрузив его с веб-сайта. По настройке файла flask вы найдете множество статей о том, как развернуть на heroku.



Чтобы дать вам представление о том, что необходимо сделать для развертывания в heroku, вы создадите один файл с именем ‘ProcFile’ без какого-либо расширения.

Внутри ProcFile:

Интернет: приложение Gunicorn: приложение

Вам понадобится файл requirements.txt, который вы можете создать автоматически, набрав команду в виртуальной среде flask:

pip freeze ›requirements.txt

Вам потребуется переименовать app.py в application.py. Также внутри init и других файлов вам нужно будет изменить app = Flask… на application = Flask…

Преобразуйте переменную приложения в "приложение", в котором она используется.

Создайте файл с именем ‘config.py’ в основной папке ‘flask_h5’. Он будет содержать секретный ключ.

config.py:

импорт ОС

класс Config:

SECRET_KEY = os.environ.get («SECRET_KEY»)

Удалите секретный ключ, добавленный в __init__.py. config.py, содержащий секретный ключ, будет вызываться в init.

__init__.py:

из config import Config

application = Flask (__ имя__)

application.config.from_object (конфигурация)

Это требования для развертывания flask на heroku.

Перейдите на веб-сайт heroku и убедитесь, что все внесенные изменения соответствуют их требованиям.

6. Поддерживайте

Если вы хотите изменить или модифицировать код в развернутой платформе heroku.

Зафиксируйте файлы обновлений с помощью git, а затем повторно разверните их в heroku с помощью команды «git push heroku master».

КОММЕНТАРИЙ, ЕСЛИ ВЫ НАЧИНАЕТЕ ТРУДНОСТИ НА ЛЮБОМ ШАГЕ.



Хлопайте, если вы сочтете это полезным.