Bildgenerierungs-App mit Imagen und Mesop in Cloud Shell erstellen

Bildgenerierungs-App mit Imagen und Mesop in Cloud Shell erstellen

Informationen zu diesem Codelab

subjectZuletzt aktualisiert: Apr. 4, 2025
account_circleVerfasst von Katie Nguyen

1. Einführung

Stellen Sie sich vor, Sie könnten in Sekundenschnelle eine einfache Textbeschreibung in ein lebendiges, detailliertes Bild umwandeln. Das ist die Stärke generativer Medien, eines sich rasant entwickelnden Bereichs, der die Art und Weise verändert, wie wir visuelle Inhalte erstellen und damit interagieren. Mit Modellen wie Imagen 3 von Google in Vertex AI stehen Anwendungsentwicklern hochmoderne generative KI-Funktionen zur Verfügung.

Imagen 3 ist das bisher beste Text-zu-Bild-Modell von Google. Damit lassen sich Bilder mit erstaunlichen Details erstellen. So haben Entwickler mehr Kontrolle beim Erstellen von KI-Produkten der nächsten Generation, die ihre Vorstellungen in hochwertige visuelle Assets umwandeln. Weitere Informationen zu Imagen in Vertex AI

In diesem Codelab erfahren Sie, wie Sie die Vorteile von Imagen mit dem Google Gen AI SDK nutzen. Sie erfahren nicht nur, wie Sie beeindruckende Bilder aus Textprompts generieren, sondern auch, wie Sie diese Funktion mit Mesop, einem Python-UI-Framework, in eine Webanwendung einbinden.

Lerninhalte

  • Google Gen AI SDK für Python verwenden, um mit Imagen 3 zu interagieren
  • Bilder aus Text-Prompts generieren
  • Mesop-App erstellen und über Cloud Shell ausführen

Voraussetzungen

  • Grundlegendes Verständnis von Python
  • Befehle in einem Cloud Shell-Terminal ausführen
  • Einen Computer mit Zugriff auf Cloud Shell

2. Umgebung einrichten und Abhängigkeiten installieren

  1. Öffnen Sie den Cloud Shell-Editor.
  2. Klicken Sie oben rechts auf die Schaltfläche „Terminal öffnen“.
  3. Erstellen Sie einen neuen Ordner, indem Sie den folgenden Befehl in das Terminal eingeben:
mkdir my-imagen-app
  1. Wechseln Sie das Verzeichnis zu Ihrem neuen Ordner:
cd my-imagen-app
  1. So erstellen Sie eine virtuelle Umgebung in Python 3:
python3 -m venv myenv
  1. Aktivieren Sie die virtuelle Umgebung:
source myenv/bin/activate
  1. Mesop installieren:
pip3 install mesop
  1. Installieren Sie das Google Gen AI SDK for Python:
pip install google-genai
  1. Erstellen Sie eine Python-Datei:
touch main.py

3. App-Einrichtung

Der gesamte Code, der zum Ausführen der Mesop-App erforderlich ist, befindet sich in main.py. Kopieren Sie die einzelnen Schritte und fügen Sie sie nacheinander in diese Datei im Cloud Shell-Editor ein.

Bibliotheken importieren

import base64
import mesop as me
from google import genai
from google.genai import types

Google Cloud-Projektinformationen festlegen und Client erstellen

  1. Legen Sie Ihre Projekt-ID fest:
PROJECT_ID = "[your-project-id]"

Ersetzen Sie [your-project-id] durch den Namen Ihres Google Cloud-Projekts, wenn Sie diese Codezeile kopieren.

  1. Client erstellen:
client = genai.Client(vertexai=True, project=PROJECT_ID, location="us-central1")

Bildgenerierungsmodell laden

imagen_model = "imagen-3.0-generate-002"

Zustandsverwaltung

Wenn Sie die Zustandsverwaltung definieren, können Sie Informationen während des gesamten Kaufprozesses speichern.

@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: Die vom Nutzer bereitgestellte Eingabe, die für die Bildgenerierung verwendet wird.
  • enhanced_prompt: Das imagen-3.0-generate-002-Modell bietet die Möglichkeit, den angegebenen Prompt zu verbessern. Aus Ihrem ursprünglichen Prompt wird ein neuer, detaillierter Prompt erstellt, um Bilder in höherer Qualität zu generieren. Dieser wird in dieser Variablen zurückgegeben.
  • img_data: Der Cloud Storage-Speicherort oder die Bildbytes eines mit Imagen 3 generierten Bildes.

4. Hilfsfunktionen definieren

Ladefunktion

Dieser Code wird beim Laden der Anwendung ausgeführt. Dadurch wird der Modus der App auf Systemfarben gesetzt.

def load(e: me.LoadEvent):
  me.set_theme_mode("system")

Unkenntlichmachen-Funktion

Mit dieser Funktion wird die Nutzereingabe in Ihrer Statusvariablen gespeichert.

def on_blur(e: me.InputBlurEvent):
    state
= me.state(State)
    state
.input = e.value

5. Bild mit Imagen generieren

Diese Funktion wird aufgerufen, wenn ein Nutzer auf eine Schaltfläche klickt, um einen Textprompt für die Bildgenerierung einzureichen.

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}"

Sie können die Einstellungen unter GenerateImagesConfig konfigurieren:

  • number_of_images: 1, 2, 3, 4
  • aspect_ratio: 1:1, 9:16, 16:9, 3:4, 4:3
  • safety_filter_level: BLOCK_LOW_AND_ABOVE, BLOCK_MEDIUM_AND_ABOVE, BLOCK_ONLY_HIGH, BLOCK_NONE
  • person_generation: DONT_ALLOW, ALLOW_ADULT, ALLOW_ALL

Hinweis:Die einzige Option, die ohne zusätzliche Zulassungsliste funktioniert, ist „DONT_ALLOW“.

6. App-Layout strukturieren

@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"),
            )

Mit diesem Code wird eine Single-Page-Anwendung mit den folgenden Komponenten erstellt:

  • Titel
  • Textfeld für die Eingabe eines Bild-Prompts
  • Sendeschaltfläche, die die Funktion generate_image aufruft
  • Ein von Imagen generiertes Bild
  • Der optimierte Prompt, der mit dem Bild zurückgegeben wurde

7. Anwendung in Cloud Shell ausführen

  1. Nachdem Sie alle Code-Snippets in main.py kopiert haben, können Sie die Mesop-Anwendung über Ihr Cloud Shell-Terminal ausführen.
    mesop main.py
  2. Klicken Sie jetzt rechts oben auf die Schaltfläche „Webvorschau“ und dann auf „Port ändern“. Geben Sie im Feld „Portnummer“ die Zahl 32123 ein und klicken Sie dann auf „Ändern und Vorschau“. Ein neues Fenster sollte geöffnet werden, in dem Sie die geladene App sehen können. Es sollte in etwa so aussehen: App-Screenshot

8. Test Imagen 3

Hier können Sie Imagen mit Ihren eigenen Textprompts ausprobieren. Sie können Bilder in verschiedenen Stilen erstellen, von fotorealistischen Bildern über Animationen bis hin zu verschiedenen künstlerischen Stilen. Sie können auch bestimmte Kamerawinkel, Objektive und mehr angeben. Ihr ursprünglicher Textprompt wird auch mithilfe einer LLM-basierten Funktion umgeschrieben, die Bilder in höherer Qualität liefern soll, die den Zweck des ursprünglichen Prompts besser widerspiegeln.

Hinweis:Für das Generieren von Bildern von Personen ist zusätzlicher Zugriff erforderlich. In der Zwischenzeit erhalten Sie einen Fehler, wenn Ihr Prompt die Generierung von Personen oder Gesichtern enthält.

Hier sind einige Beispiele für Prompts, die Sie ausprobieren können:

  1. Eine beige Baseballkappe mit der Aufschrift „Good Vibes“ in weißen, mit Luftblasen genähten Buchstaben, die neongrün umrandet sind.
  2. Ein skurril eingerichteter Süßwarenladen.
  3. Eine Cartoon-Postkarte von Las Vegas mit dem Namen der Stadt und einer Briefmarke in der rechten Ecke.
  4. Ein Welpe und ein Kätzchen spielen mit einem Wollknäuel.

9. Bereinigen

Anwendung beenden

Kehren Sie zum Terminal zurück, in dem Sie die Anwendung gestartet haben, und beenden Sie sie mit Strg C.

Virtuelle Umgebung deaktivieren

Geben Sie in demselben Terminal den folgenden Befehl ein:

deactivate

10. Fazit

Glückwunsch! Sie haben dieses Codelab erfolgreich abgeschlossen, indem Sie eine Anwendung mit Imagen erstellt und einige Bilder generiert haben.

Umfrage

Teilen Sie uns mit, was Sie von diesem Codelab halten, indem Sie an dieser kurzen Umfrage teilnehmen.

Nächste Schritte