الانتقال إلى المحتوى الرئيسي
DALL-E 3 هو نموذج توليد الصور الذي طورته OpenAI، وهو قادر على إنشاء صور عالية الجودة بناءً على أوصاف نصية. تتناول هذه الوثيقة بشكل رئيسي عملية استخدام واجهة برمجة تطبيقات OpenAI Images Generations API، والتي تتيح لنا استخدام وظيفة توليد الصور الخاصة بـ OpenAI DALL-E بسهولة.

申请流程

لاستخدام واجهة برمجة تطبيقات OpenAI Images Generations API، يمكنك أولاً زيارة صفحة OpenAI Images Generations API والنقر على زر “Acquire” للحصول على الشهادات المطلوبة: إذا لم تكن قد قمت بتسجيل الدخول أو التسجيل بعد، فسيتم تحويلك تلقائيًا إلى صفحة تسجيل الدخول لدعوتك للتسجيل وتسجيل الدخول، وبعد تسجيل الدخول، سيتم العودة تلقائيًا إلى الصفحة الحالية. عند التقديم لأول مرة، ستحصل على رصيد مجاني يمكن استخدامه مجانًا مع هذه الواجهة.

基本使用

بعد ذلك، يمكنك ملء المحتوى المقابل في الواجهة، كما هو موضح في الصورة:

عند استخدام هذه الواجهة لأول مرة، نحتاج على الأقل إلى ملء ثلاثة محتويات، الأول هو authorization، يمكنك اختياره مباشرة من القائمة المنسدلة. المعامل الآخر هو model، حيث يمثل model نوع النموذج الذي نختار استخدامه من موقع OpenAI DALL-E الرسمي، وهنا لدينا نوع واحد من النماذج، يمكنك الاطلاع على التفاصيل التي نقدمها. المعامل الأخير هو prompt، حيث يمثل prompt الكلمات التي ندخلها لتوليد الصورة. يمكنك أيضًا ملاحظة وجود كود استدعاء مطابق على الجانب الأيمن، يمكنك نسخ الكود وتشغيله مباشرة، أو يمكنك النقر على زر “Try” للاختبار.

مثال على كود استدعاء Python:
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)
بعد الاستدعاء، نجد أن النتيجة المرجعة هي كما يلي:
{
  "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"
    }
  ]
}
تتضمن النتيجة المرجعة عدة حقول، كما هو موضح أدناه:
  • created، هو معرف توليد الصورة، يستخدم لتحديد المهمة بشكل فريد.
  • data، يحتوي على معلومات نتائج توليد الصورة.
حيث أن data يحتوي على معلومات محددة حول الصورة التي تم إنشاؤها بواسطة النموذج، وurl هو رابط تفاصيل الصورة المولدة، كما هو موضح في الصورة.

图片质量参数 quality

بعد ذلك، سنقدم كيفية إعداد بعض المعلمات التفصيلية لنتائج توليد الصور، حيث تحتوي معلمة جودة الصورة quality على نوعين، الأول standard يشير إلى توليد صورة قياسية، والآخر hd يشير إلى أن الصورة المولدة تحتوي على تفاصيل أكثر دقة وتناسق أكبر. فيما يلي إعداد معلمة جودة الصورة إلى standard، كما هو موضح في الصورة أدناه:

يمكنك أيضًا ملاحظة وجود كود استدعاء مطابق على الجانب الأيمن، يمكنك نسخ الكود وتشغيله مباشرة، أو يمكنك النقر على زر “Try” للاختبار.

مثال على كود استدعاء Python:
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)
بعد الاستدعاء، نجد أن النتيجة المرجعة هي كما يلي:
{
  "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"
    }
  ]
}
تتوافق النتيجة المرجعة مع محتوى الاستخدام الأساسي، ويمكنك رؤية الصورة المولدة بمعلمة جودة الصورة standard كما هو موضح في الصورة أدناه:

مع نفس العملية المذكورة أعلاه، يكفي فقط تعيين معلمة جودة الصورة إلى hd، ويمكنك الحصول على الصورة كما هو موضح أدناه:

يمكنك ملاحظة أن الصور المولدة باستخدام hd تحتوي على تفاصيل أكثر دقة وتناسق أكبر مقارنة بـ standard.

图片大小尺寸参数 size

我们还可以设置生成图片的尺寸大小,我们可以进行下面的设置。 下面设置图片的尺寸大小为 1024 * 1024 ,具体设置如下图:

同时您可以注意到右侧有对应的调用代码生成,您可以复制代码直接运行,也可以直接点击「Try」按钮进行测试。

Python 样例调用代码:
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)
调用之后,我们发现返回结果如下:
{
  "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"
    }
  ]
}
返回的结果与基本使用的内容一致,可以看到图片的尺寸大小为 1024 * 1024 的生成图片如下图所示:

与上述相同操作,仅需将图片的尺寸大小为 1792 * 1024 ,可以得到如下图所示的图片: 可以看到图片的尺寸大小很明显不一样,另外还可以设置更多尺寸大小,详情信息参考我们官网文档。

图片风格参数 style

图片风格参数 style 包含俩个参数,第一种 vivid 表示生成的图片是更加生动的,另一种 natural 表示生成的图片更加的自然一点。 下面设置图片风格参数为 vivid ,具体设置如下图:

同时您可以注意到右侧有对应的调用代码生成,您可以复制代码直接运行,也可以直接点击「Try」按钮进行测试。

Python 样例调用代码:
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)
调用之后,我们发现返回结果如下:
{
  "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"
    }
  ]
}
返回的结果与基本使用的内容一致,可以看到图片风格参数为 vivid 的生成图片如下图所示:

与上述相同操作,仅需将图片风格参数为 natural ,可以得到如下图所示的图片:

可以看到 vividnatural 生成的图片具有更加生动逼真。

图片链接的格式参数 response_format

最后一个图片链接的格式参数 response_format 也有俩种,第一种 b64_json 是对图片链接进行 Base64 编码,另一种 url 就是普通的图片链接,可以直接查看图片。 下面设置图片链接的格式参数为 url ,具体设置如下图:

同时您可以注意到右侧有对应的调用代码生成,您可以复制代码直接运行,也可以直接点击「Try」按钮进行测试。

Python 样例调用代码:
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)
调用之后,我们发现返回结果如下:
{
  "created": 1721637575,
  "data": [
    {
      "revised_prompt": "صورة ساحرة لفرخ قضاعة البحر. تُرى القضاعة مستلقية بهدوء على ظهرها وسط الأمواج الزرقاء اللطيفة. فراء فرخ القضاعة مزيج جذاب من درجات البني الرمادي الناعمة، يلمع برفق في ضوء الشمس الخافت. يديها الصغيرتين تلمسان، مرفوعتين قليلاً نحو السماء كما لو كانت تلعب مع شيء غير مرئي. عيونها المستديرة والمعبرة واسعة بدافع الفضول، تتلألأ بالحياة والبراءة. استخدم أسلوباً واقعياً لاستحضار موطن القضاعة الطبيعي ومظهرها الخارجي الرقيق بشكل جذاب.",
      "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"
    }
  ]
}
返回的结果与基本使用的内容一致,可以看到图片链接的格式参数为 url 的生成图片的链接为 صورة URL 这是可以直接访问的,图片内容如下图所示:

与上述相同操作,仅需将图片链接的格式参数为 b64_json ,可以得到结果 Base64 编码后的图片链接,具体结果如下图所示:
{
  "created": 1721638071,
  "data": [
    {
      "b64_json": "iVBORw0..............v//AQEAAP4AAAD+AAADAQAAAwEEA/4D//8Q/Pbw64mKbVTFoQAAAABJRU5ErkJggg==",
      "revised_prompt": "صورة ساحرة لفرخ قضاعة البحر. القضاعة تطفو برفق على بحر أزرق هادئ، تستمتع بأشعة الشمس الذهبية الدافئة التي تتدفق من سماء صافية فوقها. فراء القضاعة بني غامق غني، ويبدو ناعماً ورقيقاً بشكل لا يصدق. عيون القضاعة مشرقة ومعبرة، مليئة بالفضول والفرح الطفولي. لديها آذان صغيرة منتصبة وأنف يشبه الزر مما يزيد من جاذبيتها العامة. في البحر من حولها، يمكن رؤية قطرات الماء المتلألئة، التي تنعشها أشعة الشمس، المنظر بالتأكيد رائع."
    }
  ]
}

استدعاء غير متزامن

نظرًا لأن واجهة برمجة تطبيقات OpenAI Images Generations قد تستغرق وقتًا طويلاً نسبيًا لإنشاء الصور، إذا لم تستجب واجهة برمجة التطبيقات لفترة طويلة، ستظل طلبات HTTP متصلة، مما يؤدي إلى استهلاك موارد النظام الإضافية، لذا توفر هذه الواجهة أيضًا دعمًا لاستدعاء غير متزامن. تتمثل العملية العامة في: عندما يقوم العميل بإرسال الطلب، يحدد حقل callback_url إضافي، بعد أن يقوم العميل بإرسال طلب API، ستقوم الواجهة على الفور بإرجاع نتيجة تحتوي على معلومات حقل task_id، تمثل معرف المهمة الحالي. عند الانتهاء من المهمة، سيتم إرسال نتيجة إنشاء الصورة إلى callback_url المحدد من قبل العميل عبر POST JSON، والتي تتضمن أيضًا حقل task_id، بحيث يمكن ربط نتيجة المهمة من خلال المعرف. دعونا نفهم كيفية القيام بذلك من خلال مثال. أولاً، يعد Webhook ردًا يمكنه استقبال طلبات HTTP، يجب على المطور استبداله بعنوان URL الخاص بخادم HTTP الذي قام بإنشائه. هنا، لتسهيل العرض، نستخدم موقع ويب عينة Webhook عام https://webhook.site/، افتح هذا الموقع للحصول على عنوان URL لـ Webhook، كما هو موضح في الصورة: انسخ هذا العنوان URL، يمكنك استخدامه كـ Webhook، والعينة هنا هي https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab. بعد ذلك، يمكننا تعيين الحقل callback_url إلى عنوان URL الخاص بـ Webhook المذكور أعلاه، مع ملء المعلمات المناسبة، كما هو موضح في الكود التالي:
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": "فرخ قضاعة البحر اللطيف",
    "callback_url": "https://webhook.site/3d32690d-6780-4187-a65c-870061e8c8ab"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
عند النقر على التشغيل، يمكنك أن ترى أنه سيتم الحصول على نتيجة على الفور، كما يلي:
{
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c"
}
بعد لحظات، يمكننا ملاحظة نتيجة إنشاء الصورة على عنوان URL الخاص بـ Webhook، المحتوى كما يلي:
{
  "success": true,
  "task_id": "6a97bf49-df50-4129-9e46-119aa9fca73c",
  "trace_id": "9b4b1ff3-90f2-470f-b082-1061ec2948cc",
  "data": {
    "created": 1721626477,
    "data": [
      {
        "revised_prompt": "صورة رائعة تعرض فرخ قضاعة البحر الشاب...",
        "url": "https://dalleprodsec.blob.core.windows.net/private/images/..."
      }
    ]
  }
}
يمكنك أن ترى أن النتيجة تحتوي على حقل task_id، يحتوي حقل data على نفس نتائج إنشاء الصورة كما في الاستدعاء المتزامن، من خلال حقل task_id يمكن ربط المهمة.

معالجة الأخطاء

عند استدعاء واجهة برمجة التطبيقات، إذا واجهت أخطاء، ستقوم الواجهة بإرجاع رمز الخطأ والمعلومات ذات الصلة. على سبيل المثال:
  • 400 token_mismatched:طلب غير صحيح، ربما بسبب معلمات مفقودة أو غير صالحة.
  • 400 api_not_implemented:طلب غير صحيح، ربما بسبب معلمات مفقودة أو غير صالحة.
  • 401 invalid_token:غير مصرح به، رمز تفويض غير صالح أو مفقود.
  • 429 too_many_requests:طلبات كثيرة جداً، لقد تجاوزت الحد الأقصى لمعدل الطلبات.
  • 500 api_error:خطأ داخلي في الخادم، حدث خطأ ما على الخادم.

مثال على استجابة الخطأ

{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "فشل في الاسترجاع"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}

الاستنتاج

من خلال هذه الوثيقة، لقد تعرفت على كيفية استخدام واجهة برمجة تطبيقات توليد الصور من OpenAI بسهولة باستخدام وظيفة توليد الصور الرسمية من OpenAI DALL-E. نأمل أن تساعدك هذه الوثيقة في التوصيل واستخدام هذه الواجهة بشكل أفضل. إذا كان لديك أي أسئلة، فلا تتردد في الاتصال بفريق الدعم الفني لدينا.