Leerpad
Imagen 3 is een tekst-naar-beeldmodel dat gedetailleerde scènes in verschillende stijlen nauwkeurig kan weergeven en zelfs tekst in afbeeldingen kan opnemen, waardoor het geschikt is voor toepassingen zoals advertentie- en contentcreatie voor media.
We kunnen Imagen 3 gebruiken via de Vertex AI Studio-interface of het direct via een API in applicaties integreren.
In deze tutorial leg ik uit hoe je afbeeldingen genereert met Imagen 3 via de Google Generative API met Python. Ik neem je mee door praktische voorbeelden die laten zien hoe je de omgeving instelt, de benodigde code schrijft en deze technologie in je projecten integreert. Of je nu je applicaties wilt verrijken met dynamische beelden of gewoon nieuwsgierig bent: deze gids biedt een duidelijke route om Imagen 3 programmatisch te begrijpen en te gebruiken.
De Google Generative AI API instellen
Om te beginnen met Imagen 3 in Python, moeten we een paar essentiële stappen uitvoeren. Eerst maken we een Google Cloud-project. Zodra ons project klaar is, genereren we een API-sleutel. Met deze sleutel kan onze Python-code communiceren met de Imagen 3-service.
Een Google Cloud-project maken
Een Google Cloud-project maken is de eerste stap om de AI-API van Google te gebruiken. Laten we samen het proces doorlopen:
- Ga naar de Google Cloud Console: We beginnen door te navigeren naar de Google Cloud Console. Je moet inloggen met je Google-account.
- Selecteer of maak een nieuw project: In de console vind je in de bovenste navigatiebalk het vervolgkeuzemenu voor projecten. Als je daarop klikt, kun je een bestaand project selecteren of een nieuw project maken. We kiezen "New Project" om door te gaan.
- Vul projectgegevens in: Er verschijnt een eenvoudig formulier met basisinformatie. We kunnen elke naam voor het project kiezen, maar het is handig om iets beschrijvends te nemen. Dit kan later nog worden gewijzigd. We gebruiken
Imagen-tutorial. De organisatie kan leeg blijven.

De API-sleutel maken
Nu het Google Cloud-project is aangemaakt, kunnen we een API-sleutel maken door naar de API key-pagina in Google AI Studio te gaan.
Klik op de knop "Create API key" om de sleutel te maken:

Typ in de pop-up de naam van het project dat we hierboven hebben gemaakt, selecteer het en klik op "Create API key in existing project":

Kopieer de sleutel en maak een bestand met de naam .env in dezelfde map als waar we het Python-script schrijven. De inhoud van het bestand .env moet zijn:
GEMINI_API_KEY=<paste_your_key_here>
Factureringsaccount
Als we de API-sleutel nu zouden gebruiken, krijgen we een foutmelding: "Imagen API is only accessible to billed users at this time." Dit komt omdat de API niet gratis is en we eerst een factureringsaccount aan het project moeten koppelen voordat we het kunnen gebruiken.
Op het moment van schrijven kost het genereren van een afbeelding met Imagen 3 $0,03. Bekijk hun prijspagina voor meer informatie.
Om een factureringsaccount toe te voegen, klik je op de knop "Set up Billing" naast de API-sleutel in Google AI Studio.

Je wordt dan doorgestuurd naar de Google Cloud-website, waar je ofwel een bestaand factureringsaccount kunt selecteren door op "Link a billing account" te klikken, of een nieuw account kunt maken via "Manage billing accounts".

Laten we aannemen dat we er nog geen hebben, dus we gaan naar "Manage billing accounts". Links bovenaan de pagina staat een knop "Create account". Om het account te maken, vullen we onze persoonsgegevens in en een creditcard voor de betalingen.
Een afbeelding genereren met Imagen 3 in Python
Omgeving instellen met Anaconda
In deze tutorial gebruiken we Anaconda, een populair platform dat pakketbeheer en projectconfiguratie vereenvoudigt, waardoor Python-scripts draaien makkelijker wordt.
Je kunt Anaconda installeren via hun officiële website.
Om de Anaconda-omgeving op te zetten, open je een terminal en:
- Maak een environment:
conda create -n imagen python=3.9. Deze opdracht maakt een environment genaamdimagendie Python-versie 3.9 gebruikt. - Activeer de environment:
conda activate imagen. - Installeer het Google generative AI-pakket:
pip install -q -U google-genai. - Installeer een afbeeldingsverwerkingspakket om de gegenereerde afbeeldingen te verwerken:
pip install pillow. - Installeer een pakket om de API-sleutel te laden:
pip install python-dotenv
We kunnen de pakketten ook direct installeren zonder Anaconda, maar er is een risico dat sommige al geïnstalleerde pakketten conflicteren met nieuwe pakketten of dat onze Python-installatie een andere Python-versie gebruikt. Met Anaconda voorkom je deze mogelijke problemen.
Onze eerste afbeelding genereren
We zijn nu klaar om Imagen 3 te gebruiken. Maak een nieuw Python-script, bijvoorbeeld gen_image.py, in dezelfde map als het .env-bestand.
Eerst importeren we de benodigde pakketten:
# Google generative AI:
from google import genai
from google.genai import types
# Packages to process the generated image:
from PIL import Image
from io import BytesIO
# Packages to load the .env file:
import os
from dotenv import load_dotenv
Vervolgens laden we de API-sleutel uit het .env-bestand:
load_dotenv()
api_key = os.getenv("GEMINI_API_KEY")
Daarna initialiseren we de Google generative AI-client. Dit is het object waarmee we communiceren met de Google API:
client = genai.Client(api_key=api_key)
Om een afbeelding te genereren gebruiken we de functie client.models.generate_images():
prompt="""
A dog surfing at the beach
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
number_of_images=1,
)
)
Tot slot tonen we de gegenereerde afbeelding met het Image-object:
for generated_image in response.generated_images:
image = Image.open(BytesIO(generated_image.image.image_bytes))
image.show()
Hier is het resultaat:

Tekstgeneratie
Een van de interessante functies van Imagen 3, in vergelijking met andere tekst-naar-beeldmodellen, is de mogelijkheid om tekst te genereren. Laten we het proberen door het woord “Tea” te laten genereren met verse theeblaadjes:
prompt="""
Word "tea" made from fresh tea leaves, white background
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
)
Hier is het resultaat:

Opties voor beeldgeneratie met Imagen 3
De opties voor beeldgeneratie geef je op via de types.GenerateImagesConfig-opties. In het bovenstaande voorbeeld hebben we alleen het aantal te genereren afbeeldingen opgegeven:
config=types.GenerateImagesConfig(
number_of_images=1,
)
In deze sectie verkennen we de andere opties die de Imagen 3 API biedt. Bekijk de officiële documentatie voor meer informatie.
Meerdere afbeeldingen genereren
We kunnen de parameter number_of_images gebruiken om meerdere afbeeldingen met één prompt te genereren. Standaard worden er vier afbeeldingen gegenereerd.
Laten we twee afbeeldingen voor een stripboek genereren.
prompt="""
Single comic book panel of two people overlooking a destroyed city.
A speech bubble points from one of them and says: I guess this is the end.
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
number_of_images=2,
)
)
Hier is het resultaat:

Dit is opnieuw een voorbeeld van tekst in afbeeldingen genereren. Hoewel de afbeelding links ongewenste extra tekst bevat, kunnen we door meerdere afbeeldingen te genereren onze kansen vergroten om de gewenste output te krijgen. De afbeelding rechts voldoet bijna volledig aan onze prompt.
De beeldverhouding regelen
Standaard zijn de gegenereerde afbeeldingen vierkant met een 1:1-beeldverhouding. Het model ondersteunt de volgende beeldverhoudingen: 1:1, 3:4, 4:3, 9:16 en 16:9.
Laten we een 9:16-afbeelding genereren voor gebruik als telefoonachtergrond:
prompt="""
A drone shot of a river flowing between mountains with a stormy sky.
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
aspect_ratio="9:16",
)
)
Hier is het resultaat:

Veiligheidsfilter
De documentatie vermeldt dat we safety_filter_level kunnen gebruiken om het niveau van beeldfiltering te specificeren. Elke gegenereerde afbeelding krijgt een waarschijnlijkheidsscore die aangeeft hoe groot de kans is dat de afbeelding onveilig is (bijvoorbeeld ongepaste inhoud).
Het instellen van het veiligheidsfilter is belangrijk omdat het helpt om te zorgen dat de gegenereerde inhoud passend is en aansluit bij gebruikersvoorkeuren, en zo een veilige en respectvolle omgeving voor verschillende toepassingen te behouden.
De documentatie zegt dat er drie niveaus worden ondersteund:
BLOCK_LOW_AND_ABOVE: Blokkeer afbeeldingen zelfs bij een lage waarschijnlijkheidsscore.BLOCK_MEDIUM_AND_ABOVE: Blokkeer alleen afbeeldingen met middelhoge en hoge waarschijnlijkheidsscores.BLOCK_ONLY_HIGH: Blokkeer alleen afbeeldingen met een hoge waarschijnlijkheidsscore
Na experimenteren blijkt echter dat de API momenteel alleen de optie BLOCK_LOW_AND_ABOVE ondersteunt. Iets anders opgeven resulteert in een fout.
Personen genereren
We kunnen regelen of het model personen mag genereren met de optie person_generation. Er zijn twee opties:
DONT_ALLOW: Afbeeldingen met mensen erin worden geblokkeerd.ALLOW_ADULT: Hiermee kun je afbeeldingen genereren met mensen erin (alleen volwassenen).
Standaard is het toegestaan om mensen te genereren. Als we de optie bijvoorbeeld instellen om geen mensen toe te staan en we proberen een afbeelding van iemand die kookt te genereren, krijgen we geen afbeeldingen.
prompt="""
A person cooking.
"""
response = client.models.generate_images(
model="imagen-3.0-generate-002",
prompt=prompt,
config=types.GenerateImagesConfig(
person_generation="DONT_ALLOW",
)
)
print(response.generated_images)
Hier is de output:
None
Goede prompts maken voor Imagen 3
De officiële documentatie biedt een uitgebreide promptgids voor Imagen 3, dus ik herhaal die hier niet. Dit zijn de kernideeën voor een goede prompt:
- Basisprincipes van promptschrijven:
- Onderwerp: Focus op het hoofdobject, de persoon of de scène die je wilt weergeven.
- Context en achtergrond: Beschrijf de setting of omgeving waarin het onderwerp zich bevindt.
- Stijl: Geef de gewenste artistieke of fotografische stijl op (bijv. schets, schilderij, foto).
- Gebruik beschrijvende taal: Gebruik gedetailleerde bijvoeglijke naamwoorden en context om de gewenste output te verduidelijken.
- Verwijs naar specifieke stijlen: Gebruik bekende kunstenaars of kunststromingen om de esthetiek te sturen.
- Tekst in afbeeldingen: Beperk tekst tot 25 tekens of minder en gebruik duidelijke zinnen om extra informatie te geven.
- Prompt parameteriseren: Als we meerdere afbeeldingen in dezelfde stijl moeten genereren, is het een goed idee om een herbruikbare prompttemplate te maken en alleen het veranderende deel als input te geven.
- Fotografie: Specificeer camera-instellingen, lenstypes en belichting om het resultaat te beïnvloeden.
- Kunst: Gebruik omschrijvingen zoals "een schilderij van..." of specifieke technieken zoals "aquarelschilderij van...".
- Kwaliteitsmodificatoren voor afbeeldingen: Gebruik trefwoorden zoals "hoge kwaliteit" of "4K" om de kwaliteit van de output te verbeteren.
- Fotorealistische beelden: Neem technische details op zoals lenstype en brandpuntsafstand om de realiteit te vergroten.
Afbeeldingen bewerken en aanpassen
Imagen 3 kan ook afbeeldingen bewerken en aanpassen. Helaas zijn deze functies nog vergrendeld en alleen toegankelijk voor specifieke gebruikers.
Met de personalisatiefunctie kun je bijvoorbeeld een referentieafbeelding op basis van een prompt aanpassen. In het voorbeeld wordt een foto van een vrouw gegeven, en de prompt past die afbeelding aan naar dezelfde persoon die sinaasappels vasthoudt.
Meer informatie hierover en het formulier voor toegangsaanvraag vind je op hun website.
Conclusie
In deze tutorial hebben we geleerd hoe je Imagen 3 gebruikt om afbeeldingen te maken met Python en Google’s Generative API. Over het algemeen ben ik tevreden met de output die ik kreeg tijdens het experimenteren met de API. Ik vind de resultaten van hoge kwaliteit en met minder AI-artefacten, waardoor ze moeilijker te onderscheiden zijn van echte afbeeldingen.
De mogelijkheid om met tekst in afbeeldingen te werken is handig voor branding en marketing. Al met al vind ik dat dit model het goed doet. Ik zou alleen willen dat alle functies open waren, want ik denk dat beeldbewerking nog nuttiger is dan beeldgeneratie.


