JavaScript ile Yapay Zeka (OpenAI, Dall-E)
Herkese selamlar!
Ünlü yapay zeka araştırma şirketi olan OpenAI, 5 Ocak 2021'de piyasaya sürdüğü, metinsel tanımlardan görüntü oluşturan yapay zeka programı DALL-E’nin, 6 Nisan 2022 tarihinde yeni versiyonu DALL-E 2'yi tanıttı.
DALL-E 2, kendi başına bir çok yeniliklerle ve gelişmelerle gelirken, bizi sevindiren asıl haber bu teknolojiye API desteği verilerek geliştiricilerinde sürece dahil edilmesi oldu.
Open AI ve DALL-E
Detaylara geçmeden önce çok kısa OpenAI ve DALL-E teknolojilerinden bahsetmek istiyorum.
OpenAI
OpenAI, 11 Aralık 2015'de San Francisco merkezli kurulmuş bir yapay zeka araştırma şirketidir.
Şirketin genel amacı insanlığa fayda sağlayabilecek yapay zekâ hakkında araştırma yapmaktır.
Kar amacı gütmeyen bir şirket olarak kurulmuş, ancak 2015'te Elon Musk ve Sam Altman tarafından, 2019'da ise Microsoft’tan yatırım alarak kâr amacı güden şirket olmuştur.
DALL-E
DALL-E, 5 Ocak 2021'de OpenAI tarafından piyasa sürülen, metinsel tanımlardan görüntü oluşturan bir yapay zeka programıdır.
Adını ünlü ressam Salvador Dali ve WALL-E adlı animasyon robottan almıştır.
DALL-E 2
DALL-E 2, DALL-E’deki hataları ve performans sorunlarını en aza indirmek için üretildi. Yeni versiyonu ile eskisinden 4 kat daha hızlı çalışmasının yanında, oluşturduğu görseller daha kaliteli bir hale dönüştü.
Tabi API desteği ile geliştiricilerin dikkatini çekerek başka güzel bir hamle daha yapmış oldu.
Özellikler
DALL-E’nin özelliklerini metinsel, kodsal ve görsel olmak üzere üç ana kategoriye ayırabiliriz.
DALL-E şu anda çok fazla dili desteklemektedir. Bu yüzden örnekleri, anlaması kolay olması açısından Türkçe yapacağım.
Metinsel Özellikler
Metinsel özellik; yazmış olduğumuz metne DALL-E’nin mantıklı bir cevap vermesidir. Bu metin bir öneri ya da soru olabilir. Örneğin DALL-E’den bir öneri isteyebilirsiniz:
Kullanıcı: Bana 1 ile 10 arasında bulunan bir sayı söyler misin?
DALL-E: 7
Kullanıcı: Bana bir korku filmi önerir misin?
DALL-E: The Conjuring 2
Ya da soru sorabilirsiniz:
Kullanıcı: Superman kimdir?
DALL-E: Superman, yüksek kuvvetleri olan bir süper kahramandır.
Kullanıcı: Tavuk çorbası nasıl yapılır?
DALL-E: Tavuk çorbası, genellikle tavuk eti, sebzeler ve tuzdan oluşan bir yemektir.
DALL-E 100% Türkçeye duyarlı bir yapay zeka değildir. O yüzden örnekte verdiğim metinleri bilerek seçtim. Örneğin; Superman’in kim olduğunu sorduğumda bana Türkçe cevap verdi fakat Batman’in kim olduğunu sorduğumda bana İngilizce cevap verdi. Bu yüzden her Türkçe sorunuzun cevabını Türkçe alamayabilirsiniz, bilginize.
Tabi bunlar başlıca özellikler. Bunların dışında yazmış olduğunuz bir metni mantıklı bir şekilde tamamlayabilme ya da düzeltebilme gibi özellikleri de mevcut.
Kendiniz test etmek isterseniz hemen aşağıya bağlantı bırakıyorum.
Görsel Özellikler
Benim en sevdiğim özellik; görsel özellikler. Görsel özelliği; yazmış olduğunuz metne uygun bir görsel üretilmesi ya da var olan bir görsel üzerinden değişiklikler yapmak olarak tanımlayabiliriz.
Örneğin “Kırmızı tekerlekleri olan bir araba.” istediğimizde, bize bu şekilde bir görsel verebiliyor:
Ya da vermiş olduğu bu kesik resmi tamamlamasını isteyebiliyoruz:
Var olan bir resim üzerine, istediğimiz herhangi bir konuma istediğimiz bir objeyi ekleyebiliyoruz. Örneğin aşağıdaki görselde havuzun içine belirlediğimiz konuma bir flamingo eklenmiş.
Orjinal bir resimden esinlenerek, onun farklı varyantlarını oluşturabiliyor.
Bu özelliği test etmek isterseniz aşağıya link bırakıyorum.
Kodsal Özellikler
Kodsal özellik; ihtiyacınız olan işlevin DALL-E tarafından belirlemiş olduğunuz yazılım dili formatıyla size kod şeklinde teslim edilmesidir.
Şu anda en iyi sonucu Python yazılım diliyle versede, JavaScript, Go, Perl, PHP, Ruby, Swift, TypeScript, SQL ve hatta Shell yazılım dillerini de desteklemektedir.
Hatta sadece DALL-E kullanılarak JavaScript ile yazılmış bir uzay oyunu bile mevcut. Aşağıdaki videodan izleyebilirsiniz.
Bu geliştirme tabi biraz GitHub Copilot’ı hatırlattı gibi ama aralarında farklar var, bunlardan da birazdan bahsedeceğim.
GitHub Copilot hakkında bir fikriniz yoksa aşağıdaki makaleyi hızlıca okumanızı tavsiye ederim.
Örneğin; “JavaScript ile ekranın ortasına kırmızı top çizmesini” istediğimizde, aşağıdaki gibi bir çıktı vermektedir.
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.arc(100, 75, 50, 0, 2 * Math.PI);
ctx.fillStyle = "red";
ctx.fill();
ctx.stroke();
Ya da “JavaScript ile 10 elemanlı, hayvanlardan oluşan bir array vermesini” istediğimizde, aşağıdaki çıktıyı verir.
var animals = ["lion", "tiger", "cat", "bird", "snake", "monkey", "leopard", "jaguar", "lynx", "cheetah"];
Yazmış olduğunuz bir kodun ne işe yaradığını bile öğrenebilirsiniz. Örneğin; aşağıdaki kodun işlevini öğrenmek için bu şekilde eklediğimizde,
// Function 1
var animals = ["lion", "tiger", "cat", "bird", "snake", "monkey", "leopard", "jaguar", "lynx", "cheetah"];
var animal = animals[Math.floor(Math.random()*10)];
console.log(animal);
// Function 1 fonksiyonun işlevi nedir?
bize aşağıdaki gibi bir çıktı veriyor:
// Hayvanlar dizisinden rastgele bir hayvan çeken fonksiyon
Gerçekten harika ve ucu açık, heyecan verici bir özellik. Bakalım daha yaratıcı hangi özellikler gelecek :)
Bu özelliği test etmek isterseniz aşağıya link bırakıyorum.
DALL-E’nin kodsal özelliklerinin, GitHub Copilot’a çok benzediğini fakat yinede arada farkların olduğundan bahsetmiştik. Şimdi madde madde farklarına bakalım:
- GitHub Copilot’ı eklenti olarak ekleyip, editor üzerinden kullanabilirsiniz. Fakat DALL-E’de böyle bir özellik mevcut değil maalesef.
- GitHub Copilot kod satırlarını kontrol eder ve öneriler sunar. DALL-E ise bunun yerine, size açıklamada yazmış olduğunuz işlevin kodunu verir.
- GitHub Copilot’ın kodu otomatik tamamlama özelliği mevcuttur, fakat DALL-E’de böyle bir özellik mevcut değildir.
- GitHub Copilot’ın amacı kod yazmaya yardımcı olmaktır. DALL-E’nin ise kullanıcının isteğini anlayarak kod çıktısı üretebilmektir.
- DALL-E’nin yapay zeka işlevi, GitHub Copilot’tan daha gelişmiştir.
- DALL-E’nin görsel üzerinde işlemler yapabileceğiniz online tasarım aracı mevcuttur. GitHub Copilot’ta böyle bir araç mevcut değildir.
- DALL-E’de API desteği mevcut olduğundan proje içinde kullanılabilir. GitHub Copilot’ta böyle bir destek bulunmamaktadır.
API Özellikleri
Her şey harika fakat bu özellikleri projemizde nasıl kullanacağız? Yine bu özellikleri kullanım şekline göre metinsel api ve görsel api olmak üzere iki kategoriye ayıracağım.
Bu özelliklerin kullanımına geçmeden önce, bir takım alt yapı hazırlığı yapmamız gerekiyor.
Bunları sırasıyla anlatıyorum, öncelikle API KEY işlemini yapalım:
- OpenAI sitesine girin ve menüden API’ye tıklayın.
- Eğer üye değilseniz SIGN UP butonuna basarak üye olun, eğer üyeyseniz LOG IN butonuna basarak giriş yapın.
- Giriş yaptıktan sonra sağ üstten profilinize tıklayın, açılan listeden View API keys’e tıklayın.
- Açılan ekranda Create new secret key butonuna tıklayarak API kodunuzu alın ve bir yere kaydedin.
API KEY’imizi aldıktan sonra, yazılımsal alt yapımızı oluşturalım:
- Bilgisayarınızda Node.js yüklü değilse yükleyin.
- Buradaki OpenAI tarafından hazırlanmış hazır kit’i klonlayın.
npm install
komutu ile gereksinimleri yükleyin.cp .env.example .env
komutu ile örnek environment dosyasını.env
isminde kopyalayın.- Daha önceden almış olduğumuz API KEY’imizi, bu yeni oluşturduğumuz
.env
isimli dosyamızın içine ekleyin. npm run dev
diyerek projeyi ayağa kaldırın ve artık hazırsınız.
Alt yapı işlemlerimizi tamamladık. OpenAI’ın oluşturmuş olduğu kit içinde örnek kodlar bulunmaktadır. Dilerseniz bulunan kodları inceleyebilir, dilerseniz yeni bir index.js
dosyası oluşturarak yeni API geliştirmeleri yapabilirsiniz.
API kullanımlarına geçmeden önce önemli bir konu var; attığımız her istek ücretli! Fakat üzülmeyin OpenAI ücretsiz bir şekilde deneyebilmemiz için bir kota koymuş bulunmakta.
Yaptığımız geliştirmelerde, kullandığımız yapay zeka türünden tutunda, görselin çözünürlüğüne göre fiyatlar değişkenlik göstermektedir.
Size $18'lık ücretsiz deneme limiti veriyor. Fiyat bilgisi almak için buraya, kullanım miktarınızı ve kotanızın ne kadar kaldığını görmek için buraya tıklayabilirsiniz.
Metinsel API
Metinsel API kendi için bir çok işlevsellik barındırıyor, bu yüzden işlevselliklerine göre kullanımları yazağım.
Metni Otomatik Tamamlama
Otomatik tamamlama özelliği; göndermiş olduğunuz bir metin parametresini mantıklı bir şekilde otomatik tamamlayarak size döner.
POST https://api.openai.com/v1/completions
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createCompletion({
model: "text-davinci-002",
prompt: "Say this is a test",
max_tokens: 6,
temperature: 0,
});
Metni Düzenleme
Düzenleme özelliği; göndermiş olduğunuz bir metin içinde, metinsel hataları bulup, düzenlemesidir.
POST https://api.openai.com/v1/edits
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createEdit({
model: "text-davinci-edit-001",
input: "What day of the wek is it?",
instruction: "Fix the spelling mistakes",
});
Görsel API
Görsel API kendi için bir çok işlevsellik barındırıyor, bu yüzden işlevselliklerine göre kullanımları yazağım.
Görsel Oluşturma
Görsel oluşturma özelliği; göndermiş olduğumuz metnin içeriğine göre bir resim oluşturmasıdır.
POST https://api.openai.com/v1/images/generations
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createImage({
prompt: "A cute baby sea otter",
n: 2,
size: "1024x1024",
});
Görsel Düzenleme
Görsel düzenleme özelliği; düzenleme yapılacak iki görsel parametresi ve hangi görsele hangisinin nasıl ekleneceğini belirttiğimiz bir metin parametresi verilerek, bir görsel düzenleme yapmasıdır.
POST https://api.openai.com/v1/images/edits
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createImageEdit(
fs.createReadStream("otter.png"),
fs.createReadStream("mask.png"),
"A cute baby sea otter wearing a beret",
2,
"1024x1024"
);
Benzer Görsel Oluşturma
Benzer görsel oluşturma özelliği; göndermiş olduğumuz görsel parametresine benzer görsel varyansları oluşturmaktadır.
POST https://api.openai.com/v1/images/variations
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const response = await openai.createImageVariation(
fs.createReadStream("otter.png"),
2,
"1024x1024"
);
Bunların dışında yine bir çok özelliği mevcut, bunları daha detaylı incelemeniz için aşağıya link bırakıyorum.
DALL-E Altyapılı Uygulamalar
DALL-E gelişime açık ve heyecan yaratan bir teknoloji olmasının ardından, bir çok önemli firma DALL-E’nin yapay zekasını kullanarak yazılım ürünleri geliştirmeye başladı bile.
Designer Uygulaması
Microsoft tarafından geliştirmeleri yapılan ve DALL-E alt yapısı kullanılan bu program, yapay zeka kullanılarak tasarım yapmaya olanak sağlayacak.
Program şu anda geliştirme aşamasında. Dilerseniz websitesi üzerinden bekleme listesine kaydolabilir, geliştirme tamamlandığında ilk deneyenlerden biri olabilirsiniz.
Cala Uygulaması
CALA, yapay zeka kullanan dünyanın ilk moda ve yaşam tarzı işletim sistemidir. Bir ürünün tasarım sürecinden, satın alım sürecine kadar tüm süreci tek çatı altında toplayan bir uygulamadır.
Ayrıca sistem kullanıcıların doğal metin açıklamalarından veya yüklenen referans resimlerden yeni tasarım fikirleri oluşturmasına olanak tanıyor.
Mixtiles Uygulaması
Mixtiles, hızla büyüyen bir fotoğraf girişimidir. Kullanıcılara çocukluk anılarını, hayallerindeki yerleri ve daha fazlasını yakalayan yaratıcı bir süreçte rehberlik ederek, duygusal olarak yankı uyandıran sanat eserleri oluşturmak ve çerçevelemek için DALL-E’yi kullanıyor.
DALL-E’nin Yaratabileceği Problemler
DALL-E bir yapay zeka girişimi olduğundan, gelişimi uçsuz bucaksız bir dünyadır. Bu yüzden yaratıcılığın gelişmesine olanak sağlasada, sonuçları bazı topluluklar tarafından hoş karşılanmıyor.
Kötüye Kullanım
DALL-E basit bir şekilde; istenilen isteğe sonuç döner. Fakat bu istek illegal bir durum olabilir, müstehcen bir görsel olabilir ya da argo kelimeler kullanılabilir.
OpenAI bu durumuda düşünerek DALL-E için bir kontrol mekanizması yapmış. Bu sayede kötüye kullanım algılandığında sizi uyarıyor. Fakat siz uyarılara rağmen kötüye kullanıma devam etmeniz halinde, API kodunuz etkisiz hale getirilip profilinizi engellemeye kadar gidebiliyor.
Sanatçılar ve Fotoğrafçılar
Bir çok sanatçı ve fotoğrafçı bu durumdan elbette olumsuz etkileneceklerini düşünüyorlar. Sonuçta bir sanatçının haftalarca, hatta aylarca çalıştığı ve emek verdiği bir görseli DALL-E saniyeler içinde tamamlayabiliyor.
Fakat ben bu olayın sanatçıları ve fotoğrafçıları olumsuz etkileyeceğini düşünmüyorum. Sonuçta kimi insan gerçek bir tablo resimden hoşlanabilir, kimisi bilgisayardaki bir görselden.
Haberleri internetten ve ya televizyon takip etmemize rağmen, gazeteler basılmaya devam ediliyor.
Tabi bir yapay zeka tarafından yazılmış makaleyide unutmayalım. Aşağıda türkçeye çevrilmiş halini paylaşıyorum.
Ücretlendirme
Bir girişimin içinde Elon Musk olurda ücretsiz olur mu? Elbette olmaz. Haliyle özellikle para birimi dolara göre düşük olan geliştiriciler için, uzun soluklu geliştirmeler yapmak biraz pahalı olabiliyor.
Son Notlar
Yazılım hayatımızın bir vazgeçilmezi olmaya devam ediyor. Bulunduğumuz konumda ya bu teknolojiye ayak uydurucaz ya da halimize üzülmeye devam edeceğiz.
Yeterince gelişmiş bir teknoloji, sihirden ayırt edilemez.
Arthur C. Clarke
Kaynaklar
- https://beta.openai.com/docs/guides/images/introduction
- https://openai.com/api/pricing/
- https://openai.com/blog/dall-e-api-now-available-in-public-beta/
- https://openai.com/dall-e-2/
- https://medium.com/geekculture/dall-e-2-ai-image-generation-opens-more-possibilities-for-creatives-ac722c1d2345
- https://en.wikipedia.org/wiki/OpenAI
- https://github.com/openai/openai-quickstart-node
- https://berkecanongun.medium.com/bu-makalenin-tamam%C4%B1n%C4%B1-bir-robot-yazd%C4%B1-hen%C3%BCz-korkmad%C4%B1n-m%C4%B1-insan-c40fdb13bb01
- https://beta.openai.com/playground
- https://www.saashub.com/compare-github-copilot-vs-dall-e
- https://openai.com/about/
- https://openai.com/timeline/
Makalemi okuduğun için çok teşekkür ederim. Beni sosyal medya linklerimden takip edebilir ve makalelerim hakkında olumlu ya da olumsuz fikirlerini mail adresim üzerinden bana çekinmeden iletebilirsin.
- https://www.instagram.com/thelordofthecodes/
- https://github.com/yasgo
- https://www.npmjs.com/~yasgo
- https://stackoverflow.com/users/6172769/yasgo
- https://codepen.io/yasgo
- https://www.behance.net/yasgo
- https://dribbble.com/yasgo
Bir sonraki yazımda görüşmek üzere…