Przejdź do głównej treści
DALL-E 3 to model generacji obrazów opracowany przez OpenAI, który potrafi generować wysokiej jakości obrazy na podstawie opisów tekstowych. Dokument ten głównie opisuje proces korzystania z OpenAI Images Generations API, dzięki któremu możemy łatwo korzystać z funkcji generowania obrazów oficjalnego OpenAI DALL-E.

申请流程

Aby korzystać z OpenAI Images Generations API, najpierw można przejść na stronę OpenAI Images Generations API i kliknąć przycisk „Acquire”, aby uzyskać potrzebne poświadczenia: Jeśli nie jesteś zalogowany lub zarejestrowany, automatycznie zostaniesz przekierowany na stronę logowania, aby zarejestrować się i zalogować, a po zalogowaniu zostaniesz automatycznie przekierowany z powrotem na bieżącą stronę. Podczas pierwszej aplikacji otrzymasz darmowy limit, który pozwala na bezpłatne korzystanie z tego API.

基本使用

Następnie możesz wypełnić odpowiednie pola na interfejsie, jak pokazano na rysunku:

Podczas pierwszego korzystania z tego interfejsu musimy wypełnić przynajmniej trzy pola: jedno to authorization, które można wybrać bezpośrednio z rozwijanej listy. Drugim parametrem jest model, model to kategoria modelu, którą wybieramy do korzystania z oficjalnego modelu OpenAI DALL-E, tutaj mamy głównie 1 model, szczegóły można zobaczyć w dostarczonym modelu. Ostatnim parametrem jest prompt, prompt to słowo kluczowe, które wprowadzamy, aby wygenerować obraz. Możesz również zauważyć, że po prawej stronie znajduje się odpowiedni kod wywołania, który możesz skopiować i uruchomić, lub możesz po prostu kliknąć przycisk „Try”, aby przetestować.

Przykładowy kod wywołania w Pythonie:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
Po wywołaniu zauważamy, że zwrócony wynik wygląda następująco:
{
  "created": 1721626477,
  "data": [
    {
      "revised_prompt": "A delightful image showcasing a young sea otter, who is born brown, with wide charming eyes. It is delightfully lying on its back, paddling in the calm sea waters. Its dense, velvety fur appears wet and shimmering, capturing the essence of its habitat. The small creature curiously plays with a sea shell with its small paws, looking absolutely innocent and charming in its natural environment.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/5d98aa7c-80c6-4523-b571-fc606ad455b9/generated_00.png?se=2024-07-23T05%3A34%3A48Z&sig=GAz%2Bi3%2BkHOQwAMhxcv22tBM%2FaexrxPgT9V0DbNrL4ik%3D&ske=2024-07-23T08%3A41%3A10Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T08%3A41%3A10Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
Zwrócone wyniki zawierają wiele pól, które są opisane poniżej:
  • created , ID generacji tego obrazu, używane do unikalnej identyfikacji tego zadania.
  • data, zawiera informacje o wynikach generacji obrazu.
W tym data zawiera szczegółowe informacje o wygenerowanym obrazie przez model, a jego url to szczegółowy link do wygenerowanego obrazu, co można zobaczyć na rysunku.

图片质量参数 quality

Następnie przedstawimy, jak ustawić niektóre szczegółowe parametry wyników generacji obrazów, w tym parametr jakości obrazu quality, który zawiera dwa rodzaje: pierwszy standard oznacza generowanie standardowych obrazów, a drugi hd oznacza, że utworzony obraz ma bardziej szczegółowe detale i większą spójność. Poniżej ustawiamy parametr jakości obrazu na standard, szczegółowe ustawienia przedstawione są na rysunku:

Możesz również zauważyć, że po prawej stronie znajduje się odpowiedni kod wywołania, który możesz skopiować i uruchomić, lub możesz po prostu kliknąć przycisk „Try”, aby przetestować.

Przykładowy kod wywołania w Pythonie:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "quality": "standard"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
Po wywołaniu zauważamy, że zwrócony wynik wygląda następująco:
{
  "created": 1721636023,
  "data": [
    {
      "revised_prompt": "A cute baby sea otter is lying playfully on its back in the water, with its fur looking glossy and soft. One of its tiny paws is reaching out curiously, and it has an expression of pure joy and warmth on its face as it looks up to the sky. Its body is surrounded by bubbles from its playful twirling in the water. A gentle breeze is playing with its fur making it look more charming. The scene portrays the tranquility and charm of marine life.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/a93ee5e7-3abd-4923-8d79-dc9ef126da46/generated_00.png?se=2024-07-23T08%3A13%3A55Z&sig=wTXGYvUOwUIkaB2CxjK9ww%2FHjS8OwYUWcYInXYKwcAM%3D&ske=2024-07-23T11%3A32%3A05Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T11%3A32%3A05Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
Zwrócone wyniki są zgodne z treścią podstawowego użycia, można zobaczyć, że obraz o parametrze jakości standard wygląda jak na rysunku:

Podobnie jak w powyższej operacji, wystarczy ustawić parametr jakości obrazu na hd, aby uzyskać obraz, który wygląda jak na rysunku:

Można zauważyć, że obraz wygenerowany w hd ma bardziej szczegółowe detale i większą spójność niż standard.

图片大小尺寸参数 size

Możemy również ustawić rozmiar generowanych obrazów, możemy dokonać poniższych ustawień. Poniżej ustawiamy rozmiar obrazu na 1024 * 1024, szczegółowe ustawienia przedstawione są na poniższym obrazku:

Jednocześnie można zauważyć, że po prawej stronie znajduje się odpowiedni kod do wywołania, który można skopiować i uruchomić, lub można bezpośrednio kliknąć przycisk „Try”, aby przetestować.

Przykładowy kod wywołania w Pythonie:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "size": "1024x1024"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
Po wywołaniu zauważamy, że zwrócony wynik wygląda następująco:
{
  "created": 1721636652,
  "data": [
    {
      "revised_prompt": "A delightful depiction of a baby sea otter. The small mammal is captured in its natural habitat in the ocean, floating on its back. It has thick brown fur that is sleek and wet from the sea water. Its eyes are closed as if it is enjoying a moment of deep relaxation. The water around it is calm, reflecting the peacefulness of the scene. The background should hint at a diverse marine ecosystem, with visible strands of kelp floating on the surface, suggesting the baby otter's preferred environment.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/9d625ac6-fd2b-42a9-84a6-8c99eb357ccf/generated_00.png?se=2024-07-23T08%3A24%3A24Z&sig=AXtYXowEakGxfRp8LhC2DwqL%2F07LhEDW40oCP%2BdTO8s%3D&ske=2024-07-23T18%3A00%3A45Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T18%3A00%3A45Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
Zwrócony wynik jest zgodny z podstawowym użyciem, można zobaczyć, że rozmiar wygenerowanego obrazu wynosi 1024 * 1024, jak pokazano na poniższym obrazku:

Podobnie jak w powyższej operacji, wystarczy ustawić rozmiar obrazu na 1792 * 1024, aby uzyskać obraz przedstawiony na poniższym obrazku: Można zauważyć, że rozmiar obrazu jest wyraźnie inny, można również ustawić więcej rozmiarów, szczegóły można znaleźć w dokumentacji na naszej stronie internetowej.

Parametr stylu obrazu style

Parametr stylu obrazu style zawiera dwa parametry, pierwszy vivid oznacza, że generowany obraz jest bardziej żywy, drugi natural oznacza, że generowany obraz jest bardziej naturalny. Poniżej ustawiamy parametr stylu obrazu na vivid, szczegółowe ustawienia przedstawione są na poniższym obrazku:

Jednocześnie można zauważyć, że po prawej stronie znajduje się odpowiedni kod do wywołania, który można skopiować i uruchomić, lub można bezpośrednio kliknąć przycisk „Try”, aby przetestować.

Przykładowy kod wywołania w Pythonie:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "style": "vivid"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
Po wywołaniu zauważamy, że zwrócony wynik wygląda następująco:
{
  "created": 1721637086,
  "data": [
    {
      "revised_prompt": "A baby sea otter with soft, shiny fur and sparkling eyes floating playfully on calm ocean waters. This adorable creature is trippingly frolicking amidst small, gentle waves under a bright, clear, sunny sky. The tranquility of the sea contrasts subtly with the delightful energy of this young otter. The critter gamely clings to a tiny piece of driftwood, its small paws adorably enveloping the floating object.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/6e48f701-7fd3-4356-839e-a2f6f0fe82d9/generated_00.png?se=2024-07-23T08%3A31%3A37Z&sig=4percxqTbUR1j3BQmkhvj%2FAhHzInKI%2FqiTo1MP69coI%3D&ske=2024-07-27T10%3A39%3A55Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-20T10%3A39%3A55Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
Zwrócony wynik jest zgodny z podstawowym użyciem, można zobaczyć, że wygenerowany obraz o parametrze stylu vivid wygląda jak na poniższym obrazku:

Podobnie jak w powyższej operacji, wystarczy ustawić parametr stylu obrazu na natural, aby uzyskać obraz przedstawiony na poniższym obrazku:

Można zauważyć, że obraz wygenerowany w stylu vivid jest bardziej żywy i realistyczny niż w stylu natural.

Parametr formatu linku obrazu response_format

Ostatni parametr formatu linku obrazu response_format ma również dwa rodzaje, pierwszy b64_json to kodowanie linku obrazu w Base64, drugi url to zwykły link do obrazu, który można bezpośrednio zobaczyć. Poniżej ustawiamy parametr formatu linku obrazu na url, szczegółowe ustawienia przedstawione są na poniższym obrazku:

Jednocześnie można zauważyć, że po prawej stronie znajduje się odpowiedni kod do wywołania, który można skopiować i uruchomić, lub można bezpośrednio kliknąć przycisk „Try”, aby przetestować.

Przykładowy kod wywołania w Pythonie:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "A cute baby sea otter",
    "response_format": "url"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
Po wywołaniu zauważamy, że zwrócony wynik wygląda następująco:
{
  "created": 1721637575,
  "data": [
    {
      "revised_prompt": "Urokliwy obrazek przedstawiający małego wydrę morską. Wydra leży spokojnie na plecach wśród łagodnych, niebieskich fal oceanu. Futro małej wydry to urocza mieszanka miękkich odcieni szaro-brązowych, subtelnie błyszczących w przytłumionym świetle słonecznym. Jej małe łapki są urocze, lekko uniesione w stronę nieba, jakby bawiły się niewidzialnym przedmiotem. Jej okrągłe, wyraziste oczy są szerokie z ciekawości, iskrzące życiem i niewinnością. Użyj realistycznego stylu, aby oddać naturalne środowisko wydry i jej uroczo puszystą powierzchnię.",
      "url": "https://dalleprodsec.blob.core.windows.net/private/images/87792c5f-8b6d-412e-81dd-f1a1baa19bd2/generated_00.png?se=2024-07-23T08%3A39%3A47Z&sig=zzRAn30TqIKHdLVqZPUUuSJdjCYpoJdaGU6BeoA76Jo%3D&ske=2024-07-23T13%3A32%3A13Z&skoid=e52d5ed7-0657-4f62-bc12-7e5dbb260a96&sks=b&skt=2024-07-16T13%3A32%3A13Z&sktid=33e01921-4d64-4f8c-a055-5bdaffd5e33d&skv=2020-10-02&sp=r&spr=https&sr=b&sv=2020-10-02"
    }
  ]
}
Zwrócony wynik jest zgodny z podstawowym użyciem, można zobaczyć, że link do obrazu w formacie parametrów url generowanego obrazu to URL obrazu i jest dostępny bezpośrednio, treść obrazu przedstawia się jak poniżej:

Podobnie jak powyżej, wystarczy ustawić link do obrazu w formacie parametrów b64_json, aby uzyskać wynik w postaci linku do obrazu zakodowanego w Base64, szczegółowy wynik przedstawia się jak poniżej:
{
  "created": 1721638071,
  "data": [
    {
      "b64_json": "iVBORw0..............v//AQEAAP4AAAD+AAADAQAAAwEEA/4D//8Q/Pbw64mKbVTFoQAAAABJRU5ErkJggg==",
      "revised_prompt": "Urokliwy obraz młodej wydry morskiej. Wydra delikatnie unosi się na spokojnym, niebieskim morzu, wygrzewając się w ciepłych, złotych promieniach słońca spływających z czystego nieba powyżej. Futro wydry ma bogaty, czekoladowy brąz, a wygląda niezwykle miękko i puszyście. Oczy wydry są jasne i wyraziste, pełne dziecięcej ciekawości i radości. Małe, sterczące uszy i nos w kształcie guzika dodają jej ogólnej urokliwości. W morzu wokół niej widać migoczące krople wody, podkreślone przez światło słoneczne, widok jest z pewnością zachwycający."
    }
  ]
}

Asynchroniczny callback

Ponieważ czas generowania obrazów przez API OpenAI Images Generations może być stosunkowo długi, jeśli API nie odpowiada przez dłuższy czas, żądanie HTTP będzie utrzymywać połączenie, co prowadzi do dodatkowego zużycia zasobów systemowych, dlatego to API oferuje również wsparcie dla asynchronicznych callbacków. Cały proces wygląda następująco: klient inicjuje żądanie, dodatkowo określając pole callback_url, po czym API natychmiast zwraca wynik, zawierający pole task_id, które reprezentuje aktualny identyfikator zadania. Po zakończeniu zadania, wynik generowania obrazu zostanie wysłany do określonego przez klienta callback_url w formie POST JSON, w tym również pole task_id, dzięki czemu wynik zadania można powiązać za pomocą identyfikatora. Poniżej przedstawiamy przykład, aby zrozumieć, jak dokładnie to działa. Najpierw, callback Webhook to usługa, która może odbierać żądania HTTP, deweloperzy powinni zastąpić ją URL swojego serwera HTTP. W tym celu, dla wygody demonstracji, używamy publicznej strony przykładowej Webhook https://webhook.site/, otwierając tę stronę można uzyskać URL Webhook, jak pokazano na obrazku: Skopiuj ten URL, aby użyć go jako Webhook, przykładowy URL to https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab. Następnie możemy ustawić pole callback_url na powyższy URL Webhook, a także wypełnić odpowiednie parametry, jak pokazano w poniższym kodzie:
import requests

url = "https://api.acedata.cloud/openai/images/generations"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "model": "dall-e-3",
    "prompt": "Urocza mała wydra morska",
    "callback_url": "https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
Po kliknięciu uruchomienia, można zauważyć, że natychmiast otrzymujemy wynik, jak poniżej:
{
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c"
}
Po chwili możemy obserwować wynik generowania obrazu na URL Webhook, treść jest następująca:
{
  "success": true,
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c",
  "trace_id": "9b4b1ff3-90f2-470f-b082-1061ec2948cc",
  "data": {
    "created": 1721626477,
    "data": [
      {
        "revised_prompt": "Zachwycający obrazek przedstawiający młodą wydrę morską...",
        "url": "https://dalleprodsec.blob.core.windows.net/private/images/..."
      }
    ]
  }
}
Można zauważyć, że w wyniku znajduje się pole task_id, a pole data zawiera wyniki generowania obrazu takie same jak w przypadku wywołania synchronicznego, dzięki polu task_id można powiązać zadanie.

Obsługa błędów

Podczas wywoływania API, jeśli wystąpią błędy, API zwróci odpowiedni kod błędu i informacje. Na przykład:
  • 400 token_mismatched: Złe żądanie, prawdopodobnie z powodu brakujących lub nieprawidłowych parametrów.
  • 400 api_not_implemented: Złe żądanie, prawdopodobnie z powodu brakujących lub nieprawidłowych parametrów.
  • 401 invalid_token: Nieautoryzowany, nieprawidłowy lub brakujący token autoryzacyjny.
  • 429 too_many_requests: Zbyt wiele żądań, przekroczono limit szybkości.
  • 500 api_error: Błąd wewnętrzny serwera, coś poszło nie tak na serwerze.

Przykład odpowiedzi błędu

{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "pobieranie nie powiodło się"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}

Wnioski

Dzięki temu dokumentowi zrozumiałeś, jak łatwo korzystać z funkcji generowania obrazów oficjalnego OpenAI DALL-E za pomocą API OpenAI Images Generations. Mamy nadzieję, że ten dokument pomoże Ci lepiej zintegrować i korzystać z tego API. W razie jakichkolwiek pytań, skontaktuj się z naszym zespołem wsparcia technicznego.