Generowanie tekstu to nie jedyna funkcja LLM. Możliwe jest również generowanie obrazów na podstawie opisów tekstowych. Obrazy jako forma przekazu mogą być niezwykle przydatne w wielu dziedzinach, takich jak MedTech, architektura, turystyka, tworzenie gier i wiele innych. W tym rozdziale przyjrzymy się dwóm najpopularniejszym modelom generowania obrazów: DALL-E i Midjourney.
W tej lekcji omówimy:
- Generowanie obrazów i dlaczego jest przydatne.
- DALL-E i Midjourney, czym są i jak działają.
- Jak zbudować aplikację do generowania obrazów.
Po ukończeniu tej lekcji będziesz w stanie:
- Zbudować aplikację do generowania obrazów.
- Określić granice dla swojej aplikacji za pomocą meta promptów.
- Pracować z DALL-E i Midjourney.
Aplikacje do generowania obrazów to świetny sposób na eksplorowanie możliwości Generatywnej AI. Mogą być używane na przykład do:
-
Edycji i syntezy obrazów. Możesz generować obrazy dla różnych zastosowań, takich jak edycja obrazów czy ich synteza.
-
Zastosowania w różnych branżach. Mogą być również używane do generowania obrazów dla różnych branż, takich jak MedTech, turystyka, tworzenie gier i wiele innych.
W ramach tej lekcji będziemy kontynuować pracę z naszym startupem, Edu4All. Studenci będą tworzyć obrazy do swoich zadań, jakie dokładnie obrazy to już ich decyzja, ale mogą to być ilustracje do ich własnej bajki, stworzenie nowej postaci do opowiadania lub pomoc w wizualizacji ich pomysłów i koncepcji.
Oto przykład, co studenci Edu4All mogliby wygenerować, jeśli pracują w klasie nad tematyką zabytków:
używając takiego promptu jak:
"Pies obok Wieży Eiffla w porannym świetle słonecznym"
DALL-E i Midjourney to dwa z najpopularniejszych modeli generowania obrazów, które pozwalają na użycie promptów do tworzenia obrazów.
Zacznijmy od DALL-E, który jest modelem Generatywnej AI generującym obrazy na podstawie opisów tekstowych.
DALL-E to połączenie dwóch modeli, CLIP i rozproszonej uwagi.
-
CLIP, to model generujący osadzenia, czyli numeryczne reprezentacje danych, z obrazów i tekstu.
-
Rozproszona uwaga, to model generujący obrazy z osadzeń. DALL-E jest trenowany na zbiorze danych obrazów i tekstów i może być używany do generowania obrazów na podstawie opisów tekstowych. Na przykład, DALL-E może być używany do generowania obrazów kota w kapeluszu lub psa z irokezem.
Midjourney działa w podobny sposób jak DALL-E, generuje obrazy na podstawie promptów tekstowych. Midjourney również może być używany do generowania obrazów za pomocą promptów takich jak „kot w kapeluszu” czy „pies z irokezem”.
Zdjęcie dzięki Wikipedia, obraz wygenerowany przez Midjourney
Najpierw DALL-E. DALL-E to model Generatywnej AI oparty na architekturze transformera z autoregresywnym transformatorem.
Autoregresywny transformer definiuje sposób, w jaki model generuje obrazy na podstawie opisów tekstowych, generując jeden piksel na raz, a następnie używając wygenerowanych pikseli do generowania kolejnego. Proces ten przechodzi przez wiele warstw w sieci neuronowej, aż obraz zostanie ukończony.
Dzięki temu procesowi DALL-E kontroluje atrybuty, obiekty, cechy i inne elementy w generowanym obrazie. Jednak DALL-E 2 i 3 mają większą kontrolę nad generowanym obrazem.
Co jest potrzebne do stworzenia aplikacji do generowania obrazów? Potrzebujesz następujących bibliotek:
- python-dotenv, zaleca się użycie tej biblioteki do przechowywania tajnych danych w pliku .env z dala od kodu.
- openai, biblioteka, której użyjesz do interakcji z API OpenAI.
- pillow, do pracy z obrazami w Pythonie.
- requests, do wykonywania żądań HTTP.
Jeśli jeszcze tego nie zrobiłeś, postępuj zgodnie z instrukcjami na stronie Microsoft Learn, aby utworzyć zasób i model Azure OpenAI. Wybierz model DALL-E 3.
-
Utwórz plik .env z następującą zawartością:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Znajdź te informacje w Azure OpenAI Foundry Portal dla swojego zasobu w sekcji "Deployments".
-
Zbierz powyższe biblioteki w pliku requirements.txt w następujący sposób:
python-dotenv openai pillow requests -
Następnie utwórz wirtualne środowisko i zainstaluj biblioteki:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtDla systemu Windows użyj następujących poleceń, aby utworzyć i aktywować wirtualne środowisko:
python3 -m venv venv venv\Scripts\activate.bat
-
Dodaj poniższy kod do pliku o nazwie 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)
Wyjaśnijmy ten kod:
-
Najpierw importujemy potrzebne biblioteki, w tym bibliotekę OpenAI, bibliotekę dotenv, bibliotekę requests i bibliotekę Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Następnie ładujemy zmienne środowiskowe z pliku .env.
# import dotenv dotenv.load_dotenv()
-
Potem konfigurujemy klienta usługi Azure OpenAI.
# 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" )
-
Następnie generujemy obraz:
# 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'] )
Powyższy kod odpowiada obiektem JSON zawierającym URL wygenerowanego obrazu. Możemy użyć tego URL, aby pobrać obraz i zapisać go w pliku.
-
Na koniec otwieramy obraz i używamy standardowego przeglądarki obrazów, aby go wyświetlić:
image = Image.open(image_path) image.show()
Przyjrzyjmy się bliżej kodowi generującemu obraz:
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, to tekstowy prompt używany do generowania obrazu. W tym przypadku używamy promptu "Królik na koniu, trzymający lizaka, na mglistym łące, gdzie rosną żonkile".
- size, to rozmiar generowanego obrazu. W tym przypadku generujemy obraz o rozmiarze 1024x1024 pikseli.
- n, to liczba generowanych obrazów. W tym przypadku generujemy dwa obrazy.
- temperature, to parametr kontrolujący losowość wyników modelu Generatywnej AI. Temperatura to wartość między 0 a 1, gdzie 0 oznacza, że wynik jest deterministyczny, a 1 oznacza, że wynik jest losowy. Domyślna wartość to 0.7.
Istnieje więcej rzeczy, które można zrobić z obrazami, o czym opowiemy w następnej sekcji.
Jak dotąd widziałeś, jak można wygenerować obraz za pomocą kilku linii kodu w Pythonie. Jednak istnieje więcej rzeczy, które można zrobić z obrazami.
Możesz również:
- Edytować obrazy. Podając istniejący obraz, maskę i prompt, możesz zmienić obraz. Na przykład możesz dodać coś do części obrazu. Wyobraź sobie nasz obraz z królikiem, możesz dodać kapelusz królikowi. Jak to zrobić? Podając obraz, maskę (identyfikującą część obszaru do zmiany) i prompt tekstowy, który określa, co należy zrobić.
Uwaga: to nie jest obsługiwane w DALL-E 3.
Oto przykład użycia 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].urlBazowy obraz zawierałby tylko salon z basenem, ale ostateczny obraz miałby flaminga:
-
Tworzyć wariacje. Chodzi o to, że bierzesz istniejący obraz i prosisz o stworzenie jego wariacji. Aby stworzyć wariację, podajesz obraz i prompt tekstowy oraz kod w następujący sposób:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Uwaga, to jest obsługiwane tylko w OpenAI.
Temperatura to parametr kontrolujący losowość wyników modelu Generatywnej AI. Temperatura to wartość między 0 a 1, gdzie 0 oznacza, że wynik jest deterministyczny, a 1 oznacza, że wynik jest losowy. Domyślna wartość to 0.7.
Przyjrzyjmy się przykładowi działania temperatury, uruchamiając ten prompt dwukrotnie:
Prompt : "Królik na koniu, trzymający lizaka, na mglistym łące, gdzie rosną żonkile"
Teraz uruchommy ten sam prompt jeszcze raz, aby zobaczyć, że nie otrzymamy dwa razy tego samego obrazu:
Jak widać, obrazy są podobne, ale nie identyczne. Spróbujmy zmienić wartość temperatury na 0.1 i zobaczyć, co się stanie:
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
)Spróbujmy więc uczynić odpowiedź bardziej deterministyczną. Możemy zauważyć, że na dwóch wygenerowanych obrazach w pierwszym jest królik, a w drugim koń, więc obrazy znacznie się różnią.
Zmieńmy zatem nasz kod i ustawmy temperaturę na 0, w ten sposób:
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
)Teraz, gdy uruchomisz ten kod, otrzymasz te dwa obrazy:
Tutaj wyraźnie widać, że obrazy są do siebie bardziej podobne.
Dzięki naszemu demo możemy już generować obrazy dla naszych klientów. Jednak musimy stworzyć pewne granice dla naszej aplikacji.
Na przykład, nie chcemy generować obrazów, które są nieodpowiednie dla pracy lub dla dzieci.
Możemy to zrobić za pomocą meta promptów. Meta prompty to tekstowe prompty używane do kontrolowania wyników modelu Generatywnej AI. Na przykład możemy użyć meta promptów, aby kontrolować wyniki i upewnić się, że generowane obrazy są odpowiednie dla pracy lub dzieci.
Jak działają meta prompty?
Meta prompty to tekstowe prompty używane do kontrolowania wyników modelu Generatywnej AI, są umieszczane przed promptem tekstowym i służą do kontrolowania wyników modelu oraz są wbudowane w aplikacje, aby kontrolować wyniki modelu. Łączą one dane wejściowe promptu i dane wejściowe meta promptu w jeden prompt tekstowy.
Przykładem meta promptu może być następujący:
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)
Teraz zobaczmy, jak możemy użyć meta promptów w naszym 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 imageZ powyższego promptu widać, jak wszystkie tworzone obrazy uwzględniają meta prompt.
Na początku tej lekcji przedstawiliśmy Edu4All. Teraz czas umożliwić studentom generowanie obrazów do ich zadań.
Studenci będą tworzyć obrazy do swoich zadań zawierających zabytki, jakie dokładnie zabytki to już ich decyzja. Studenci są proszeni o wykorzystanie swojej kreatywności w tym zadaniu, aby umieścić te zabytki w różnych kontekstach.
Oto jedno z możliwych rozwiązań:
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)Po ukończeniu tej lekcji, zajrzyj do naszej kolekcji nauki o generatywnej AI, aby dalej rozwijać swoją wiedzę na temat generatywnej AI!
Przejdź do Lekcji 10, gdzie dowiemy się, jak budować aplikacje AI przy użyciu niskokodowych rozwiązań
Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Chociaż staramy się zapewnić dokładność, prosimy pamiętać, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za autorytatywne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.








