LLM'er kan mere end bare tekstgenerering. Det er også muligt at generere billeder ud fra tekstbeskrivelser. At have billeder som en modalitet kan være yderst nyttigt inden for en række områder som MedTech, arkitektur, turisme, spiludvikling og mere. I dette kapitel vil vi se nærmere på de to mest populære modeller til billedgenerering, DALL-E og Midjourney.
I denne lektion vil vi dække:
- Billedgenerering og hvorfor det er nyttigt.
- DALL-E og Midjourney, hvad de er, og hvordan de fungerer.
- Hvordan du kan bygge en applikation til billedgenerering.
Efter at have gennemført denne lektion vil du kunne:
- Bygge en applikation til billedgenerering.
- Definere grænser for din applikation med metaprompter.
- Arbejde med DALL-E og Midjourney.
Applikationer til billedgenerering er en fantastisk måde at udforske mulighederne med Generativ AI. De kan bruges til eksempelvis:
-
Billedredigering og syntese. Du kan generere billeder til en række anvendelser, såsom billedredigering og billedsyntese.
-
Anvendelse i forskellige industrier. De kan også bruges til at generere billeder til en række industrier som MedTech, turisme, spiludvikling og mere.
Som en del af denne lektion vil vi fortsætte med at arbejde med vores startup, Edu4All. Eleverne vil skabe billeder til deres opgaver, præcis hvilke billeder er op til eleverne, men de kunne være illustrationer til deres egen eventyrfortælling, skabe en ny karakter til deres historie eller hjælpe dem med at visualisere deres ideer og koncepter.
Her er et eksempel på, hvad Edu4All's elever kunne generere, hvis de arbejder i klassen med monumenter:
ved hjælp af en prompt som
"Hund ved siden af Eiffeltårnet i tidligt morgensollys"
DALL-E og Midjourney er to af de mest populære modeller til billedgenerering, der giver dig mulighed for at bruge prompts til at generere billeder.
Lad os starte med DALL-E, som er en Generativ AI-model, der genererer billeder ud fra tekstbeskrivelser.
DALL-E er en kombination af to modeller, CLIP og diffused attention.
-
CLIP, er en model, der genererer embeddings, som er numeriske repræsentationer af data, fra billeder og tekst.
-
Diffused attention, er en model, der genererer billeder fra embeddings. DALL-E er trænet på et datasæt af billeder og tekst og kan bruges til at generere billeder ud fra tekstbeskrivelser. For eksempel kan DALL-E bruges til at generere billeder af en kat med en hat eller en hund med en mohawk.
Midjourney fungerer på en lignende måde som DALL-E; det genererer billeder ud fra tekstprompter. Midjourney kan også bruges til at generere billeder ved hjælp af prompts som "en kat med en hat" eller "en hund med en mohawk".
Billedkredit Wikipedia, billede genereret af Midjourney
Først, DALL-E. DALL-E er en Generativ AI-model baseret på transformer-arkitekturen med en autoregressiv transformer.
En autoregressiv transformer definerer, hvordan en model genererer billeder ud fra tekstbeskrivelser; den genererer én pixel ad gangen og bruger derefter de genererede pixels til at generere den næste pixel. Den passerer gennem flere lag i et neuralt netværk, indtil billedet er færdigt.
Med denne proces kontrollerer DALL-E attributter, objekter, karakteristika og mere i det billede, den genererer. Dog har DALL-E 2 og 3 mere kontrol over det genererede billede.
Så hvad kræver det at bygge en applikation til billedgenerering? Du har brug for følgende biblioteker:
- python-dotenv, det anbefales stærkt at bruge dette bibliotek til at holde dine hemmeligheder i en .env-fil væk fra koden.
- openai, dette bibliotek bruges til at interagere med OpenAI API.
- pillow, til at arbejde med billeder i Python.
- requests, til at hjælpe dig med at lave HTTP-forespørgsler.
Hvis det ikke allerede er gjort, skal du følge instruktionerne på Microsoft Learn-siden for at oprette en Azure OpenAI-ressource og model. Vælg DALL-E 3 som model.
-
Opret en fil .env med følgende indhold:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Find disse oplysninger i Azure OpenAI Foundry Portal for din ressource i afsnittet "Deployments".
-
Saml ovenstående biblioteker i en fil kaldet requirements.txt som følger:
python-dotenv openai pillow requests -
Opret derefter et virtuelt miljø og installer bibliotekerne:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtFor Windows, brug følgende kommandoer til at oprette og aktivere dit virtuelle miljø:
python3 -m venv venv venv\Scripts\activate.bat
-
Tilføj følgende kode i en fil kaldet app.py:
import openai import os import requests from PIL import Image import dotenv from openai import OpenAI, AzureOpenAI # import dotenv dotenv.load_dotenv() # configure Azure OpenAI service client client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" ) try: # Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] ) # Set the directory for the stored image image_dir = os.path.join(os.curdir, 'images') # If the directory doesn't exist, create it if not os.path.isdir(image_dir): os.mkdir(image_dir) # Initialize the image path (note the filetype should be png) image_path = os.path.join(image_dir, 'generated-image.png') # Retrieve the generated image image_url = generation_response.data[0].url # extract image URL from response generated_image = requests.get(image_url).content # download the image with open(image_path, "wb") as image_file: image_file.write(generated_image) # Display the image in the default image viewer image = Image.open(image_path) image.show() # catch exceptions except openai.InvalidRequestError as err: print(err)
Lad os forklare denne kode:
-
Først importerer vi de biblioteker, vi har brug for, inklusive OpenAI-biblioteket, dotenv-biblioteket, requests-biblioteket og Pillow-biblioteket.
import openai import os import requests from PIL import Image import dotenv
-
Derefter indlæser vi miljøvariablerne fra .env-filen.
# import dotenv dotenv.load_dotenv()
-
Efter det konfigurerer vi Azure OpenAI serviceklienten.
# Get endpoint and key from environment variables client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" )
-
Derefter genererer vi billedet:
# Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] )
Ovenstående kode svarer med et JSON-objekt, der indeholder URL'en til det genererede billede. Vi kan bruge URL'en til at downloade billedet og gemme det i en fil.
-
Til sidst åbner vi billedet og bruger standard billedfremviser til at vise det:
image = Image.open(image_path) image.show()
Lad os se nærmere på koden, der genererer billedet:
generation_response = client.images.generate(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils',
size='1024x1024', n=1,
model=os.environ['AZURE_OPENAI_DEPLOYMENT']
)- prompt, er tekstprompten, der bruges til at generere billedet. I dette tilfælde bruger vi prompten "Kanin på hest, holder en slikkepind, på en tåget eng hvor der vokser påskeliljer".
- size, er størrelsen på det billede, der genereres. I dette tilfælde genererer vi et billede, der er 1024x1024 pixels.
- n, er antallet af billeder, der genereres. I dette tilfælde genererer vi to billeder.
- temperature, er en parameter, der styrer tilfældigheden af outputtet fra en Generativ AI-model. Temperaturen er en værdi mellem 0 og 1, hvor 0 betyder, at outputtet er deterministisk, og 1 betyder, at outputtet er tilfældigt. Standardværdien er 0,7.
Der er flere ting, du kan gøre med billeder, som vi vil dække i næste afsnit.
Du har indtil videre set, hvordan vi kunne generere et billede med få linjer i Python. Men der er flere ting, du kan gøre med billeder.
Du kan også gøre følgende:
- Foretage redigeringer. Ved at give et eksisterende billede en maske og en prompt kan du ændre et billede. For eksempel kan du tilføje noget til en del af et billede. Forestil dig vores kaninbillede; du kan tilføje en hat til kaninen. Hvordan du ville gøre det er ved at give billedet, en maske (identificere det område, der skal ændres) og en tekstprompt for at angive, hvad der skal gøres.
Bemærk: dette understøttes ikke i DALL-E 3.
Her er et eksempel ved hjælp af GPT Image:
response = client.images.edit(
model="gpt-image-1",
image=open("sunlit_lounge.png", "rb"),
mask=open("mask.png", "rb"),
prompt="A sunlit indoor lounge area with a pool containing a flamingo"
)
image_url = response.data[0].urlBasisbilledet ville kun indeholde loungen med pool, men det endelige billede ville have en flamingo:
-
Oprette variationer. Ideen er, at du tager et eksisterende billede og beder om, at der oprettes variationer. For at oprette en variation giver du et billede og en tekstprompt og kode som følger:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Bemærk, dette understøttes kun på OpenAI.
Temperatur er en parameter, der styrer tilfældigheden af outputtet fra en Generativ AI-model. Temperaturen er en værdi mellem 0 og 1, hvor 0 betyder, at outputtet er deterministisk, og 1 betyder, at outputtet er tilfældigt. Standardværdien er 0,7.
Lad os se på et eksempel på, hvordan temperatur fungerer, ved at køre denne prompt to gange:
Prompt: "Kanin på hest, holder en slikkepind, på en tåget eng hvor der vokser påskeliljer"
Nu lad os køre den samme prompt igen for at se, at vi ikke får det samme billede to gange:
Som du kan se, er billederne ens, men ikke identiske. Lad os prøve at ændre temperaturværdien til 0,1 og se, hvad der sker:
generation_response = client.images.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2
)Så lad os prøve at gøre svaret mere deterministisk. Vi kunne observere fra de to billeder, vi genererede, at der i det første billede er en kanin, og i det andet billede er der en hest, så billederne varierer meget.
Lad os derfor ændre vores kode og sætte temperaturen til 0, som følger:
generation_response = client.images.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0
)Nu, når du kører denne kode, får du disse to billeder:
Her kan du tydeligt se, hvordan billederne ligner hinanden mere.
Med vores demo kan vi allerede generere billeder til vores kunder. Men vi skal skabe nogle grænser for vores applikation.
For eksempel ønsker vi ikke at generere billeder, der ikke er passende til arbejdspladsen, eller som ikke er egnede til børn.
Vi kan gøre dette med metaprompter. Metaprompter er tekstprompter, der bruges til at kontrollere outputtet fra en Generativ AI-model. For eksempel kan vi bruge metaprompter til at kontrollere outputtet og sikre, at de genererede billeder er passende til arbejdspladsen eller egnede til børn.
Nu, hvordan fungerer metaprompter?
Metaprompter er tekstprompter, der bruges til at kontrollere outputtet fra en Generativ AI-model. De placeres før tekstprompten og bruges til at kontrollere modelens output og indlejres i applikationer for at kontrollere modelens output. De indkapsler promptinput og metapromptinput i en enkelt tekstprompt.
Et eksempel på en metaprompt kunne være følgende:
You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
(Input)
Nu, lad os se, hvordan vi kan bruge metaprompter i vores demo.
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt =f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"{meta_prompt}
Create an image of a bunny on a horse, holding a lollipop"
# TODO add request to generate imageFra ovenstående prompt kan du se, hvordan alle billeder, der oprettes, tager metaprompten i betragtning.
Vi introducerede Edu4All i begyndelsen af denne lektion. Nu er det tid til at give eleverne mulighed for at generere billeder til deres opgaver.
Eleverne vil skabe billeder til deres opgaver, der indeholder monumenter, præcis hvilke monumenter er op til eleverne. Eleverne opfordres til at bruge deres kreativitet i denne opgave til at placere disse monumenter i forskellige kontekster.
Her er en mulig løsning:
import openai
import os
import requests
from PIL import Image
import dotenv
from openai import AzureOpenAI
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
client = AzureOpenAI(
azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"],
api_key=os.environ['AZURE_OPENAI_API_KEY'],
api_version = "2024-02-01"
)
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt = f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"""{meta_prompt}
Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on.
""""
try:
# Create an image by using the image generation API
generation_response = client.images.generate(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=1,
)
# Set the directory for the stored image
image_dir = os.path.join(os.curdir, 'images')
# If the directory doesn't exist, create it
if not os.path.isdir(image_dir):
os.mkdir(image_dir)
# Initialize the image path (note the filetype should be png)
image_path = os.path.join(image_dir, 'generated-image.png')
# Retrieve the generated image
image_url = generation_response.data[0].url # extract image URL from response
generated_image = requests.get(image_url).content # download the image
with open(image_path, "wb") as image_file:
image_file.write(generated_image)
# Display the image in the default image viewer
image = Image.open(image_path)
image.show()
# catch exceptions
except openai.BadRequestError as err:
print(err)Efter at have afsluttet denne lektion, kan du tage et kig på vores Generative AI Learning-samling for at fortsætte med at forbedre din viden om Generativ AI!
Gå videre til Lektion 10, hvor vi vil se på, hvordan man bygger AI-applikationer med low-code
Ansvarsfraskrivelse:
Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten Co-op Translator. Selvom vi bestræber os på nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse.








