OpenAI API 圖像生成

2023-03-17 13:53 更新

介紹

圖片 API 提供了三種與圖片交互的方法:

  1. 根據(jù)文本提示從頭開始創(chuàng)建圖像

  2. 根據(jù)新文本提示創(chuàng)建現(xiàn)有圖像的編輯

  3. 創(chuàng)建現(xiàn)有圖像的變體

本指南涵蓋了使用這三個 API 端點的基礎知識以及有用的代碼示例。

圖片 API 處于測試階段。在此期間,API 和模型將根據(jù)您的反饋進行改進。為確保所有用戶都能輕松制作原型,默認速率限制為每分鐘 50 張圖像。如果您想提高速率限制,請查看這篇幫助中心文章。隨著我們對使用和容量要求的更多了解,我們將提高默認速率限制。

使用方法

生成

圖像生成端點允許您在給定文本提示的情況下創(chuàng)建原始圖像。生成的圖像的大小可以為 256x256、512x512 或 1024x1024 像素。較小的尺寸生成速度更快。您可以使用 n 參數(shù)一次請求 1-10 張圖像。

 python node.js  curl 
response = openai.Image.create(
  prompt="a white siamese cat",
  n=1,
  size="1024x1024"
)
image_url = response['data'][0]['url']
const response = await openai.createImage({
  prompt: "a white siamese cat",
  n: 1,
  size: "1024x1024",
});
image_url = response.data.data[0].url;
curl https://api.openai.com/v1/images/generations \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "prompt": "a white siamese cat",
    "n": 1,
    "size": "1024x1024"
  }'

描述越詳細,您就越有可能獲得您或您的最終用戶想要的結(jié)果。您可以探索 DALL·E 預覽應用程序中的示例以獲得更多提示靈感。這是一個簡單的例子:


使用 response_format 參數(shù),每個圖像都可以作為 URL 或 Base64 數(shù)據(jù)返回。 URL 將在一小時后過期。

編輯

圖像編輯端點允許您通過上傳蒙版來編輯和擴展圖像。遮罩的透明區(qū)域指示應編輯圖像的位置,提示應描述完整的新圖像,而不僅僅是擦除區(qū)域。此端點可以啟用類似我們 DALL·E 預覽應用程序中的編輯器的體驗。

 python node.js  curl 
response = openai.Image.create_edit(
  image=open("sunlit_lounge.png", "rb"),
  mask=open("mask.png", "rb"),
  prompt="A sunlit indoor lounge area with a pool containing a flamingo",
  n=1,
  size="1024x1024"
)
image_url = response['data'][0]['url']
const response = await openai.createImageEdit(
  fs.createReadStream("sunlit_lounge.png"),
  fs.createReadStream("mask.png"),
  "A sunlit indoor lounge area with a pool containing a flamingo",
  1,
  "1024x1024"
);
image_url = response.data.data[0].url;
curl https://api.openai.com/v1/images/edits \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F image="@sunlit_lounge.png" \
  -F mask="@mask.png" \
  -F prompt="A sunlit indoor lounge area with a pool containing a flamingo" \
  -F n=1 \
  -F size="1024x1024"


上傳的圖片和遮罩必須是小于 4MB 的正方形 PNG 圖片,并且必須具有相同的尺寸。生成輸出時不使用遮罩的非透明區(qū)域,因此它們不一定需要像上面的示例那樣與原始圖像匹配。

變化

圖像變體端點允許您生成給定圖像的變體。

 python node.js  curl 
response = openai.Image.create_variation(
  image=open("corgi_and_cat_paw.png", "rb"),
  n=1,
  size="1024x1024"
)
image_url = response['data'][0]['url']
const response = await openai.createImageVariation(
  fs.createReadStream("corgi_and_cat_paw.png"),
  1,
  "1024x1024"
);
image_url = response.data.data[0].url;
curl https://api.openai.com/v1/images/variations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F image='@corgi_and_cat_paw.png' \
  -F n=1 \
  -F size="1024x1024"


與編輯端點類似,輸入圖像必須是大小小于 4MB 的方形 PNG 圖像。

內(nèi)容審核

提示和圖像根據(jù)我們的內(nèi)容政策進行過濾,當提示或圖像被標記時返回錯誤。

特定語言提示

  • NODE.JS
  • 使用內(nèi)存圖像數(shù)據(jù)

    上面指南中的 Node.js 示例使用 fs 模塊從磁盤讀取圖像數(shù)據(jù)。在某些情況下,您可能會將圖像數(shù)據(jù)保存在內(nèi)存中。下面是一個使用存儲在 Node.js Buffer 對象中的圖像數(shù)據(jù)的 API 調(diào)用示例:

    // This is the Buffer object that contains your image data
    const buffer = [your image data];
    // Set a `name` that ends with .png so that the API knows it's a PNG image
    buffer.name = "image.png";
    const response = await openai.createImageVariation(
      buffer,
      1,
      "1024x1024"
    );

    使用 TypeScript

    如果您使用的是 TypeScript,您可能會遇到一些圖像文件參數(shù)的問題。下面是通過顯式轉(zhuǎn)換參數(shù)來解決類型不匹配的示例:

    // Cast the ReadStream to `any` to appease the TypeScript compiler
    const response = await openai.createImageVariation(
      fs.createReadStream("image.png") as any,
      1,
      "1024x1024"
    );

    這是內(nèi)存中圖像數(shù)據(jù)的類似示例:

    // This is the Buffer object that contains your image data
    const buffer: Buffer = [your image data];
    // Cast the buffer to `any` so that we can set the `name` property
    const file: any = buffer;
    // Set a `name` that ends with .png so that the API knows it's a PNG image
    file.name = "image.png";
    const response = await openai.createImageVariation(
      file,
      1,
      "1024x1024"
    );

    錯誤處理

    API 請求可能會由于無效輸入、速率限制或其他問題而返回錯誤。這些錯誤可以用 try...catch 語句處理,錯誤詳細信息可以在 error.response 或 error.message 中找到:

    try {
      const response = await openai.createImageVariation(
        fs.createReadStream("image.png"),
        1,
        "1024x1024"
      );
      console.log(response.data.data[0].url);
    } catch (error) {
      if (error.response) {
        console.log(error.response.status);
        console.log(error.response.data);
      } else {
        console.log(error.message);
      }
    }
  • PYTHON
  • 使用內(nèi)存圖像數(shù)據(jù)

    上面指南中的 Python 示例使用 open 函數(shù)從磁盤讀取圖像數(shù)據(jù)。在某些情況下,您可能會將圖像數(shù)據(jù)保存在內(nèi)存中。下面是一個使用存儲在 BytesIO 對象中的圖像數(shù)據(jù)的 API 調(diào)用示例:

    from io import BytesIO
    
    # This is the BytesIO object that contains your image data
    byte_stream: BytesIO = [your image data]
    byte_array = byte_stream.getvalue()
    response = openai.Image.create_variation(
      image=byte_array,
      n=1,
      size="1024x1024"
    )

    圖像數(shù)據(jù)操作

    在將圖像傳遞給 API 之前對圖像執(zhí)行操作可能很有用。這是一個使用 PIL 調(diào)整圖像大小的示例:

    from io import BytesIO
    from PIL import Image
    
    # Read the image file from disk and resize it
    image = Image.open("image.png")
    width, height = 256, 256
    image = image.resize((width, height))
    
    # Convert the image to a BytesIO object
    byte_stream = BytesIO()
    image.save(byte_stream, format='PNG')
    byte_array = byte_stream.getvalue()
    
    response = openai.Image.create_variation(
      image=byte_array,
      n=1,
      size="1024x1024"
    )

    錯誤處理

    API 請求可能會由于無效輸入、速率限制或其他問題而返回錯誤。這些錯誤可以通過 try...except 語句來處理,錯誤的詳細信息可以在 e.error 中找到:

    try:
      openai.Image.create_variation(
        open("image.png", "rb"),
        n=1,
        size="1024x1024"
      )
      print(response['data'][0]['url'])
    except openai.error.OpenAIError as e:
      print(e.http_status)
      print(e.error)


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號