تتجاوز إمكانيات النماذج اللغوية الكبيرة (LLMs) توليد النصوص فقط، حيث يمكن أيضًا توليد الصور من وصف النصوص. وجود الصور كوسيلة يمكن أن يكون مفيدًا للغاية في العديد من المجالات مثل التكنولوجيا الطبية، الهندسة المعمارية، السياحة، تطوير الألعاب والمزيد. في هذا الفصل، سنستعرض اثنين من أشهر نماذج توليد الصور، DALL-E وMidjourney.
في هذا الدرس، سنغطي:
- توليد الصور ولماذا هو مفيد.
- DALL-E وMidjourney، ما هما وكيف يعملان.
- كيفية بناء تطبيق لتوليد الصور.
بعد إكمال هذا الدرس، ستكون قادرًا على:
- بناء تطبيق لتوليد الصور.
- تحديد حدود لتطبيقك باستخدام الميتا برومبتس.
- العمل مع DALL-E وMidjourney.
تطبيقات توليد الصور هي طريقة رائعة لاستكشاف قدرات الذكاء الاصطناعي التوليدي. يمكن استخدامها، على سبيل المثال:
-
تحرير الصور وتركيبها. يمكنك توليد صور لمجموعة متنوعة من الاستخدامات، مثل تحرير الصور وتركيبها.
-
تطبيقها في مجموعة متنوعة من الصناعات. يمكن استخدامها أيضًا لتوليد صور لمجموعة متنوعة من الصناعات مثل التكنولوجيا الطبية، السياحة، تطوير الألعاب والمزيد.
كجزء من هذا الدرس، سنواصل العمل مع شركتنا الناشئة، Edu4All. سيقوم الطلاب بإنشاء صور لتقييماتهم، نوع الصور يعود إلى الطلاب، ولكن يمكن أن تكون رسومات لقصة خيالية خاصة بهم أو إنشاء شخصية جديدة لقصتهم أو مساعدتهم في تصور أفكارهم ومفاهيمهم.
إليك ما يمكن أن يولده طلاب Edu4All على سبيل المثال إذا كانوا يعملون في الفصل على المعالم:
باستخدام برومبت مثل:
"كلب بجانب برج إيفل في ضوء شمس الصباح الباكر"
DALL-E وMidjourney هما من أشهر نماذج توليد الصور، حيث يسمحان لك باستخدام البرومبتس لتوليد الصور.
لنبدأ بـ DALL-E، وهو نموذج ذكاء اصطناعي توليدي يقوم بتوليد الصور من وصف النصوص.
-
CLIP، هو نموذج يقوم بإنشاء تمثيلات رقمية للبيانات من الصور والنصوص.
-
Diffused attention، هو نموذج يقوم بتوليد الصور من التمثيلات الرقمية. يتم تدريب 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.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.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. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة.








