Spanner ve Vertex AI Imagen API ile üretken yapay zekaya geçiş

1. Giriş

Bu codelab'de Java, Spring Boot, Cloud Spanner veritabanı ve Vertex AI Imagen API'yi kullanarak AI destekli bir poz oluşturma aracı derleyin. Kullanıcı bir istem girer ve uygulama, bu isteme göre bir poz oluşturur. Ayrıca, REST API olarak açığa çıkan Spanner veritabanındaki verileri de kullanacağız. Google Cloud'da Spring Boot ile üretken yapay zekanın yeteneklerini göstermenin eğlenceli ve eğitici bir yolu.

Kullanılan hizmetlerin listesi şunlardır:

  1. Cloud Spanner
  2. Vertex AI Imagen API'si
  3. Cloud Run

Üst düzey akış diyagramı

60192bcbff4c39de.png

Neler oluşturacaksınız?

Şöyle

  • Hizmet API'si olarak Spanner verileri için bir Java Spring Boot uygulaması
  • Imagen kullanan görüntü oluşturma kullanım alanına yönelik bir Java Spring Boot uygulaması
  • İstem girişi ve yanıtı için etkileşimli kullanıcı arayüzü

2. Şartlar

  • Chrome veya Firefox gibi bir tarayıcı
  • Faturalandırmanın etkin olduğu bir Google Cloud projesi

Başlamadan önce

  1. Google Cloud Console'daki proje seçici sayfasından bir Google Cloud projesi seçin veya oluşturun.
  2. Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir projede faturalandırmanın etkin olup olmadığını nasıl kontrol edeceğinizi öğrenin.
  3. Tüm gerekli API'lerin (Cloud Spanner API, Vertex AI API, Cloud Run API, Cloud Functions API) etkinleştirildiğinden emin olun
  4. Google Cloud'da çalışan ve bq ile önceden yüklenmiş bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız. gcloud komutları ve kullanımı için belgelere bakın

Cloud Console'da sağ üst köşedeki Cloud Shell'i Etkinleştir'i tıklayın:

51622c00acec2fa.png

Projeniz ayarlanmadıysa ayarlamak için aşağıdaki komutu kullanın:

gcloud config set project <YOUR_PROJECT_ID>
  1. Başlamak için etkin Google Cloud projenizin bulunduğu Cloud Spanner sayfasına gidin

3. Spanner ile veri hazırlama

Uygulamayı oluşturmadan önce Cloud Spanner örneği, veritabanı ve tablo oluşturarak veritabanı kurulumunu tamamlayalım. Cloud Spanner özellikleri, DDL, DML ve daha fazlası hakkında daha ayrıntılı bilgi edinmek için bu blogu inceleyebilirsiniz. Bu proje için gereken veritabanı nesnelerini oluşturmak üzere aşağıdaki adımları uygulayabilirsiniz:

  1. Örnekler sayfasında ÖRNEK OLUŞTUR'u tıklayarak bir örnek oluşturun.
  2. Aşağıdaki resimde gösterildiği gibi ayrıntıları girin ve OLUŞTUR'u tıklayın:

f869fcbb922027a5.png

  1. Oluşturulduktan sonra, örneğe genel bakış sayfasından VERİTABANI OLUŞTUR'u tıklayın.
  2. Veritabanının adını "first-spanner-db" olarak sağlayın. DDL ŞABLONU bölümüne şu DDL'yi girin ve GÖNDER'i tıklayın:
CREATE TABLE Yoga_Poses(
  Pose_Id   INT64 NOT NULL,
  Name  STRING(1024),
  Breath STRING(1024),
  Description STRING(1024)
) PRIMARY KEY(Pose_Id);

Veritabanı ve tablo, son adımın sonucunda oluşturulmalıdır. Şimdi İlkbahar Botu uygulamamızı oluşturmaya başlayabilmemiz için Yoga_Poses tablosuna birkaç satır ekleyelim.

  1. Soldaki Veritabanı bölmesinden Spanner Studio'yu tıklayın ve aşağıdaki resimde gösterildiği gibi yeni bir sorgu düzenleyici sekmesi açın:

c86774e8fd32eca0.png

  1. Aşağıdaki INSERT sorgularını çalıştırın:
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');

Artık Spanner örneğimiz, veritabanımız, tablomuz ve verilerimiz oluşturuldu ve uygulama için hazır hale geldi.

4. Poz verileri için Spring Boot ve Spanner ile bir REST API derleme

Spring Boot ve Google Cloud Console hakkında bilgi edinmek için bu bloga göz atın.

  1. Spring Boot uygulamasını önyükleme Bu uygulamayı sıfırdan başlatmak için bu blogu takip edin. Depodan klonlamak ve harekete geçmek için Cloud Shell terminalinizde aşağıdaki komutu çalıştırmanız yeterlidir:
git clone https://github.com/AbiramiSukumaran/spanner-springb

Cloud Shell makinenizde spanner-springb projesi oluşturulmuş olmalıdır. Uygulamanın bileşenlerini anlamak için blogu ziyaret edin.

  1. Şimdi uygulamayı derleyip çalıştıralım. Bunu yapmak için Cloud Shell terminalinden aşağıdaki komutları çalıştırın:
cd spanner-springb

./mvnw package

./mvnw spring-boot:run
  1. Uygulamayı, poz oluşturma uygulaması için kullanılabilir olacak şekilde Cloud Run'a dağıtın. Bunu yapmak için Cloud Shell terminalinden aşağıdaki komutu çalıştırın:
gcloud run deploy –source .

Gerekli parametreleri iletin ve uygulamanızın dağıtıldığından emin olun. Oluşturulan hizmet URL'si, Spanner'da oluşturulan verileri listeleyebilmelidir.

5. Spring Boot, Spanner ve Imagen ile poz oluşturma uygulaması için önyükleme yapın

Bu noktada, akış diyagramının en üst kısmını tamamlayarak Spanner verilerini hizmet (REST API) olarak kullanıma sunmuş olduk. Şimdi, anahtar verilerini çağıran, bir istemle IMAGEN API'yi çağıran ve Base64 kodlamalı dizeyi kullanıcı arayüzüne resim olarak döndüren bir istemci uygulaması oluşturalım.

  1. Şu ana kadar, Bahar Botu proje yapısını ve önemini zaten biliyorsunuz. Bu nedenle, Cloud Shell terminalinizde aşağıdaki komutu çalıştırarak doğrudan depo'yu Cloud Shell makinenize klonlama işlemine başlayabilirsiniz:
git clone https://github.com/AbiramiSukumaran/genai-posegen

Bu işlem Cloud Shell makinenizde genai-posegen projesini oluşturmuş olmalıydı. Klonlanan proje yapısı, Cloud Shell düzenleyicisinde aşağıdaki gibi görünür:

b19a94f895f74c62.png

PromptController Java sınıfı; veritabanı hizmeti çağrısı, iş mantığının uygulanması ve Imagen'in üretken yapay zeka API çağrısı içerir. Bu sınıf, kullanıcı arayüzüne veri entegrasyonu sağlayan Thymeleaf şablonlarıyla etkileşime girer. Bu sınıfta 3 hizmet yöntemi vardır: 1) istem girişini almak için 2) isteği işlemek ve Imagen API'yi çağırmak ve 3) imagen yanıtını işlemek için.

Prompt ve Yoga; sırasıyla Imagen API ve Spanner veri sunucusu API'si ile arayüz oluşturmak için kullanılacak alanları, alıcıları ve belirleyicileri içeren POJO sınıflarıdır.

Şablonlar klasöründeki Dizin ve getImage html dosyaları, kullanıcı arayüzüne ilişkin şablonları içerir ve ilgili klasörlerde JS ve css komut dosyalarının bağımlılıklarını içerir.

Vertex AI Imagen API Entegrasyonu: Görüntü oluşturma kullanım alanında Vertex AI'ın Imagen API'sini aşağıdaki biçimde kullanırız:

https://<<region>>- aiplatform.googleapis.com/v1/projects/<<your-project-id>>/locations/<<region>>/publishers/google/models/imagegeneration:predict

Imagen özellikleri hakkında daha fazla bilgiye buradan ulaşabilirsiniz. Yanıtı Base64 olarak kodlanmış dize biçiminde döndürür. Resmine dönüştürmek için resim nesnesi üzerinde getImage.HTML dosyasında olduğu gibi JavaScript setattribute yöntemini (getImage.js dosyasında) kullandık:

poseImage.setAttribute('src', "data:image/jpg;base64," + baseStr64);

Yetkilendirme Imagen API'ye erişmek için hamiline ait jeton kimlik doğrulamasını etkinleştirmeniz gerekir. Bizim örneğimizde, Application Default Credentials (Uygulama Varsayılan Kimlik Bilgileri) JSON yaklaşımını kullandım. Cloud Shell terminalinden aşağıdaki komutu çalıştırıp terminaldeki talimatları uygulayarak bu komutu uygulayabilirsiniz:

gcloud auth application-default login

"Y" yazın hesabınıza giriş yapın. Erişime izin verin ve pop-up'ta gösterilen yetkilendirme kodunu kopyalayın. Bu işlemi yaptığınızda JSON dosyasında uygulamanın varsayılan kimlik bilgilerini şuna benzer bir konuma kaydedilmiş olarak alırsınız: /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json.

cat komutunu çalıştırarak (cat /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json) dosyayı indirin veya JSON dosyasının içeriğini kopyalayın ve dosyayı, PromptController.java sınıfının callImagen() yöntemindeki uygulamada kullanın. Kimlik doğrulama hakkında daha fazla bilgiye buradan ulaşabilirsiniz.

Kullanıcı Arayüzü Kullanıcı arabirimi şablon dosyalarındaki verileri ayrıştırıp oluşturmak ve kullanıcı arayüzüne zarif bir tasarım eklemek için şablon motoru olarak Thymeleaf'i kullandık. HTML'ye benzer, ancak oluşturulan verilerle çalışmak için daha fazla özelliği destekler. index.html, açılış sayfası tasarım bileşenlerini içerir ve kullanıcının konuyu seçmesine ve istenen resmi oluşturmak için geçersiz kılan bir istem eklemesine olanak tanır.

6. Derleme ve dağıtma

Kodu klonladığınıza ve yer tutucu değerlerini projenize, bölgenize ve kimlik doğrulama bilgilerinize uygun şekilde değiştirdiğinize göre şimdi uygulamayı derleme ve dağıtmaya geçelim. Şu komutu kullanarak Cloud Shell terminalindeki proje klasörüne gidin ve derlemeyi açın. Ardından aşağıdaki 3 komutu tek tek kullanarak Cloud Shell makinesinde yerel olarak test için dağıtın:

cd genai-posegen

./mvnw package

./mvnw spring-boot:run

Uygulamanın bulutta kullanılabilmesi için uygulamayı Cloud Run'da dağıtın. Bunu yapmak için proje klasöründeki Cloud Shell terminalinden aşağıdaki komutu çalıştırın:

gcloud run deploy –source .

Gerekli parametreleri iletin ve uygulamanızın dağıtıldığından emin olun.

7. Demo

Uygulama dağıtıldıktan sonra terminalde hizmet URL'sini görürsünüz. Bağlantıyı tıklayın ve poz görüntü oluşturma uygulamanızın Google Cloud'da sunucusuz olarak çalıştığını görün.

92bdb22109b2f756.gif

8. Temizleme

Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:

  1. Google Cloud konsolunda Kaynakları yönetin sayfasına gidin
  2. Proje listesinden silmek istediğiniz projeyi seçin ve ardından Sil’i tıklayın
  3. İletişim kutusuna proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın
  4. Projeyi silmek istemiyorsanız bu proje için yeni oluşturduğunuz örneğe giderek Spanner örneğini silin ve örneğe genel bakış sayfasının sağ üst köşesindeki ÖRNEĞİ SİL düğmesini tıklayın.
  5. Ayrıca, Cloud Run hizmetleri sayfasına gidip bu projede oluşturulan hizmetleri seçebilir ve hizmetleri silmek için sil düğmesini tıklayabilirsiniz.

9. Tebrikler

Bu blogda, Cloud Spanner'da verileri depolayan ve işleyen tam yığın Spring Boot uygulamasını kullanarak, Cloud Run'da dağıtılan etkileşimli bir istemci uygulamasında Google Cloud Vertex AI'ın Imagen API'sini kullanarak pozlar oluşturmayı başardık. Bu blogun mimari şeması bölümünde hiç yapmadığımız Cloud Functions (Java) bileşenini görüyor musunuz? Katkıda bulunmak istiyorsanız bunu yapabilirsiniz. getimage.html dosyasında bulunabilen 2 yöntemi gerçekleştirmek için 2 Java Cloud Functions işlevi uygulayabilirsiniz: pozu veritabanına kaydetme ve görüntü yöntemleri yükleme. Model hakkında daha fazla bilgi edinmek için Vertex AI'da Imagen belgelerine göz atın.