1. Введение
В этой лаборатории кода создайте генератор поз на базе искусственного интеллекта, используя Java, Spring Boot, базу данных Cloud Spanner и API Vertex AI Imagen. Пользователь вводит подсказку, и приложение сгенерирует позу на основе этой подсказки. Мы также будем использовать данные из базы данных Spanner, представленные как REST API. Это интересный и познавательный способ продемонстрировать возможности генеративного искусственного интеллекта с помощью Spring Boot в Google Cloud.
Список используемых услуг:
- Облачный гаечный ключ
- API изображений Vertex AI
- Облачный бег
Блок-схема высокого уровня
Что ты построишь
Вы создадите
- Приложение Java Spring Boot для данных Spanner как сервисного API.
- Приложение Java Spring Boot для варианта использования генерации изображений с использованием Imagen.
- Интерактивный пользовательский интерфейс для быстрого ввода и ответа.
2. Требования
Прежде чем начать
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена оплата. Узнайте, как проверить, включена ли оплата в проекте.
- Убедитесь, что все необходимые API (API Cloud Spanner, API Vertex AI, API Cloud Run, API облачных функций) включены .
- Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud, в которую предварительно загружен bq . Обратитесь к документации по командам и использованию gcloud.
В Cloud Console нажмите «Активировать Cloud Shell» в правом верхнем углу:
Если ваш проект не установлен, используйте следующую команду, чтобы установить его:
gcloud config set project <YOUR_PROJECT_ID>
- Перейдите на страницу Cloud Spanner с активным проектом Google Cloud, чтобы начать работу.
3. Подготовка данных с помощью Spanner
Прежде чем создавать приложение, давайте завершим настройку базы данных, создав экземпляр Cloud Spanner, базу данных и таблицу. Вы можете обратиться к этому блогу , чтобы узнать подробнее о функциях Cloud Spanner, DDL, DML и многом другом. Вы можете выполнить следующие шаги, чтобы создать объекты базы данных, необходимые для этого проекта:
- Создайте экземпляр, нажав СОЗДАТЬ ЭКЗЕМПЛЯР на странице экземпляров.
- Введите данные, как показано на следующем изображении, и нажмите СОЗДАТЬ:
- После создания на странице обзора экземпляра нажмите СОЗДАТЬ БАЗА ДАННЫХ.
- Укажите имя базы данных как «first-spanner-db», введите следующий DDL в раздел «ШАБЛОНЫ DDL» и нажмите «ОТПРАВИТЬ»:
CREATE TABLE Yoga_Poses(
Pose_Id INT64 NOT NULL,
Name STRING(1024),
Breath STRING(1024),
Description STRING(1024)
) PRIMARY KEY(Pose_Id);
База данных и таблица должны быть созданы в результате последнего шага. Теперь давайте вставим несколько строк в таблицу Yoga_Poses, чтобы мы могли приступить к созданию нашего приложения Spring Boot.
- Нажмите Spanner Studio на панели «База данных» слева и откройте новую вкладку редактора запросов, как показано на рисунке ниже:
- Выполните следующие запросы INSERT:
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(1, 'STAND', 'INHALE AND EXHALE',
'STAND WITH YOUR FEET HIP WIDTH APART AND ARMS RESTING BY THE SIDES');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(2, 'PLANK', 'INHALE OR EXHALE',
'PLANT YOUR TOES AND PALMS ON THE MAT WITH BODY PARALLEL TO THE GROUND');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(3, 'SIT', 'INHALE AND EXHALE',
'SIT ON THE FLOOR LEGS CROSSED');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(4, 'BEND', 'EXHALE',
'FOLD FORWARD AS YOU STAND, HANDS REACHING TO THE FLOOR');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(5, 'PUSH UP', 'EXHALE',
'PLANK WITH ELBOWS ON MAT');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(6, 'SEATED FORWARD BEND', 'EXHALE',
'FOLD FORWARD AS YOU SIT, HANDS TRYING TO REACH THE FEET');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(7, 'LUNGE', 'EXHALE',
'ONE LEG TO THE FRONT 90 DEGREES TO THE FLOOR AND THE BACK LEG STRAIGHT');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(8, 'COURTESY LUNGE', 'INHALE',
'ONE LEG TO THE FRONT 90 DEGREES TO THE FLOOR AND THE BACK KNEE TOUCHING THE FLOOR');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(9, 'BANK BEND', 'INHALE',
'STAND WITH ARMS UP AND BODY BENT BACKWARDS, ARCHING YOUR SPINE, LOOKING AT THE SKY');
INSERT INTO Yoga_Poses(Pose_Id, Name, Breath, Description)
VALUES(10, 'BICEP ACTION', 'INHALE AND EXHALE',
'CURL, PRESS AND WORK YOUR BICEPS');
Теперь у нас есть экземпляр Spanner, база данных, таблица и данные, созданные и готовые к использованию в приложении.
4. Создайте REST API с помощью Spring Boot и Spanner для данных позы.
Чтобы ознакомиться с консолью Spring Boot и Google Cloud, посетите этот блог .
- Загрузите приложение Spring Boot. Чтобы загрузить это приложение с нуля, подпишитесь на этот блог . Чтобы клонировать из репозитория и начать действовать, просто запустите приведенную ниже команду в терминале облачной оболочки:
git clone https://github.com/AbiramiSukumaran/spanner-springb
В результате на вашем компьютере с облачной оболочкой должен был быть создан проект spanner-springb. Чтобы разобраться в компонентах приложения, пролистайте блог .
- Давайте создадим и запустим приложение. Для этого выполните следующие команды из терминала облачной оболочки:
cd spanner-springb
./mvnw package
./mvnw spring-boot:run
- Разверните приложение в Cloud Run, чтобы оно было доступно для приложения генератора поз. Для этого выполните следующую команду из терминала облачной оболочки:
gcloud run deploy –source .
Передайте необходимые параметры и убедитесь, что ваше приложение развернуто. Сгенерированный URL-адрес службы должен содержать список данных, созданных в Spanner.
5. Загрузите приложение-генератор поз с помощью Spring Boot, Spanner и Imagen.
На этом этапе мы завершили верхнюю часть блок-схемы, то есть сделали данные Spanner доступными как услугу (REST API). Теперь давайте создадим клиентское приложение, которое вызывает данные гаечного ключа, вызывает API IMAGEN с приглашением и возвращает строку в кодировке Base64 в виде изображения в пользовательский интерфейс.
- К настоящему моменту вы уже знакомы со структурой проекта Spring Boot и ее значением. Итак, мы быстро перейдем к клонированию репозитория на ваш компьютер с облачной оболочкой, выполнив приведенную ниже команду в терминале облачной оболочки:
git clone https://github.com/AbiramiSukumaran/genai-posegen
Это должно было создать проект genai-posegen
на вашем компьютере с облачной оболочкой. Клонированная структура проекта отображается в редакторе облачной оболочки следующим образом:
Java-класс PromptController включает вызов службы базы данных, реализацию бизнес-логики, а также вызов генеративного AI API Imagen. Этот класс взаимодействует с шаблонами Thymeleaf, которые обеспечивают интеграцию данных в пользовательский интерфейс. В этом классе есть 3 метода обслуживания: 1) для получения ввода подсказки, 2) для обработки запроса и вызова API Imagen и 3) для обработки ответа imagen.
Prompt и Yoga — это классы POJO, которые содержат поля, методы получения и установки для взаимодействия с API Imagen API и API сервера данных Spanner соответственно.
HTML-файлы Index и getImage в папке шаблонов содержат шаблоны пользовательского интерфейса и имеют зависимости от сценариев JS и CSS в соответствующих папках.
Интеграция API Vertex AI Imagen Для сценария использования изображения мы используем API Imagen Vertex AI в следующем формате:
https://<<region>>-
aiplatform.googleapis.com/v1/projects/
<<your-project-id>>/locations/<<region>>/publishers/google/models/imagegeneration:predict
Подробнее о возможностях Imagen можно прочитать здесь . Он возвращает ответ в строковом формате с кодировкой Base64. Чтобы преобразовать его в изображение, мы использовали метод javascript setattribute (в файле getImage.js) для объекта изображения в файле getImage.HTML следующим образом:
poseImage.setAttribute('src', "data:image/jpg;base64," + baseStr64);
Авторизация Для доступа к API Imagen требуется, чтобы у вас была включена аутентификация токена носителя. В нашем случае я использовал JSON-подход Application Default Credentials. Вы можете реализовать это, выполнив приведенную ниже команду из терминала облачной оболочки и следуя инструкциям, которые следуют в терминале:
gcloud auth application-default login
Введите «Y» для аутентификации под своей учетной записью. Разрешите доступ и скопируйте код авторизации, который отображается во всплывающем окне. Как только вы это сделаете, вы получите учетные данные приложения по умолчанию в файле JSON, сохраненном в примерно таком месте: /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json.
Загрузите файл или скопируйте содержимое файла JSON, выполнив команду cat (cat /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json) и используйте его в приложении в методе callImagen() класса PromptController.java. Подробнее об аутентификации можно прочитать здесь .
Пользовательский интерфейс Мы использовали Thymeleaf в качестве механизма шаблонов для анализа и рендеринга данных в файлы шаблонов внешнего интерфейса, а также для добавления элегантного дизайна в пользовательский интерфейс. Он похож на HTML, но поддерживает больше атрибутов для работы с визуализированными данными. Файл index.html содержит компоненты дизайна целевой страницы и позволяет пользователю выбрать тему и добавить переопределяющее приглашение для создания желаемого изображения.
6. Сборка и развертывание
Теперь, когда вы клонировали код, заменили значения заполнителей, применимые к вашему проекту, региону и учетным данным аутентификации, давайте перейдем к созданию и развертыванию приложения. Перейдите в папку проекта в терминале облачной оболочки с помощью команды, выполните сборку, а затем разверните ее для тестирования локально на компьютере облачной оболочки, выполнив одну за другой следующие 3 команды:
cd genai-posegen
./mvnw package
./mvnw spring-boot:run
Разверните приложение в Cloud Run, чтобы оно было доступно в облаке. Для этого выполните следующую команду из терминала облачной оболочки в папке проекта:
gcloud run deploy –source .
Передайте необходимые параметры и убедитесь, что ваше приложение развернуто.
7. Демо
После развертывания приложения вы должны увидеть URL-адрес службы в терминале. Нажмите на ссылку и увидите, как ваше приложение для создания изображений поз работает в Google Cloud без сервера!
8. Очистка
Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом посте, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу «Управление ресурсами».
- В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить».
- В диалоговом окне введите идентификатор проекта и нажмите «Завершить работу», чтобы удалить проект.
- Если вы не хотите удалять проект, удалите экземпляр Spanner, перейдя к экземпляру, который вы только что создали для этого проекта, и нажмите кнопку «УДАЛИТЬ ЭКЗЕМПЛЯР» в правом верхнем углу страницы обзора экземпляра.
- Вы также можете перейти на страницу служб Cloud Run, выбрать службы, созданные в этом проекте, и нажать кнопку «Удалить», чтобы удалить службы.
9. Поздравления
В этом блоге мы смогли использовать полнофункциональное приложение Spring Boot, которое хранит и обрабатывает данные в Cloud Spanner, для создания поз с помощью Imagen API Google Cloud Vertex AI в интерактивном клиентском приложении, развернутом в Cloud Run. В разделе архитектурных диаграмм этого блога вы видите компонент Cloud Functions (Java), который нам так и не пришлось делать? Это можно получить, если вы хотите внести свой вклад. Вы можете реализовать две облачные функции Java для выполнения двух методов, которые можно найти в файле getimage.html: сохранить позу в базе данных и загрузить методы изображения. Ознакомьтесь с документацией Imagen on Vertex AI , чтобы узнать больше о модели.