1. مقدمه
در این نرمافزار کد، با استفاده از جاوا، Spring Boot، پایگاهداده Cloud Spanner و Vertex AI Imagen API یک پوز مولد مبتنی بر هوش مصنوعی بسازید. کاربر یک درخواست را وارد میکند و برنامه بر اساس آن اعلان یک حالت ایجاد میکند. ما همچنین از دادههای پایگاه داده Spanner که به عنوان REST API در معرض دید قرار میگیرد، استفاده خواهیم کرد. این یک راه سرگرمکننده و آموزشی برای نشان دادن قابلیتهای هوش مصنوعی مولد با Spring Boot در Google Cloud است.
لیست خدمات مورد استفاده عبارتند از:
- آچار ابری
- Vertex AI Imagen API
- Cloud Run
نمودار جریان سطح بالا
چیزی که خواهی ساخت
شما ایجاد خواهید کرد
- یک برنامه Java Spring Boot برای داده های Spanner به عنوان یک سرویس API
- یک برنامه Java Spring Boot برای ایجاد تصویر با استفاده از Imagen
- یک رابط کاربری تعاملی برای ورودی و پاسخ سریع
2. الزامات
قبل از شروع
- در Google Cloud Console ، در صفحه انتخاب پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید
- مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورتحساب در پروژه آشنا شوید
- مطمئن شوید که همه APIهای لازم (API Cloud Spanner، Vertex AI API، Cloud Run API، Cloud Functions API) فعال هستند.
- شما از Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Google Cloud اجرا می شود و با bq از قبل بارگذاری شده است. برای دستورات و استفاده از gcloud به اسناد مراجعه کنید
از Cloud Console، روی Activate Cloud Shell در گوشه سمت راست بالا کلیک کنید:
اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <YOUR_PROJECT_ID>
- برای شروع، با پروژه فعال Google Cloud خود به صفحه Cloud Spanner بروید
3. آماده سازی داده ها با Spanner
قبل از ایجاد برنامه، بیایید با ایجاد یک نمونه، پایگاه داده و جدول Cloud Spanner، تنظیمات پایگاه داده را تکمیل کنیم. برای مطالعه جزئیات بیشتر در مورد ویژگی های Cloud Spanner، DDL، DML و غیره می توانید به این وبلاگ مراجعه کنید. برای ایجاد آبجکت های پایگاه داده مورد نیاز برای این پروژه می توانید مراحل زیر را دنبال کنید:
- با کلیک روی CREATE INSTANCE در صفحه نمونه، یک نمونه ایجاد کنید.
- جزئیات را مانند تصویر زیر وارد کنید و روی CREATE کلیک کنید:
- پس از ایجاد، از صفحه نمای کلی نمونه، روی CREATE DATABASE کلیک کنید
- نام پایگاه داده را به صورت "first-spanner-db" وارد کنید و DDL زیر را در قسمت DDL TEMPLATES وارد کنید و روی SUBMIT کلیک کنید:
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 اجرا کنید تا برای برنامه pose generator در دسترس باشد برای این کار، دستور زیر را از ترمینال پوسته ابری اجرا کنید:
gcloud run deploy –source .
پارامترهای مورد نیاز را پاس کنید و مطمئن شوید که برنامه شما مستقر است. URL سرویس تولید شده باید بتواند داده های ایجاد شده در Spanner را فهرست کند.
5. بوت استرپ یک برنامه ژست ژنراتور با Spring Boot، Spanner و Imagen
در این مرحله، قسمت بالای نمودار جریان را تکمیل کرده ایم، یعنی داده های Spanner را به عنوان یک سرویس (REST API) در دسترس قرار می دهیم. حالا بیایید یک برنامه کلاینت ایجاد کنیم که داده های آچار را فراخوانی می کند، IMAGEN API را با یک اعلان فراخوانی می کند و رشته کدگذاری شده Base64 را به عنوان تصویر به رابط کاربر برمی گرداند.
- تاکنون با ساختار پروژه Spring Boot و اهمیت آن آشنا شده اید. بنابراین به سرعت با اجرای دستور زیر در ترمینال پوسته ابری خود، مستقیماً به سمت شبیه سازی مخزن در دستگاه پوسته ابری خود خواهید رفت:
git clone https://github.com/AbiramiSukumaran/genai-posegen
این باید پروژه genai-posegen
در ماشین پوسته ابری شما ایجاد می کرد. ساختار پروژه شبیه سازی شده به این صورت در ویرایشگر پوسته ابری نشان داده می شود:
کلاس جاوا PromptController دارای فراخوانی سرویس پایگاه داده، پیاده سازی منطق تجاری و فراخوانی AI API مولد Imagen نیز می باشد. این کلاس با قالبهای Thymeleaf تعامل دارد که از یکپارچهسازی دادهها با رابط کاربری مراقبت میکنند. 3 روش سرویس در این کلاس وجود دارد - 1) برای دریافت ورودی سریع 2) برای پردازش درخواست و فراخوانی Imagen API و 3) برای پردازش پاسخ imagen.
Prompt و Yoga کلاسهای POJO هستند که به ترتیب شامل فیلدها، دریافتکنندهها و تنظیمکنندهها برای ارتباط با Imagen API و Spanner Data Server API هستند.
فایلهای html Index و getImage در پوشه templates حاوی الگوهای رابط کاربری هستند و وابستگیهایی به اسکریپتهای JS و css در پوشههای مربوطه دارند.
ادغام Vertex AI Imagen API برای مورد استفاده تولید تصویر، ما از Imagen API Vertex AI در قالب زیر استفاده می کنیم:
https://<<region>>-
aiplatform.googleapis.com/v1/projects/
<<your-project-id>>/locations/<<region>>/publishers/google/models/imagegeneration:predict
در اینجا می توانید اطلاعات بیشتری در مورد قابلیت های Imagen بخوانید. پاسخ را در قالب رشته کدگذاری شده Base64 برمی گرداند. برای تبدیل آن به تصویر خود، از متد setattribute جاوا اسکریپت (در فایل getImage.js) روی شی تصویر به شرح زیر در فایل getImage.HTML استفاده کرده ایم:
poseImage.setAttribute('src', "data:image/jpg;base64," + baseStr64);
مجوز Imagen API از شما می خواهد که برای دسترسی به آن، احراز هویت توکن حامل را فعال کنید. در مورد ما، من از رویکرد JSON اعتبار پیش فرض برنامه استفاده کرده ام. میتوانید با اجرای دستور زیر از ترمینال پوسته ابری و دنبال کردن دستورالعملهایی که در ترمینال دنبال میشوند، آن را پیادهسازی کنید:
gcloud auth application-default login
برای احراز هویت با حساب خود "Y" را وارد کنید. اجازه دسترسی داده و کد مجوزی که در پنجره بازشو نشان داده شده است را کپی کنید. به محض انجام این کار، اعتبار پیش فرض برنامه را در فایل JSON که در مکانی مشابه این ذخیره شده است دریافت خواهید کرد: /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json.
با اجرای دستور cat (cat /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json) فایل را دانلود یا محتویات فایل JSON را کپی کنید و از آن در برنامه در متد callImagen() کلاس PromptController.java استفاده کنید. در اینجا میتوانید درباره احراز هویت بیشتر بخوانید.
رابط کاربری ما از Thymeleaf به عنوان موتور الگو برای تجزیه و رندر داده ها به فایل های قالب جلویی و افزودن طراحی زیبا به رابط کاربری استفاده کرده ایم. این شبیه به HTML است اما از ویژگی های بیشتری برای کار با داده های رندر شده پشتیبانی می کند. index.html شامل اجزای طراحی صفحه فرود است و به کاربر این امکان را می دهد که موضوع را انتخاب کند و یک اعلان اصلی برای ایجاد تصویر مورد نظر اضافه کند.
6. ساخت و استقرار
اکنون که کد را شبیهسازی کردهاید، مقادیر متغیرهایی را که برای پروژه، منطقه و اعتبارنامههای احراز هویت شما قابل استفاده است جایگزین کردهاید، بیایید به ساخت و استقرار برنامه بپردازیم. با استفاده از دستور، build به پوشه پروژه در ترمینال پوسته ابری بروید و سپس برای آزمایش به صورت محلی در ماشین پوسته ابری با 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، به صفحه مدیریت منابع بروید
- در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی Delete کلیک کنید
- در محاوره، شناسه پروژه را تایپ کنید و سپس روی Shut down کلیک کنید تا پروژه حذف شود
- اگر نمیخواهید پروژه را حذف کنید، با رفتن به نمونهای که برای این پروژه ایجاد کردهاید، نمونه Spanner را حذف کنید و روی دکمه DELETE INSTANCE در گوشه سمت راست بالای صفحه نمای کلی نمونه کلیک کنید.
- همچنین می توانید به صفحه خدمات Cloud Run بروید و سرویس های ایجاد شده در این پروژه را انتخاب کرده و دکمه حذف را بزنید تا سرویس ها حذف شوند.
9. تبریک می گویم
در این وبلاگ، ما توانستیم برنامه کامل پشته Spring Boot را بیاوریم که دادهها را در Cloud Spanner ذخیره و مدیریت میکند، تا با استفاده از Google Cloud Vertex AI Imagen API در یک برنامه کلاینت تعاملی که در Cloud Run استقرار یافته است، پوزهایی ایجاد کنیم. در بخش نمودار معماری این وبلاگ، مؤلفه توابع ابری (جاوا) را می بینید که هرگز نتوانستیم آن را انجام دهیم؟ اگر مایل به مشارکت هستید، قابل قبول است. شما می توانید 2 تابع Java Cloud را برای اجرای 2 روشی که در فایل getimage.html یافت می شود پیاده سازی کنید: روش های ذخیره پوز در پایگاه داده و آپلود تصویر. برای کسب اطلاعات بیشتر در مورد این مدل ، مستندات Imagen on Vertex AI را بررسی کنید.