1. Giriş
Bu codelab'de Java, Spring Boot, Cloud Spanner veritabanı ve Vertex AI Imagen API'yi kullanarak yapay zeka destekli bir poz oluşturucu oluşturacaksınız. Kullanıcı bir istem girer ve uygulama bu isteme göre bir poz oluşturur. Ayrıca, REST API olarak kullanıma sunulan Spanner veritabanındaki verileri de kullanacağız. Google Cloud'da Spring Boot ile üretken yapay zekanın özelliklerini eğlenceli ve eğitici bir şekilde gösterir.
Kullanılan hizmetlerin listesi:
- Cloud Spanner
- Vertex AI Imagen API
- Cloud Run
Üst düzey akış şeması

Ne oluşturacaksınız?
Oluşturacaklarınız
- Hizmet olarak Spanner verileri API'si için bir Java Spring Boot uygulaması
- Imagen kullanarak görüntü üretme kullanım alanı için Java Spring Boot uygulaması
- İstem girişi ve yanıtı için etkileşimli kullanıcı arayüzü
2. Şartlar
Başlamadan önce
- Google Cloud Console'daki proje seçici sayfasında bir Google Cloud projesi seçin veya oluşturun.
- Cloud projeniz için faturalandırmanın etkinleştirildiğinden emin olun. Bir projede faturalandırmanın etkin olup olmadığını kontrol etmeyi öğrenin.
- Gerekli tüm API'lerin (Cloud Spanner API, Vertex AI API, Cloud Run API, Cloud Functions API) etkinleştirildiğinden emin olun.
- bq önceden yüklenmiş olarak gelen, Google Cloud'da çalışan 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:

Projeniz ayarlanmamışsa ayarlamak için aşağıdaki komutu kullanın:
gcloud config set project <YOUR_PROJECT_ID>
- Başlamak için etkin Google Cloud projenizle Cloud Spanner sayfasına gidin.
3. Spanner ile verileri hazırlama
Uygulamayı oluşturmadan önce Cloud Spanner örneği, veritabanı ve tablosu oluşturarak veritabanı kurulumunu tamamlayalım. Cloud Spanner özellikleri, DDL, DML ve daha fazlası hakkında 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:
- Örnekler sayfasında ÖRNEK OLUŞTUR'u tıklayarak bir örnek oluşturun.
- Ayrıntıları aşağıdaki resimde gösterildiği gibi girin ve OLUŞTUR'u tıklayın:

- Oluşturulduktan sonra örnek genel bakış sayfasında VERİTABANI OLUŞTUR'u tıklayın.
- Veritabanının adını "first-spanner-db" olarak girin, DDL TEMPLATES (DDL ŞABLONLARI) bölümüne aşağıdaki DDL'yi girin ve SUBMIT'i (GÖNDER) 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 Spring Boot uygulamamızı oluşturmaya devam edebilmek için Yoga_Poses tablosuna birkaç satır ekleyelim.
- Soldaki Veritabanı bölmesinde Spanner Studio'yu tıklayın ve aşağıdaki resimde gösterildiği gibi yeni bir sorgu düzenleyici sekmesi açın:

- 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.
4. Poz verileri için Spring Boot ve Spanner ile REST API oluşturma
Spring Boot ve Google Cloud Console hakkında bilgi edinmek için bu blogu inceleyin.
- Spring Boot uygulamasını başlatma Bu uygulamayı sıfırdan başlatmak için bu blogu inceleyin. Depodan klonlamak ve işe koyulmak için Cloud Shell terminalinizde aşağıdaki komutu çalıştırmanız yeterlidir:
git clone https://github.com/AbiramiSukumaran/spanner-springb
Bu işlem, Cloud Shell makinenizde spanner-springb projesini oluşturmuş olmalıdır. Uygulamanın bileşenlerini anlamak için blogu inceleyin.
- Uygulamayı oluşturup çalıştırmak için Cloud Shell terminalinde aşağıdaki komutları çalıştırın:
cd spanner-springb
./mvnw package
./mvnw spring-boot:run
- Uygulamayı Cloud Run'da dağıtarak poz oluşturucu uygulamada kullanılabilir hale getirin. 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ı başlatma
Bu noktada, akış şemasının üst kısmını (Spanner verilerini hizmet olarak kullanıma sunma (REST API)) tamamladık. Şimdi de Spanner verilerini çağıran, istemle IMAGEN API'sini çağıran ve Base64 olarak kodlanmış dizeyi kullanıcı arayüzüne resim olarak döndüren bir istemci uygulaması oluşturalım.
- Artık Spring Boot proje yapısını ve önemini biliyorsunuz. Bu nedenle, Cloud Shell terminalinizde aşağıdaki komutu çalıştırarak depoyu Cloud Shell makinenize hızlıca klonlayacağız:
git clone https://github.com/AbiramiSukumaran/genai-posegen
Bu işlem, Cloud Shell makinenizde genai-posegen projesini oluşturmuş olmalıdır. Klonlanan proje yapısı, Cloud Shell düzenleyicisinde şu şekilde görünür:

PromptController Java sınıfında veritabanı hizmeti çağrısı, iş mantığının uygulanması ve Imagen'in üretken yapay zeka API çağrısı da bulunur. Bu sınıf, kullanıcı arayüzüne veri entegrasyonunu sağlayan Thymeleaf şablonlarıyla etkileşime girer. Bu sınıfta 3 hizmet yöntemi vardır: 1) istem girişini alma, 2) isteği işleme ve Imagen API'yi çağırma ve 3) Imagen yanıtını işleme.
Prompt ve Yoga, sırasıyla Imagen API ve Spanner veri sunucusu API'si ile arayüz oluşturmak için alanları, alıcıları ve ayarlayıcıları içeren POJO sınıflarıdır.
Şablonlar klasöründeki index ve getImage HTML dosyaları, kullanıcı arayüzü şablonlarını içerir ve ilgili klasörlerdeki JS ve CSS komut dosyalarına bağımlıdır.
Vertex AI Imagen API Entegrasyonu Görüntü üretme kullanım alanında, Vertex AI'ın Imagen API'sini aşağıdaki biçimde kullanıyoruz:
https://<<region>>- aiplatform.googleapis.com/v1/projects/<<your-project-id>>/locations/<<region>>/publishers/google/models/imagegeneration:predict
Imagen'in özellikleri hakkında daha fazla bilgiyi burada bulabilirsiniz. Yanıtı Base64 kodlamalı dize biçiminde döndürür. Bunu resmine dönüştürmek için getImage.HTML dosyasında aşağıdaki şekilde resim nesnesinde 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 taşıyıcı jetonu kimlik doğrulamasının etkinleştirilmiş olması gerekir. Bizim durumumuzda, uygulama varsayılan kimlik bilgileri JSON yaklaşımını kullandım. Bu özelliği, Cloud Shell terminalinden aşağıdaki komutu çalıştırıp terminaldeki talimatları uygulayarak etkinleştirebilirsiniz:
gcloud auth application-default login
Hesabınızla kimlik doğrulaması yapmak için "Y" girin. Erişime izin verin ve pop-up'ta gösterilen yetkilendirme kodunu kopyalayın. Bunu yaptığınız anda, uygulama varsayılan kimlik bilgilerini şu gibi bir konuma kaydedilen JSON dosyasında alırsınız: /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json.
Dosyayı indirin veya cat komutunu (cat /tmp/tmp.Fh0Gf4yF0V/application_default_credentials.json) çalıştırarak JSON dosyasının içeriğini kopyalayın ve PromptController.java sınıfının callImagen() yönteminde uygulamada kullanın. Kimlik doğrulama hakkında daha fazla bilgiyi burada bulabilirsiniz.
Kullanıcı Arayüzü Verileri ayrıştırıp kullanıcı arabirimi şablon dosyalarına aktarmak 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 görüntüyü oluşturmak için geçersiz kılma istemi eklemesine olanak tanır.
6. Derleme ve dağıtma
Kodu klonladığınıza, yer tutucuların değerlerini projenize, bölgenize ve kimlik doğrulama kimlik bilgilerinize uygun şekilde değiştirdiğinize göre artık uygulamayı oluşturup dağıtmaya geçebiliriz. Aşağıdaki 3 komutu tek tek kullanarak Cloud Shell terminalinde proje klasörüne gidin, derleyin ve ardından Cloud Shell makinesinde yerel olarak test için dağıtın:
cd genai-posegen
./mvnw package
./mvnw spring-boot:run
Uygulamayı Cloud Run'da dağıtarak bulutta kullanılabilir hale getirin. Bunu yapmak için proje klasöründeki Cloud Shell terminalinde 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 hizmet URL'sini terminalde görürsünüz. Bağlantıyı tıklayın ve poz görüntüsü üretme uygulamanızın Google Cloud'da sunucusuz olarak çalıştığını görün.

8. Temizleme
Bu yayında kullanılan kaynaklar için Google Cloud hesabınızın ücretlendirilmesini istemiyorsanız şu adımları uygulayın:
- Google Cloud Console'da Kaynakları yönetin sayfasına gidin.
- Proje listesinde silmek istediğiniz projeyi seçin ve Sil'i tıklayın.
- İletişim kutusunda proje kimliğini yazın ve projeyi silmek için Kapat'ı tıklayın.
- Projeyi silmek istemiyorsanız bu proje için yeni oluşturduğunuz örneğe gidip örnek genel bakış sayfasının sağ üst köşesindeki ÖRNEĞİ SİL düğmesini tıklayarak Spanner örneğini silin.
- Ayrıca Cloud Run hizmetleri sayfasına gidip bu projede oluşturulan hizmetleri seçebilir ve silme düğmesini tıklayarak hizmetleri silebilirsiniz.
9. Tebrikler
Bu blogda, Cloud Spanner'da verileri depolayan ve işleyen tam yığın Spring Boot uygulamasını, Cloud Run'da dağıtılan etkileşimli bir istemci uygulamasında Google Cloud Vertex AI'ın Imagen API'sini kullanarak pozlar oluşturacak şekilde geliştirdik. Bu blogun mimari şeması bölümünde, hiç yapmadığımız Cloud Functions (Java) bileşenini görüyor musunuz? Katkıda bulunmak isterseniz bu fırsattan yararlanabilirsiniz. getimage.html dosyasında bulunan 2 yöntemi (pozu veritabanına kaydetme ve resmi yükleme) gerçekleştirmek için 2 Java Cloud Functions işlevi uygulayabilirsiniz. Model hakkında daha fazla bilgi edinmek için Vertex AI'da Imagen belgelerine göz atın.