Cloud Shell'da Imagen ve Mesop ile Görüntü Üretme Uygulaması oluşturma
Bu codelab hakkında
1. Giriş
Basit bir metin açıklamasını saniyeler içinde canlı ve ayrıntılı bir resme dönüştürmeyi hayal edin. Bu, görsel içerikleri oluşturma ve bu içeriklerle etkileşim kurma şeklinizi yeniden şekillendiren, hızla gelişen bir alan olan üretken medyanın gücüdür. Google'ın Vertex AI'daki Imagen 3 gibi modeller, uygulama geliştiricilere en gelişmiş üretken yapay zeka özelliklerini sunuyor.
Imagen 3, Google'ın bugüne kadarki en yüksek kaliteli metin-resim modelidir. Bu kamera, şaşırtıcı ayrıntılara sahip görüntüler oluşturabilir. Bu sayede geliştiriciler, hayal güçlerini yüksek kaliteli görsel öğelere dönüştüren yeni nesil yapay zeka ürünleri oluştururken daha fazla kontrole sahip olur. Vertex AI'da Imagen hakkında daha fazla bilgi edinin.
Bu kod laboratuvarı, Google Gen AI SDK'sını kullanarak Imagen'in gücünden yararlanmanıza rehberlik edecektir. Yalnızca metin istemlerinden çarpıcı resimler oluşturmayı keşfetmekle kalmaz, aynı zamanda bir Python kullanıcı arayüzü çerçevesi olan Mesop'u kullanarak bu özelliği bir web uygulamasına entegre edersiniz.
Ön koşullar
- Faturalandırma ve Vertex AI API'nin etkin olduğu bir Google Cloud projesi. Proje ve geliştirme ortamı oluşturma hakkında daha fazla bilgi edinin.
Neler öğreneceksiniz?
- Imagen 3 ile etkileşimde bulunmak için Python için Google Gen AI SDK'sını kullanma
- Metin istemlerinden resim oluşturma
- Mesop uygulaması oluşturma ve Cloud Shell'den çalıştırma
İhtiyacınız olanlar
- Python hakkında temel düzeyde bilgi
- Cloud Shell terminalinde komut çalıştırma deneyimi
- Cloud Shell'e erişimi olan bir bilgisayar
2. Ortamı ayarlama ve bağımlılıkları yükleme
- Cloud Shell Düzenleyici'yi açın
- Sağ üst köşedeki Terminal'i Aç düğmesini tıklayın.
- Terminale aşağıdaki komutu girerek yeni bir klasör oluşturun:
mkdir my-imagen-app
- Dizinleri yeni klasörünüzle değiştirin:
cd my-imagen-app
- Python 3'te sanal ortam oluşturma:
python3 -m venv myenv
- Sanal ortamı etkinleştirin:
source myenv/bin/activate
- Mesop'u yükleme:
pip3 install mesop
- Python için Google Gen AI SDK'sını yükleyin:
pip install google-genai
- Python dosyası oluşturun:
touch main.py
3. Uygulama kurulumu
Mesop uygulamasını çalıştırmak için gereken tüm kod main.py
içinde bulunur. Sonraki adımların her birinde, bu dosyayı Cloud Shell Düzenleyici'ye kopyalayıp sırayla yapıştırın.
Kitaplıkları içe aktarma
import base64
import mesop as me
from google import genai
from google.genai import types
Google Cloud proje bilgilerini ayarlama ve istemci oluşturma
- Proje kimliğinizi ayarlayın:
PROJECT_ID = "[your-project-id]"
Bu kod satırını kopyalarken [your-project-id]
yerine Google Cloud projenizin adını yazın.
- İstemci oluşturma:
client = genai.Client(vertexai=True, project=PROJECT_ID, location="us-central1")
Resim oluşturma modelini yükleme
imagen_model = "imagen-3.0-generate-002"
Durum yönetimi
Durum yönetimini tanımlamak, kullanıcı yolculuğunuz boyunca bilgi depolamanıza olanak tanır.
@me.stateclass
class State:
input: str = ""
enhanced_prompt: str = ""
img_data: str = "https://storage.googleapis.com/cloud-samples-data/generative-ai/image/flowers.png"
input
: Kullanıcı, resim oluşturmak için kullanılacak girişi sağladı.enhanced_prompt
:imagen-3.0-generate-002
modeli, sağladığınız istemi geliştirme seçeneği sunar. Daha yüksek kaliteli resimler oluşturmanıza yardımcı olmak için orijinal isteminizden yeni ve ayrıntılı bir istem oluşturulur ve bu değişkende döndürülür.img_data
: Imagen 3 ile oluşturulan bir resmin Cloud Storage konumu veya resim baytları.
4. Yardımcı işlevleri tanımlama
Yükleme işlevi
Bu kod, uygulama yüklendiğinde yürütülür. Uygulamanın modunu sistem renklerine ayarlar.
def load(e: me.LoadEvent):
me.set_theme_mode("system")
Bulanıklaştırma işlevi
Bu işlev, kullanıcı girişini durum değişkeninize kaydeder.
def on_blur(e: me.InputBlurEvent):
state = me.state(State)
state.input = e.value
5. Imagen ile resim oluşturma
Bu işlev, kullanıcı bir düğmeyi tıklayarak resim oluşturma için metin istemi gönderdiğinde çağrılır.
def generate_image(e: me.ClickEvent):
state = me.state(State)
image = client.models.generate_images(
model=imagen_model,
prompt=state.input,
config=types.GenerateImagesConfig(
number_of_images=1,
aspect_ratio="1:1",
enhance_prompt=True,
safety_filter_level="BLOCK_MEDIUM_AND_ABOVE",
person_generation="DONT_ALLOW",
)
)
img = image.generated_images[0].image.image_bytes
# Encode image in Base64 to display in web app
img64 = base64.b64encode(img).decode('utf-8')
state.enhanced_prompt = image.generated_images[0].enhanced_prompt
state.img_data = f"data:image/png;base64,{img64}"
GenerateImagesConfig
bölümündeki ayarları yapılandırabilirsiniz:
number_of_images
: 1, 2, 3, 4aspect_ratio
: 1:1, 9:16, 16:9, 3:4, 4:3safety_filter_level
: BLOCK_LOW_AND_ABOVE, BLOCK_MEDIUM_AND_ABOVE, BLOCK_ONLY_HIGH, BLOCK_NONEperson_generation
: DONT_ALLOW, ALLOW_ADULT, ALLOW_ALL
Not: Ek izin verilenler listesine ekleme yapmadan çalışacak tek seçenek DONT_ALLOW'tır.
6. Yapı uygulamasının düzeni
@me.page(
on_load=load,
path="/",
title="Imagen 3",
)
def app():
s = me.state(State)
with me.box(
style=me.Style(
display="grid",
width="100%",
place_items="center",
margin=me.Margin(top=100),
)
):
me.text(text="Imagen 3: Image Generation", type="headline-3", style=me.Style(font_family="Google Sans"))
with me.box(
style=me.Style(
border_radius=16,
padding=me.Padding.all(8),
display="flex",
)
):
with me.box(
style=me.Style(flex_grow=1)
):
me.native_textarea(
autosize=True,
on_blur=on_blur,
min_rows=8,
placeholder="Enter your image prompt",
style=me.Style(
padding=me.Padding(top=16, left=16),
width="700px",
border_radius=16,
outline="none",
overflow_y="auto",
border=me.Border.all(
me.BorderSide(style="none"),
),
font_family="Google Sans",
),
)
with me.content_button(
type="icon",
on_click=generate_image,
):
me.icon("send")
with me.box(style=me.Style(margin=me.Margin.all(8),
width="700px",
display="flex",
align_items="center")
):
me.image(
src=s.img_data,
style=me.Style(width="350px", padding=me.Padding.all(16), border_radius=36)
)
with me.box(
style=me.Style(
padding=me.Padding.all(8),
background="white",
height="400px",
width="400px",
border_radius=16,
)
):
me.text(text="Enhanced Prompt:", style=me.Style(font_family="Google Sans", font_weight="bold"))
me.text(text=s.enhanced_prompt, style=me.Style(padding=me.Padding.all(10), font_family="Google Sans"),
)
Bu kod, aşağıdaki bileşenleri içeren tek sayfalık bir uygulama oluşturur:
- Başlık
- Resim istemi girilecek metin alanı
generate_image
işlevini çağıran gönder düğmesi- Imagen tarafından oluşturulmuş bir resim
- Resim ile birlikte döndürülen gelişmiş istem
7. Uygulamayı Cloud Shell'de çalıştırma
- Tüm kod snippet'lerini
main.py
içine kopyaladıktan sonra Mesop uygulamasını Cloud Shell terminalinizden çalıştırabilirsiniz.mesop main.py
- Ardından, sağ üst köşedeki Web Önizleme düğmesini ve ardından Bağlantı noktasını değiştir'i tıklayın. Bağlantı Noktası Numarası kutusuna 32123 yazın ve ardından Değiştir ve Önizle'yi tıklayın. Yüklenen uygulamayı görüntüleyebileceğiniz yeni bir pencere açılır. Bu pencere şu şekilde görünür:
8. Test Imagen 3
Burada, kendi metin istemlerinizle Imagen'ı deneyebilirsiniz. Fotoğraf gerçekçiliğinden animasyona ve farklı sanatsal stillere kadar çeşitli stillerde resimler oluşturabilirsiniz. Ayrıca belirli kamera açılarını, lensleri ve daha fazlasını da belirtebilirsiniz. Orijinal metin isteminiz de LLM tabanlı bir özellik aracılığıyla yeniden yazılır. Bu özellik, orijinal istemin amacını daha iyi yansıtan daha yüksek kaliteli resimler oluşturmayı amaçlar.
Not: İnsanların yer aldığı görseller oluşturmak için ek erişim gerekir. Bu süre zarfında isteminiz kişi veya yüz oluşturma içeriyorsa hata alırsınız.
Deneyebileceğiniz bazı istem örnekleri:
- Üzerinde neon yeşil renkli kenarlı, kabarık beyaz dikişlerle "good vibes" (iyi hisler) yazan bej beyzbol şapkası.
- Sıra dışı bir şeker dükkanı.
- Las Vegas'ın karikatür olarak resmedildiği ve sağ köşesinde posta pulu bulunan bir kartpostal.
- Bir köpek yavrusu ve bir yavru kedi yumakla oynuyor.
9. Temizleme
Uygulamayı durdurma
Uygulamayı başlattığınız terminale geri dönün ve Ctrl C ile çıkın.
Sanal ortamı devre dışı bırakma
Aynı terminalde aşağıdaki komutu yazın:
deactivate