LLM tidak hanya untuk menghasilkan teks. Anda juga dapat menghasilkan gambar dari deskripsi teks. Memiliki gambar sebagai modalitas bisa sangat berguna di berbagai bidang seperti MedTech, arsitektur, pariwisata, pengembangan game, dan lainnya. Dalam bab ini, kita akan membahas dua model generasi gambar yang paling populer, DALL-E dan Midjourney.
Dalam pelajaran ini, kita akan membahas:
- Generasi gambar dan mengapa itu berguna.
- DALL-E dan Midjourney, apa itu, dan bagaimana cara kerjanya.
- Cara membangun aplikasi generasi gambar.
Setelah menyelesaikan pelajaran ini, Anda akan dapat:
- Membangun aplikasi generasi gambar.
- Menentukan batasan untuk aplikasi Anda dengan meta prompt.
- Bekerja dengan DALL-E dan Midjourney.
Aplikasi generasi gambar adalah cara yang bagus untuk mengeksplorasi kemampuan AI Generatif. Mereka dapat digunakan untuk, misalnya:
-
Pengeditan dan sintesis gambar. Anda dapat menghasilkan gambar untuk berbagai kasus penggunaan, seperti pengeditan gambar dan sintesis gambar.
-
Diterapkan pada berbagai industri. Mereka juga dapat digunakan untuk menghasilkan gambar untuk berbagai industri seperti MedTech, Pariwisata, Pengembangan Game, dan lainnya.
Sebagai bagian dari pelajaran ini, kita akan melanjutkan bekerja dengan startup kita, Edu4All. Para siswa akan membuat gambar untuk penilaian mereka, gambar apa yang akan dibuat terserah siswa, tetapi mereka bisa membuat ilustrasi untuk dongeng mereka sendiri atau menciptakan karakter baru untuk cerita mereka atau membantu mereka memvisualisasikan ide dan konsep mereka.
Berikut adalah contoh gambar yang dapat dihasilkan oleh siswa Edu4All jika mereka sedang belajar tentang monumen di kelas:
menggunakan prompt seperti
"Anjing di sebelah Menara Eiffel di bawah sinar matahari pagi"
DALL-E dan Midjourney adalah dua model generasi gambar yang paling populer, mereka memungkinkan Anda menggunakan prompt untuk menghasilkan gambar.
Mari kita mulai dengan DALL-E, yang merupakan model AI Generatif yang menghasilkan gambar dari deskripsi teks.
DALL-E adalah kombinasi dari dua model, CLIP dan diffused attention.
-
CLIP, adalah model yang menghasilkan embeddings, yaitu representasi numerik dari data, dari gambar dan teks.
-
Diffused attention, adalah model yang menghasilkan gambar dari embeddings. DALL-E dilatih pada dataset gambar dan teks dan dapat digunakan untuk menghasilkan gambar dari deskripsi teks. Misalnya, DALL-E dapat digunakan untuk menghasilkan gambar kucing dengan topi, atau anjing dengan mohawk.
Midjourney bekerja dengan cara yang mirip dengan DALL-E, ia menghasilkan gambar dari prompt teks. Midjourney juga dapat digunakan untuk menghasilkan gambar menggunakan prompt seperti "kucing dengan topi", atau "anjing dengan mohawk".
Kredit gambar Wikipedia, gambar dihasilkan oleh Midjourney
Pertama, DALL-E. DALL-E adalah model AI Generatif berbasis arsitektur transformer dengan autoregressive transformer.
Autoregressive transformer mendefinisikan bagaimana model menghasilkan gambar dari deskripsi teks, ia menghasilkan satu piksel pada satu waktu, dan kemudian menggunakan piksel yang dihasilkan untuk menghasilkan piksel berikutnya. Melewati beberapa lapisan dalam jaringan neural, hingga gambar selesai.
Dengan proses ini, DALL-E mengontrol atribut, objek, karakteristik, dan lainnya dalam gambar yang dihasilkan. Namun, DALL-E 2 dan 3 memiliki kontrol lebih besar atas gambar yang dihasilkan.
Jadi, apa yang diperlukan untuk membangun aplikasi generasi gambar? Anda memerlukan pustaka berikut:
- python-dotenv, sangat disarankan untuk menggunakan pustaka ini untuk menyimpan rahasia Anda dalam file .env yang terpisah dari kode.
- openai, pustaka ini yang akan Anda gunakan untuk berinteraksi dengan API OpenAI.
- pillow, untuk bekerja dengan gambar di Python.
- requests, untuk membantu Anda membuat permintaan HTTP.
Jika belum dilakukan, ikuti petunjuk di halaman Microsoft Learn untuk membuat sumber daya dan model Azure OpenAI. Pilih DALL-E 3 sebagai model.
-
Buat file .env dengan konten berikut:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Temukan informasi ini di Portal Azure OpenAI Foundry untuk sumber daya Anda di bagian "Deployments".
-
Kumpulkan pustaka di atas dalam file bernama requirements.txt seperti ini:
python-dotenv openai pillow requests -
Selanjutnya, buat lingkungan virtual dan instal pustaka:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtUntuk Windows, gunakan perintah berikut untuk membuat dan mengaktifkan lingkungan virtual Anda:
python3 -m venv venv venv\Scripts\activate.bat
-
Tambahkan kode berikut dalam file bernama 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)
Mari kita jelaskan kode ini:
-
Pertama, kita mengimpor pustaka yang kita butuhkan, termasuk pustaka OpenAI, pustaka dotenv, pustaka requests, dan pustaka Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Selanjutnya, kita memuat variabel lingkungan dari file .env.
# import dotenv dotenv.load_dotenv()
-
Setelah itu, kita mengonfigurasi klien layanan 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" )
-
Selanjutnya, kita menghasilkan gambar:
# 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'] )
Kode di atas merespons dengan objek JSON yang berisi URL gambar yang dihasilkan. Kita dapat menggunakan URL untuk mengunduh gambar dan menyimpannya ke file.
-
Terakhir, kita membuka gambar dan menggunakan penampil gambar standar untuk menampilkannya:
image = Image.open(image_path) image.show()
Mari kita lihat kode yang menghasilkan gambar secara lebih rinci:
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, adalah prompt teks yang digunakan untuk menghasilkan gambar. Dalam kasus ini, kita menggunakan prompt "Kelinci di atas kuda, memegang lolipop, di padang rumput berkabut tempat tumbuh bunga daffodil".
- size, adalah ukuran gambar yang dihasilkan. Dalam kasus ini, kita menghasilkan gambar berukuran 1024x1024 piksel.
- n, adalah jumlah gambar yang dihasilkan. Dalam kasus ini, kita menghasilkan dua gambar.
- temperature, adalah parameter yang mengontrol tingkat keacakan output model AI Generatif. Nilai temperature adalah antara 0 dan 1 di mana 0 berarti output deterministik dan 1 berarti output acak. Nilai default adalah 0.7.
Ada lebih banyak hal yang dapat Anda lakukan dengan gambar yang akan kita bahas di bagian berikutnya.
Sejauh ini Anda telah melihat bagaimana kita dapat menghasilkan gambar menggunakan beberapa baris kode di Python. Namun, ada lebih banyak hal yang dapat Anda lakukan dengan gambar.
Anda juga dapat melakukan hal berikut:
- Melakukan pengeditan. Dengan memberikan gambar yang ada, sebuah mask, dan prompt, Anda dapat mengubah gambar. Misalnya, Anda dapat menambahkan sesuatu ke bagian tertentu dari gambar. Bayangkan gambar kelinci kita, Anda dapat menambahkan topi ke kelinci. Cara melakukannya adalah dengan memberikan gambar, mask (mengidentifikasi bagian area untuk perubahan) dan prompt teks untuk mengatakan apa yang harus dilakukan.
Catatan: ini tidak didukung di DALL-E 3.
Berikut adalah contoh menggunakan 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].urlGambar dasar hanya akan berisi lounge dengan kolam renang tetapi gambar akhir akan memiliki flamingo:
-
Membuat variasi. Ide dasarnya adalah Anda mengambil gambar yang ada dan meminta agar variasi dibuat. Untuk membuat variasi, Anda memberikan gambar dan prompt teks serta kode seperti ini:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Catatan, ini hanya didukung di OpenAI.
Temperature adalah parameter yang mengontrol tingkat keacakan output model AI Generatif. Nilai temperature adalah antara 0 dan 1 di mana 0 berarti output deterministik dan 1 berarti output acak. Nilai default adalah 0.7.
Mari kita lihat contoh bagaimana temperature bekerja, dengan menjalankan prompt ini dua kali:
Prompt: "Kelinci di atas kuda, memegang lolipop, di padang rumput berkabut tempat tumbuh bunga daffodil"
Sekarang mari kita jalankan prompt yang sama untuk melihat bahwa kita tidak akan mendapatkan gambar yang sama dua kali:
Seperti yang Anda lihat, gambar-gambar tersebut serupa, tetapi tidak sama. Mari kita coba mengubah nilai temperature menjadi 0.1 dan lihat apa yang terjadi:
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
)Jadi mari kita coba membuat respons lebih deterministik. Kita dapat mengamati dari dua gambar yang kita hasilkan bahwa pada gambar pertama, ada kelinci dan pada gambar kedua, ada kuda, sehingga gambar-gambar tersebut sangat bervariasi.
Oleh karena itu, mari kita ubah kode kita dan atur temperature menjadi 0, seperti ini:
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
)Sekarang ketika Anda menjalankan kode ini, Anda mendapatkan dua gambar ini:
Di sini Anda dapat dengan jelas melihat bagaimana gambar-gambar tersebut lebih mirip satu sama lain.
Dengan demo kita, kita sudah dapat menghasilkan gambar untuk klien kita. Namun, kita perlu membuat beberapa batasan untuk aplikasi kita.
Misalnya, kita tidak ingin menghasilkan gambar yang tidak aman untuk dilihat, atau yang tidak sesuai untuk anak-anak.
Kita dapat melakukan ini dengan metaprompt. Metaprompt adalah prompt teks yang digunakan untuk mengontrol output model AI Generatif. Misalnya, kita dapat menggunakan metaprompt untuk mengontrol output, dan memastikan bahwa gambar yang dihasilkan aman untuk dilihat, atau sesuai untuk anak-anak.
Sekarang, bagaimana metaprompt bekerja?
Metaprompt adalah prompt teks yang digunakan untuk mengontrol output model AI Generatif, mereka ditempatkan sebelum prompt teks, dan digunakan untuk mengontrol output model serta diintegrasikan dalam aplikasi untuk mengontrol output model. Menggabungkan input prompt dan input metaprompt dalam satu prompt teks.
Salah satu contoh metaprompt adalah sebagai berikut:
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)
Sekarang, mari kita lihat bagaimana kita dapat menggunakan metaprompt dalam demo kita.
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 imageDari prompt di atas, Anda dapat melihat bagaimana semua gambar yang dibuat mempertimbangkan metaprompt.
Kami memperkenalkan Edu4All di awal pelajaran ini. Sekarang saatnya untuk membantu siswa menghasilkan gambar untuk penilaian mereka.
Para siswa akan membuat gambar untuk penilaian mereka yang berisi monumen, monumen apa yang akan dibuat terserah siswa. Para siswa diminta menggunakan kreativitas mereka dalam tugas ini untuk menempatkan monumen tersebut dalam berbagai konteks.
Berikut adalah salah satu solusi yang mungkin:
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)Setelah menyelesaikan pelajaran ini, lihat koleksi Pembelajaran AI Generatif kami untuk terus meningkatkan pengetahuan Anda tentang AI Generatif!
Lanjutkan ke Pelajaran 10 di mana kita akan melihat cara membangun aplikasi AI dengan kode rendah
Penafian:
Dokumen ini telah diterjemahkan menggunakan layanan penerjemahan AI Co-op Translator. Meskipun kami berupaya untuk memberikan hasil yang akurat, harap diketahui bahwa terjemahan otomatis mungkin mengandung kesalahan atau ketidakakuratan. Dokumen asli dalam bahasa aslinya harus dianggap sebagai sumber yang otoritatif. Untuk informasi yang penting, disarankan menggunakan jasa penerjemahan manusia profesional. Kami tidak bertanggung jawab atas kesalahpahaman atau penafsiran yang timbul dari penggunaan terjemahan ini.








