import gradio as gr
def greet(name, intensity):
return "Hello, " + name + "!" * int(intensity)
demo = gr.Interface(
fn=greet, # Функция, которая будет вызываться при отправке данных
inputs=["text", "slider"], # Типы входных компонентов UI: текстовое поле и слайдер
outputs=["text"], # Типы выходных компонентов UI: текстовое поле для результата
)
# Если нужна публичная ссылка share=True
demo.launch(share=True)
Установка Gradio
Давайте начнём с вопроса установки Gradio. На самом деле здесь всё очень просто. Прямо на главной странице есть раздел «Light, fast setup» с инструкцией, как это всё устанавливается. Выполняем pip install gradio в виртуальном окружении Python и запускаем python app.py.
Как я это сделал? У меня есть файл requirements.txt, который относится к моему тестовому проекту, и я добавил туда Gradio. Либо можно просто активировать тестовое окружение и набрать в нём pip install gradio. После этого можно создавать py-файлы приложений, которые будут выполняться.
Вот простое приложение. Чтобы использовать эту библиотеку, делаем импорт и придумываем алиас, например gr:
import gradio as gr
Этот пример можно найти в документации в разделе Get Started → Quick Start. Там есть инструкция по построению вашего первого демо-приложения.
Создание интерфейса
Что у нас здесь есть? У объекта gr есть метод Interface, который позволяет строить интерфейсы. У интерфейса есть:
- обработчик — функция обработчик этого интерфейса
- входные данные
- выходные данные, которые будут возвращаться после обработки функции
В списке перечисляем те UI-компоненты, которые будут на входе, и те, которые будут на выходе. На входе у нас текстовое поле и слайдер. На выходе — просто текстовое поле для получения результата.
Функция-обработчик принимает аргументы name и intensity. name — это значение, которое будет приходить из текстового поля, а слайдер отвечает за интенсивность. На выходе будет строка «Hello» плюс то, что мы ввели в текстовое поле. Восклицательный знак будет повторяться ровно столько раз, сколько указана интенсивность в слайдере.
Для запуска интерфейса сохраняем его в переменную demo и вызываем метод launch(). Опционально можно передать аргумент share=True. Тогда будет сгенерирована публичная ссылка, которой можно поделиться с заказчиком или другими участниками проекта.
Тестирование приложения
Давайте запустим приложение. Оно запустилось на локальном компьютере, и была выдана публичная ссылка, доступная в интернете, пока приложение запущено. Если вы разрабатываете только для тестовых целей, этот параметр не нужен — всё будет разворачиваться только на локальном компьютере.
Вот такой интерфейс получился: текстовое поле и слайдер. Всё просто — мы указываем, что нам нужно текстовое поле и слайдер в этом интерфейсе, и они появляются. На выходе у нас просто текстовое поле.
Если набрать какой-то произвольный текст и нажать Submit, результат отображается. Так как интенсивность ноль, восклицательного знака нет. Если добавить значение слайдера, эти значения добавляются в выходные данные.
Также можно перейти по публичной ссылке, и откроется тот же самый интерфейс, только он уже будет доступен по сети интернет. Можно поделиться этой ссылкой с заказчиком. Пока приложение запущено, заказчик сможет потестировать интерфейс, при этом он выполняется на вашем домашнем компьютере.
Вот такое простое понимание: входные элементы, выходные элементы и обработчик для этих элементов.