هناك أكثر من مجرد توليد النصوص في نماذج اللغة الكبيرة (LLMs). يمكن أيضًا توليد الصور من وصف النصوص. وجود الصور كوسيلة يمكن أن يكون مفيدًا للغاية في العديد من المجالات مثل التكنولوجيا الطبية، الهندسة المعمارية، السياحة، تطوير الألعاب والمزيد. في هذا الفصل، سنلقي نظرة على أكثر نماذج توليد الصور شهرة، DALL-E وMidjourney.
في هذا الدرس، سنغطي:
- توليد الصور ولماذا هو مفيد.
- DALL-E وMidjourney، ما هما وكيف يعملان.
- كيفية بناء تطبيق لتوليد الصور.
بعد إكمال هذا الدرس، ستكون قادرًا على:
- بناء تطبيق لتوليد الصور.
- تحديد حدود لتطبيقك باستخدام الميتا برومبتس.
- العمل مع DALL-E وMidjourney.
تطبيقات توليد الصور هي طريقة رائعة لاستكشاف قدرات الذكاء الاصطناعي التوليدي. يمكن استخدامها، على سبيل المثال:
-
تحرير الصور وتوليفها. يمكنك توليد صور لمجموعة متنوعة من الاستخدامات، مثل تحرير الصور وتوليف الصور.
-
تطبيقها على مجموعة متنوعة من الصناعات. يمكن استخدامها أيضًا لتوليد صور لمجموعة متنوعة من الصناعات مثل التكنولوجيا الطبية، السياحة، تطوير الألعاب والمزيد.
كجزء من هذا الدرس، سنواصل العمل مع شركتنا الناشئة، Edu4All. سيقوم الطلاب بإنشاء صور لتقييماتهم، نوع الصور يعود للطلاب، ولكن يمكن أن تكون رسومات لقصة خيالية خاصة بهم أو إنشاء شخصية جديدة لقصتهم أو مساعدتهم في تصور أفكارهم ومفاهيمهم.
إليك ما يمكن أن يولده طلاب Edu4All على سبيل المثال إذا كانوا يعملون في الفصل على المعالم:
باستخدام برومبت مثل:
"كلب بجانب برج إيفل في ضوء شمس الصباح الباكر"
DALL-E وMidjourney هما من أكثر نماذج توليد الصور شهرة، حيث يسمحان لك باستخدام برومبتس لتوليد الصور.
لنبدأ بـ DALL-E، وهو نموذج ذكاء اصطناعي توليدي يقوم بتوليد الصور من وصف النصوص.
-
CLIP، هو نموذج يقوم بإنشاء تمثيلات رقمية للبيانات من الصور والنصوص.
-
الانتباه المنتشر، هو نموذج يقوم بتوليد الصور من التمثيلات الرقمية. يتم تدريب DALL-E على مجموعة بيانات من الصور والنصوص ويمكن استخدامه لتوليد الصور من وصف النصوص. على سبيل المثال، يمكن استخدام DALL-E لتوليد صور لقطة ترتدي قبعة، أو كلب بتسريحة موهوك.
يعمل Midjourney بطريقة مشابهة لـ DALL-E، حيث يقوم بتوليد الصور من برومبتس النصوص. يمكن أيضًا استخدام Midjourney لتوليد الصور باستخدام برومبتس مثل "قطة ترتدي قبعة"، أو "كلب بتسريحة موهوك".
حقوق الصورة ويكيبيديا، الصورة مولدة بواسطة Midjourney
أولاً، DALL-E. DALL-E هو نموذج ذكاء اصطناعي توليدي يعتمد على بنية المحول مع محول ذاتي التراجع.
المحول الذاتي التراجع يحدد كيفية توليد النموذج للصور من وصف النصوص، حيث يولد بكسل واحد في كل مرة، ثم يستخدم البكسلات المولدة لتوليد البكسل التالي. يمر عبر طبقات متعددة في الشبكة العصبية، حتى تكتمل الصورة.
من خلال هذه العملية، يتحكم DALL-E في السمات، الأشياء، الخصائص، والمزيد في الصورة التي يولدها. ومع ذلك، فإن DALL-E 2 و3 لديهما تحكم أكبر في الصورة المولدة.
إذن ما الذي يتطلبه بناء تطبيق لتوليد الصور؟ تحتاج إلى المكتبات التالية:
- python-dotenv، يُوصى بشدة باستخدام هذه المكتبة للحفاظ على أسرارك في ملف .env بعيدًا عن الكود.
- openai، هذه المكتبة هي ما ستستخدمه للتفاعل مع واجهة برمجة التطبيقات OpenAI.
- pillow، للعمل مع الصور في Python.
- requests، لمساعدتك في إجراء طلبات HTTP.
إذا لم يتم ذلك بالفعل، اتبع التعليمات على صفحة Microsoft Learn لإنشاء مورد ونموذج Azure OpenAI. اختر DALL-E 3 كنموذج.
-
قم بإنشاء ملف .env بالمحتوى التالي:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"ابحث عن هذه المعلومات في بوابة Azure OpenAI Foundry لموردك في قسم "النشر".
-
اجمع المكتبات المذكورة أعلاه في ملف يسمى requirements.txt كالتالي:
python-dotenv openai pillow requests -
بعد ذلك، قم بإنشاء بيئة افتراضية وقم بتثبيت المكتبات:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtبالنسبة لنظام Windows، استخدم الأوامر التالية لإنشاء وتفعيل بيئتك الافتراضية:
python3 -m venv venv venv\Scripts\activate.bat
-
أضف الكود التالي في ملف يسمى 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)
لنشرح هذا الكود:
-
أولاً، نقوم باستيراد المكتبات التي نحتاجها، بما في ذلك مكتبة OpenAI، مكتبة dotenv، مكتبة requests، ومكتبة Pillow.
import openai import os import requests from PIL import Image import dotenv
-
بعد ذلك، نقوم بتحميل المتغيرات البيئية من ملف .env.
# import dotenv dotenv.load_dotenv()
-
بعد ذلك، نقوم بتكوين عميل خدمة 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" )
-
بعد ذلك، نقوم بتوليد الصورة:
# 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'] )
الكود أعلاه يستجيب بجسم JSON يحتوي على رابط URL للصورة المولدة. يمكننا استخدام الرابط لتحميل الصورة وحفظها في ملف.
-
أخيرًا، نقوم بفتح الصورة واستخدام عارض الصور القياسي لعرضها:
image = Image.open(image_path) image.show()
لنلقي نظرة على الكود الذي يولد الصورة بمزيد من التفصيل:
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، هو برومبت النص المستخدم لتوليد الصورة. في هذه الحالة، نستخدم البرومبت "أرنب على حصان، يحمل مصاصة، في مرج ضبابي حيث تنمو أزهار النرجس".
- size، هو حجم الصورة التي يتم توليدها. في هذه الحالة، نقوم بتوليد صورة بحجم 1024x1024 بكسل.
- n، هو عدد الصور التي يتم توليدها. في هذه الحالة، نقوم بتوليد صورتين.
- temperature، هو معلمة تتحكم في عشوائية مخرجات نموذج الذكاء الاصطناعي التوليدي. درجة الحرارة هي قيمة بين 0 و1 حيث 0 تعني أن المخرجات حتمية و1 تعني أن المخرجات عشوائية. القيمة الافتراضية هي 0.7.
هناك المزيد مما يمكنك القيام به مع الصور وسنغطي ذلك في القسم التالي.
لقد رأيت حتى الآن كيف تمكنا من توليد صورة باستخدام بضعة أسطر في Python. ومع ذلك، هناك المزيد مما يمكنك القيام به مع الصور.
يمكنك أيضًا القيام بما يلي:
- إجراء تعديلات. من خلال تقديم صورة موجودة وقناع وبرومبت، يمكنك تعديل الصورة. على سبيل المثال، يمكنك إضافة شيء إلى جزء من الصورة. تخيل صورة الأرنب، يمكنك إضافة قبعة للأرنب. كيف يمكنك القيام بذلك هو تقديم الصورة، قناع (تحديد الجزء من المنطقة للتغيير) وبرومبت نصي لتحديد ما يجب القيام به.
ملاحظة: هذا غير مدعوم في DALL-E 3.
إليك مثال باستخدام 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].urlالصورة الأساسية ستحتوي فقط على الصالة مع المسبح ولكن الصورة النهائية ستحتوي على فلامنغو:
-
إنشاء تنويعات. الفكرة هي أنك تأخذ صورة موجودة وتطلب إنشاء تنويعات لها. لإنشاء تنويع، تقدم صورة وبرومبت نصي وكود مثل هذا:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
ملاحظة، هذا مدعوم فقط على OpenAI.
درجة الحرارة هي معلمة تتحكم في عشوائية مخرجات نموذج الذكاء الاصطناعي التوليدي. درجة الحرارة هي قيمة بين 0 و1 حيث 0 تعني أن المخرجات حتمية و1 تعني أن المخرجات عشوائية. القيمة الافتراضية هي 0.7.
لنلقي نظرة على مثال كيف تعمل درجة الحرارة، من خلال تشغيل هذا البرومبت مرتين:
برومبت: "أرنب على حصان، يحمل مصاصة، في مرج ضبابي حيث تنمو أزهار النرجس"
الآن لنقم بتشغيل نفس البرومبت فقط لنرى أننا لن نحصل على نفس الصورة مرتين:
كما ترى، الصور متشابهة، لكنها ليست نفسها. لنحاول تغيير قيمة درجة الحرارة إلى 0.1 ونرى ما يحدث:
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
)لذلك دعونا نحاول جعل الاستجابة أكثر حتمية. يمكننا أن نلاحظ من الصورتين اللتين قمنا بتوليدهما أنه في الصورة الأولى، هناك أرنب وفي الصورة الثانية، هناك حصان، لذا الصور تختلف بشكل كبير.
لذلك دعونا نغير الكود الخاص بنا ونضبط درجة الحرارة إلى 0، مثل هذا:
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
)الآن عندما تقوم بتشغيل هذا الكود، تحصل على هاتين الصورتين:
هنا يمكنك أن ترى بوضوح كيف تتشابه الصور أكثر.
مع العرض التوضيحي الخاص بنا، يمكننا بالفعل توليد صور لعملائنا. ومع ذلك، نحتاج إلى إنشاء بعض الحدود لتطبيقنا.
على سبيل المثال، لا نريد توليد صور غير آمنة للعمل، أو غير مناسبة للأطفال.
يمكننا القيام بذلك باستخدام الميتا برومبتس. الميتا برومبتس هي برومبتس نصية تُستخدم للتحكم في مخرجات نموذج الذكاء الاصطناعي التوليدي. على سبيل المثال، يمكننا استخدام الميتا برومبتس للتحكم في المخرجات، وضمان أن الصور المولدة آمنة للعمل، أو مناسبة للأطفال.
الآن، كيف تعمل الميتا برومبتس؟
الميتا برومبتس هي برومبتس نصية تُستخدم للتحكم في مخرجات نموذج الذكاء الاصطناعي التوليدي، يتم وضعها قبل البرومبت النصي، وتُستخدم للتحكم في مخرجات النموذج وتضمينها في التطبيقات للتحكم في مخرجات النموذج. تضمين مدخلات البرومبت ومدخلات الميتا برومبت في برومبت نصي واحد.
مثال على ميتا برومبت سيكون التالي:
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)
الآن، دعونا نرى كيف يمكننا استخدام الميتا برومبتس في العرض التوضيحي الخاص بنا.
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 imageمن البرومبت أعلاه، يمكنك أن ترى كيف تأخذ جميع الصور التي يتم إنشاؤها في الاعتبار الميتا برومبت.
قدمنا Edu4All في بداية هذا الدرس. الآن حان الوقت لتمكين الطلاب من توليد صور لتقييماتهم.
سيقوم الطلاب بإنشاء صور لتقييماتهم تحتوي على معالم، نوع المعالم يعود للطلاب. يُطلب من الطلاب استخدام إبداعهم في هذه المهمة لوضع هذه المعالم في سياقات مختلفة.
إليك أحد الحلول الممكنة:
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)بعد إكمال هذا الدرس، تحقق من مجموعة تعلم الذكاء الاصطناعي التوليدي لمواصلة تطوير معرفتك بالذكاء الاصطناعي التوليدي!
انتقل إلى الدرس 10 حيث سنستعرض كيفية بناء تطبيقات الذكاء الاصطناعي باستخدام البرمجة منخفضة الكود
إخلاء المسؤولية:
تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة.








