【生成AIアプリ100チャレンジ】（11）画像生成アプリ Dalle3

# 公開サイト

https://ai.nuevo.jp/generate_image/
※ユーザー限定

# 開発環境

|              |              |
|:------------:|:------------:|
| Server       | lightSail    |
| Language     | Python3.11   |
| Framework    | Django       |
| DB           | sqlite3      |

ローカル環境ではPythonのvenvを使用。エディタはvs codeです。

# 目的
画像生成APIであるDalle3をPYTHONにインストールしたアプリ。作ってみた感想は、画像解析は底なし沼。ドラゴンクエストの呪文「パルプンテ」を唱えて、結果を祈る、みたいな、そんな作業だった。GEN_IDを使えば、うまく編集できるというが、できる可能性は5%ぐらいで、たいていは思惑の外の編集が行われる。つまり、画像解析は「可能性」を提示しているが、まだまだ実用段階には及んでいないのではないかということ。とはいえ、本家ChatGPTのDalle3ではブラシでマスクをかけて、指定箇所のみ編集をさせるという処理を追加している。

![スクリーンショット 2024-04-04 9.08.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398694/5f04944f-2af2-abc3-5797-92bd222192cd.png)

公園を犬と散歩している少女のイラストです。では、少女を正面に向きを変えさせましょう。

![スクリーンショット 2024-04-04 9.09.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398694/43c36e41-57e9-0877-da57-369b2ce4b52a.png)

正面を向いたけど、テイストが変わりすぎでしょう（笑）
こういうふうにテイスト、画風の継承は難しくプロンプトを工夫すればいけるかも、と考え出すと底なし沼に落ちるので諦めが肝心。画像生成はまだまだ可能性の生成APIだと思う。しかし、その技術力は日々、進化しているのは実感。アニメ風や絵画風など制限すれば、テイストが大きく変わることはないでしょうし、アップした画像のキャラクターにさまざまなポーズをさせることも可能でしょう。ただ、うまくいくことよりうまくいかないことが多いです。


# コード
```python:qiita.rb
   OPENAI_API_KEY = os.environ['OPENAI_API_IMAGE_KEY']
    DEEPL_API_KEY = os.environ['DEEPL_API_KEY']
    image_url = ""
    if request.method == "POST":
        form = ChatForm(request.POST)
        if form.is_valid():
            initial_message = 'I NEED to test how the tool works with extremely simple prompts. DO NOT add any detail, just use it AS-IS:'
            sentence = form.cleaned_data['sentence']
            def translate_text_with_deepl(text, auth_key):
                translator = deepl.Translator(auth_key)
                result = translator.translate_text(text, target_lang="EN-US")
                return result.text
            sentence = translate_text_with_deepl(sentence, DEEPL_API_KEY)
            sentence = initial_message + sentence
            print(sentence)
            client = OpenAI(
                api_key = OPENAI_API_KEY,
            )
            response =  client.images.generate(
                model   = "dall-e-3",
                prompt  = sentence,
                n       = 1,
                size="1024x1024",
            )
            image_url = response.data[0].url
            print(response.data)
    else:
        form = ChatForm()
  
```
まず、dalle3は日本語より英語の方が精度が高くなるということなので、DEEPLで日本語を英語に変換します。それとopenaiのマニュアルにあった、```I NEED to test how the tool works with extremely simple prompts. DO NOT add any detail, just use it AS-IS```という原文に忠実に描け、という魔法の言葉を添える形式でプロンプトを作成。
gen_idを取得できれば、生成した画像を元に編集をすることができるらしいのだが、Responseにgen_idがないので、取得方法がわからなかった。base64で画像を取得して、保存し、その画像をアップロードして、生成AIにこの画像を編集して欲しいって依頼するのが、アプリ側としては正しい挙動のような気がする。ただ、これはけっこう工数がかかりそうなので、休みの日などに実装したい。


# アプリ画面
![スクリーンショット 2024-04-04 9.00.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398694/cf07280b-f5d1-1b53-e69b-cf0aa8bf68ee.png)

  
# 感想
画像生成APIはまだまだ可能性の段階。正解までのプロンプト作成に時間をかけたくとも、画像生成はテキストベースのAIと違って、お金がかかる。迂闊にプロンプトを投げ続けると、けっこうな金額になってしまう。画像生成関連のアプリははまってたくさん画像を作ると痛い目にあいそうなので、openaiのDalleがどれだけ成長するのか見守り、新しい機能されたら、試験的な意味でアプリを作るという方向で行こうと思う。じゃないと、プロンプト作成の底なし沼に落ちてしまう。