از مدل DALL·E 2 OpenAI برای تولید تصاویر با استفاده از پایتون استفاده کنید.
اگر تا به حال از ChatGPT استفاده کرده اید، پس شاهد شهود آن بوده اید. با APIهای OpenAI، تولید کد، تکمیل متن، مقایسه متن، آموزش مدل و تولید تصویر همگی در کیف توسعهدهندگان قرار دارند تا بتوانند برنامهها را کاوش کرده و در آنها ادغام کنند.
در این آموزش، نحوه استفاده از API OpenAI با پایتون برای تولید، ویرایش و تغییر تصاویر با استفاده از اعلانهای زبان طبیعی را خواهید آموخت.
شروع با OpenAI با استفاده از پایتون
قبل از شروع این آموزش باید چند مورد را تنظیم کنید. ابتدا مطمئن شوید که آخرین نسخه پایتون را روی رایانه خود نصب کرده اید. اگر از یک توزیع لینوکس مانند اوبونتو استفاده می کنید، ممکن است بخواهید نحوه نصب پایتون را در اوبونتو نیز ببینید.
یک پوشه جدید برای پروژه خود ایجاد کنید و خط فرمان خود را در پوشه پروژه خود باز کنید.
بعد نصب بسته OpenAI است. هنگام استفاده از نقطه پایانی ویرایش تصویر، برای تبدیل تصاویر به RGBA باید بالش نصب کنید. همچنین ممکن است بخواهید python-dotenv را نصب کنید. شما از این برای پنهان کردن کلیدهای مخفی استفاده خواهید کرد.
توصیه می کنیم یک محیط مجازی اختصاصی پایتون برای جداسازی وابستگی ها ایجاد کنید.
کد مورد استفاده در این پروژه در یک مخزن GitHub موجود است و برای استفاده شما تحت مجوز MIT رایگان است.
برای نصب بسته های python-dotenv، pillow و openai، دستور زیر را در ترمینال اجرا کنید:
pip install openai python-dotenv pillow
اکنون به OpenAI بروید و برای گرفتن کلید API خود وارد داشبورد خود شوید:
- پس از ورود به سیستم، روی نماد نمایه خود در قسمت بالا سمت راست کلیک کنید.
- به View API Keys بروید. اگر کلید API شما قابل مشاهده نیست، روی ایجاد کلید مخفی جدید کلیک کنید تا یک کلید جدید ایجاد شود.
- کلید مخفی تولید شده را کپی کرده و در جایی امن در رایانه خود قرار دهید. ممکن است بخواهید برای امنیت آن را در یک فایل متغیر محیطی در دایرکتوری ریشه پروژه خود جایگذاری کنید.
نحوه تولید و ویرایش تصاویر با OpenAI API در پایتون
تولید تصویر OpenAI API دارای نقاط پایانی برای تولید تصاویر جدید، ایجاد تغییرات تصویر و ویرایش آنها است.
در بخشهای بعدی، این نقاط پایانی را برای تولید، ویرایش، تغییر دادن و دانلود تصاویر با استفاده از درخواستهای زبان طبیعی بررسی خواهید کرد.
تولید تصاویر با استفاده از OpenAI API
نقطه پایانی تولید تصویر سه آرگومان کلمه کلیدی را می پذیرد. این موارد عبارتند از prompt، n و size.
کلمه کلیدی prompt رشته ای از متن است که تصویری را که می خواهید تولید کنید توصیف می کند، در حالی که n تعداد تصاویری است که در طول یک تماس API ایجاد می شود. اندازه، اندازه تصویر است، و طبق اسناد رسمی تولید تصویر OpenAI، در حال حاضر، تنها پیکسل های 256×256، 512×512 و 1024×1024 پیکسل را می پذیرد.
کد زیر تصاویر را با استفاده از اعلان های زبان طبیعی تولید می کند و URL آنها (آدرس های تصویر) را خروجی می دهد:
import openai
import os
import requests
from dotenv import load_dotenv
from PIL import Image
load_dotenv()
class ImageGenerator:
def __init__(self) -> str:
self.image_url: str
openai.api_key = os.getenv("OPENAI_API_KEY")
self.APIKey = openai.api_key
self.name = None
def generateImage(self, Prompt, ImageCount, ImageSize):
try:
self.APIKey
response = openai.Image.create(
prompt = Prompt,
n = ImageCount,
size = ImageSize,
)
self.image_url = response['data']
self.image_url = [image["url"] for image in self.image_url]
print(self.image_url)
return self.image_url
except openai.error.OpenAIError as e:
print(e.http_status)
print(e.error)
def downloadImage(self, names)-> None:
try:
self.name = names
for url in self.image_url:
image = requests.get(url)
for name in self.name:
with open("{}.png".format(name), "wb") as f:
f.write(image.content)
except:
print("An error occured")
return self.name
# Instantiate the class
imageGen = ImageGenerator()
# Generate images:
imageGen.generateImage(
Prompt = "Giant lion, bear, ape, and tiger standing on a water water fall",
ImageCount = 2,
ImageSize = '1024x1024'
)
# Download the images:
imageGen.downloadImage(names=[
"Animals",
"Animals2"
])
کد بالا حاوی یک کلاس ImageGenerator با ویژگی های image_url و APIKey است. متدgeneImage الزامات نقطه پایانی تولید تصویر را تطبیق می دهد. با استفاده از اعلان زبان طبیعی، بسته به مقدار ImageCount، n URL ایجاد می کند.
با این حال، self.image_url URL های تصویر تولید شده را از پاسخ JSON به فهرستی با استفاده از حلقه for در درک لیست استخراج می کند.
خروجی به شکل زیر است:
در نهایت روش downloadImage هر تصویر را با درخواست آدرس های تولید شده دانلود می کند. این روش n تعداد نامی را میپذیرد که میخواهید به هر تصویر بدهید.
ویرایش تصاویر با استفاده از OpenAI API
نقطه پایانی ویرایش به شما امکان می دهد یک تصویر موجود را بر اساس یک الگوی ماسک ویرایش کنید. ماسک یک فرمت RGBA با یک قسمت حاشیه نویسی و شفاف است و باید به اندازه تصویری باشد که می خواهید ویرایش کنید.
هنگامی که یک ماسک ارائه می کنید، نقطه پایانی ویرایش، ناحیه پوشانده شده خود را با دستور جدید در تصویر موجود جایگزین می کند تا یک تصویر جدید تولید کند. متدهای زیر را به کلاس قبلی بالا اضافه کنید:
class ImageGenerator:
def __init__(self, ...):
..............
def convertImage(self, maskName):
image = Image.open("{}.png".format(maskName))
rgba_image = image.convert('RGBA')
rgba_image.save("{}.png".format(maskName))
return rgba_image
def editImage(self, imageName, maskName, ImageCount, ImageSize, Prompt) -> str:
self.convertImage(maskName)
response = openai.Image.create_edit(
image = open("{}.png".format(imageName), "rb"),
mask = open("{}.png".format(maskName), "rb"),
prompt = Prompt,
n = ImageCount,
size = ImageSize,
)
self.image_url = response['data']
self.image_url = [image["url"] for image in self.image_url]
print(self.image_url)
return self.image_url
# Edit an existing image:
imageGen.editImage(
imageName = "Animals",
maskName = "mask",
ImageCount = 1,
ImageSize = "1024x1024",
Prompt = "An eagle standing on the river bank drinking water with a big mountain"
)
# Download the edited image:
imageGen.downloadImage(names=[
"New Animals",
])
متد convertImage تصویر ماسک را به فرمت RGBA تبدیل می کند. شما می توانید با استفاده از روش تبدیل از بسته بالش پایتون (وارد شده به عنوان PIL) به این هدف برسید.
پس از تبدیل، ماسک جدید را به عنوان نادیده گرفتن ماسک موجود ذخیره می کند. بنابراین، تبدیل تصویر اولین کاری است که روش ویرایش (editImage) انجام می دهد.
تصویر تصویر مورد نظر را از یک فایل موجود می خواند، در حالی که ماسک تصویر ماسک تبدیل شده را می خواند، که باید یک ناحیه شفاف داشته باشد.
می توانید با استفاده از نرم افزارهای ویرایش عکس مانند Gimp یا Photoshop، یک ناحیه شفاف در ماسک را مشخص کنید.
برای مثال، تصویری که میخواهیم با استفاده از دستور موجود در کد بالا ویرایش کنیم این است:
حال، فرض کنید میخواهید آنتلوپ ایستاده در کنار رودخانه را با عقاب جایگزین کنید، همانطور که در اعلان گفته شد.
این ماسک به نظر می رسد:
از آنجایی که کلمه کلیدی در دستور کد بالا می گوید: “عقاب ایستاده در ساحل رودخانه”، نقطه خالی توسط یک عقاب پر می شود و جایگزین آنتلوپی می شود که قبلا آنجا بود.
در اینجا تصویر جدید در این مورد است:
میتوانید با استفاده از عکسهای دیگر، با نقطه پایانی ویرایش تصویر بازی کنید.
ایجاد تغییرات تصویر در پایتون با استفاده از OpenAI API
نقطه پایانی تنوع تصاویر جایگزین را از یک تصویر موجود تولید می کند. با اضافه کردن یک روش تغییر تصویر مانند شکل زیر، کلاس تولید کننده تصویر را بیشتر گسترش دهید:
class ImageGenerator:
def __init__(self) -> str:
.............
def imageVariations(self, ImageName, VariationCount, ImageSize):
response = openai.Image.create_variation(
image = open("{}.png".format(ImageName), "rb"),
n = VariationCount,
size = ImageSize
)
self.image_url = response['data']
self.image_url = [image["url"] for image in self.image_url]
print(self.image_url)
return self.image_url
# Instantiate the class
imageGen = ImageGenerator()
# Generate variations for an existing image
imageGen.imageVariations(
ImageName = "New_Animals",
VariationCount = 2,
ImageSize = "1024x1024"
)
# Download the variations
imageGen.downloadImage(names=[
"Variation1",
"Variation2",
]
)
کد بالا تغییراتی از یک تصویر ایجاد می کند.
از OpenAI به نفع خود استفاده کنید
در حالی که برخی از افراد می ترسند که هوش مصنوعی مشاغل آنها را بدزدد، ممکن است یک پناهگاه باشد، اگر کنترل و استفاده از آن را یاد بگیرید. این آموزش ایجاد تصویر OpenAI تنها یکی از موارد استفاده از هوش مصنوعی در دنیای واقعی است. API های OpenAI مدل های از قبل آموزش دیده مفیدی را ارائه می دهند که می توانید به راحتی در برنامه خود ادغام کنید. بنابراین می توانید چالش را انجام دهید و از این آموزش چیزی ارزشمند بسازید.
اگرچه API تولید تصویر هنوز در مرحله بتا است، اما از قبل به شما امکان می دهد آثار هنری خیالی بسازید. امیدواریم که بهروزرسانیهای بیشتری دریافت کند تا امکان ارتقاء مقیاس و پذیرش اندازههای مختلف تصویر را فراهم کند.