【GAS】画像生成AI・DALL-EをOpenAIのAPIから画像を生成(ドライブ保存)

OpenAIがAPIとして提供しているサービスの中に、DALL-Eと呼ばれる画像生成AIがあります。

Google Apps Script(GAS)を使ってOpenAIのAPIリクエストをすれば、DALL-Eによる生成画像を取得可能です。

そこで、GASでOpenAIのDALL-E画像生成をAPI経由で実行し、Googleドライブに保存する方法をサンプルコードを使って解説します。

2022年は画像生成AIが大流行

2022年は画像生成AIが大流行した1年でした。

その火付け役となったのが「Stable diffusion」で、その後も色々な画像生成AIが登場しました。

その精度はすさまじく、芸術コンテストに画像生成AIが作られた作品が受賞するほどです。

画像生成AIに意図する画像を生成してもらうために、指示のプロンプトを工夫するエンジニアリングとして、「プロンプトエンジニア」という言葉も生まれました。

劇的なブレイクスルーを果たした画像生成AIは今後もますます進化が進んでいくと考えられます。

OpenAIはDALL-Eという画像生成AIをAPI提供

そうした画像生成AIが流行する中で、単に画像生成AIをユーザーとして利用するだけでなく、活用したいニーズも出てきています。

Stable diffusionはオープンソースとして提供されているため、自分で環境構築すれば画像生成AIを活用したサービスが開発可能です。

しかし、Stable diffusionを利用したサービスにはサーバー上での環境構築に加え、GPUなどの豊富なリソースを持つサーバーが必要です。

もっと手軽に活用する方法として、APIリクエストで画像生成AIを利用する方法が挙げられます。

文章生成AI「ChatGPT」でおなじみのOpenAIは、DALL-E(ダリ)という画像生成AIをAPIとして提供しています。

OpenAIが提供する画像生成AIの「DALL-E」の紹介ページ

そのため、OpenAIが提供するAPIにリクエストすれば、画像生成AI用サーバーを用意せずに、構築済みのDALL-Eによる画像生成を組み込んだサービスが開発可能です。

OpenAIのユーザー登録とAPIキー発行方法

画像生成AIであるDALL-EをAPIとして利用するには、提供元のOpenAIのユーザー登録とAPIキーの発行が必要です。

以前、AutoWorkerが投稿したブログ記事で、OpenAIのAPIキー発行手順を解説しました。

OpenAIのサービス画面は少しずつアップデートされているため、現時点で最新の情報で解説しています。

上記の記事の通りに実行するうことで、OpenAIのAPIキーを取得することができます。

GASで画像生成AIのDALL-EにAPIを使うサンプルコード

実際にGoogle Apps Script(GAS)を使ってOpenAIにAPIリクエストして、画像生成AI「DALL-E」を利用してみます。

GASで画像生成AIへの指示するテキスト(プロンプト)をOpenAIのAPI経由で送り、生成された画像をGoogleドライブに保存するサンプルコードです。

Google Apps Script(GAS)でOpenAIの画像生成AI「DALL-E」にAPIリクエストして生成された画像を取得し、Googleドライブに保存するサンプルコード
function requestImages() {
  //スクリプトプロパティに設定したOpenAIのAPIキーを取得
  const apiKey = ScriptProperties.getProperty('APIKEY');
  //画像生成AIのAPIのエンドポイントを設定
  const apiUrl = 'https://api.openai.com/v1/images/generations';
  //画像生成AIに投げるテキスト(プロンプト)を定義
  const prompt = '窓際で日向ぼっこして眠るネコ';
  //OpenAIのAPIリクエストに必要なヘッダー情報を設定
  let headers = {
    'Authorization':'Bearer '+ apiKey,
    'Content-type': 'application/json',
    'X-Slack-No-Retry': 1
  };
  //画像生成の枚数とサイズ、プロンプトをオプションに設定
  let options = {
    'muteHttpExceptions' : true,
    'headers': headers, 
    'method': 'POST',
    'payload': JSON.stringify({
      'n': 1,
      'size' : '1024x1024',
      'prompt': prompt})
  };
  //OpenAIの画像生成(Images)にAPIリクエストを送り、結果を変数に格納
  const response = JSON.parse(UrlFetchApp.fetch(apiUrl, options).getContentText());
  //生成された画像のURLにフェッチして画像データを取得して、名前をつける
  const image = UrlFetchApp.fetch(response.data[0].url).getAs('image/png').setName('DALL-E生成画像');
  //Googleドライブに画像を保存し、画像の保存先URLをログ出力
  const driveUrl = DriveApp.createFile(image).getUrl();
  console.log('Googleドライブ格納先:'+ driveUrl);
}

まず、発行したOpenAIのAPIキーをGASのスクリプトプロパティから読み取っています。

スクリプトプロパティはGASスクリプトエディタの左メニューにある歯車アイコン「プロジェクトの設定」から、APIキーをセットします。

Google Apps Script(GAS)のスクリプトプロパティにOpenAIのAPIキーをセットし、APIキーをコードに直書きしない

DALL-Eの画像生成AIをAPIリクエストするためのエンドポイントとなるURLを定義し、入力プロンプトを設定します。

APIリクエストで必要となるパラメータとして、①サイズ:1024×1024、②生成画像数:1、③プロンプト:promptをセットして、UrlfetchApp.fetchメソッドでAPIリクエストします。

APIから応答結果として画像データが得られるので、getAs('image/png’)で画像ファイルのblobオブジェクトに変換します。

最後にDriveApp.createFileメソッドで生成画像をGoogleドライブに保存して完了です。

画像生成AI「DALL-E」への指示としては、「窓際で日向ぼっこして眠るネコ」というプロンプトを入力しています。

DALL-EにAPIリクエストするサンプルコードを実行すると、実行ログに画像生成AIが作成した画像のGoogleドライブ格納先が出力されます。

Google Apps Script(GAS)でOpenAIの画像生成AI「DALL-E」にAPIリクエストして生成された画像を取得し、Googleドライブに保存するサンプルコードを実行すると、ログ出力に生成画像のGoogleドライブ保存先URLが表示

また、GASコード実行直後にGoogleドライブのマイドライブにアクセスすると、生成された画像が表示されています。

OpenAIのAPIにリクエストして画像生成AI「DALL-E」がプロンプトに従って作成した画像がGoogleドライブに保存

GAS実行ログのURLまたは、GoogleドライブのマイドライブからAPI経由でDALL-Eが生成した画像を確認可能です。

Google Apps Script(GAS)でOpenAIのAPIをリクエストして、DALL-Eが画像生成した窓際で日向ぼっこするネコの画像

DALL-EへのAPIリクエストに設定したプロンプトの要素がすべて忠実に反映されています。

生成された画像も写真と言われても分からない高精度なレベルです。

なお、同じプロンプトを再度実行すると、また異なる画像が生成されるようになっています。

OpenAIのDALL-EのAPIで同じプロンプトでリクエストしても生成される画像は同じではなく異なる画像が生成

複数の画像を生成して本物のネコ画像か、AIが作ったネコ画像か判定するアプリケーションなども面白いかもしれません。

入力プロンプト通りの画像生成されないことも

OpenAIのAPIをリクエストするGoogle Apps Script(GAS)のサンプルコードを実行すると、画像生成AI「DALL-E」が精度の高い画像を作成してくれました。

しかし、まだまだDALL-Eは完璧ではなく、APIパラメータにセットしたプロンプト通りに画像生成されないこともあります。

例えば、「芝生を飛び跳ねる7羽のウサギの群れ」 というプロンプトでGASサンプルコードを実行した結果が下記の画像です。

OpenAIでAPI経由の画像生成ができるDALL-Eで「芝生を飛び跳ねる7羽のウサギの群れ」のプロンプトで生成された画像は見当違いのものに

どうやら7羽というワードに引きずられてしまい、ウサギではなく鳥が登場しています。

また芝生というワードも荒野と水辺の表現になっており、登場する数も大量です。

このように日本語でDALL-EのAPIにリクエストする際は、プロンプトが重要になってきます。

またネコのようにウェブ上に多く存在する画像は精度が高いですが、画像が少ない場合に精度が下がる傾向にあります。

まとめ・終わりに

今回、OpenAIが提供する画像生成AI・DALL-Eを、Google Apps Script(GAS)のコードからAPIでリクエストする方法を紹介しました。

2022年に大流行した画像生成AIですが、OpenAIはDALL-Eという画像生成AIをAPIで利用できるサービスを公開しています。

DALL-Eを使えば、GASのスクリプトで簡単に画像生成が実現可能です。

好きな画像が生成できれば、サービスに組み込んだり、DALL-Eからあらかじめ用意したプロンプトから大量に画像生成してもらうことができます。

ぜひ、画像生成AIを手軽に利用したい場合は、GASとOpenAIのDALL-EのAPIの組み合わせを試してみてください。