【Streamlit】DALL-E2で画像を生成する

Streamlit
この記事は約5分で読めます。

こんにちは、JS2IIUです。
Streamlitをベースに、OpenAIのDALL-E2で画像生成して表示させるプログラムについて解説していきます。今回もよろしくお願いします。

DALL-Eとは?

DALL-E2は、OpenAIが開発したAI画像生成モデルです。テキストで指示を出すと、その内容に沿った画像を自動的に生成します。DALL-Eは、現実的な画像だけでなく、架空のキャラクターやアートスタイルを再現することも可能です。

DALL·E 2 | OpenAI
https://openai.com/ja-JP/index/dall-e-2/

Just a moment...

StreamlitでDALL-E画像生成アプリを作成

以下のPythonコードを実装することで、ユーザーが入力したキーワードからDALL-Eを利用して画像を生成し、表示するアプリを作成できます。

コード

Python
import openai
import streamlit as st

# OpenAI APIキーを直接指定
OPENAI_API_KEY = "your-api-key-here"
openai.api_key = OPENAI_API_KEY

def generate_image(prompt):
    """DALL-Eで画像を生成する関数"""
    try:
        response = openai.Image.create(
            prompt=prompt,
            model="dall-e-2",
            n=1,  # 生成する画像の数
            size="1024x1024"  # 画像サイズ
        )
        return response["data"][0]["url"]
    except Exception as e:
        st.error(f"エラーが発生しました: {e}")
        return None

# Streamlitアプリのレイアウト
st.title("DALL-E 画像生成アプリ")

# ユーザーの入力
prompt = st.text_input("画像の説明を入力してください:")

if st.button("画像を生成"):
    if prompt:
        with st.spinner("画像を生成中..."):
            image_url = generate_image(prompt)
            if image_url:
                st.image(image_url, caption="生成された画像", use_column_width=True)
    else:
        st.warning("画像の説明を入力してください。")

プログラムの詳細解説

1. openaiとstreamlitのインポート

まず、openai モジュールを使用してDALL-E APIを呼び出し、streamlit を利用してWebアプリのUIを構築します。

2. APIキーの設定

APIキーを直接プログラム内に指定することで、環境変数を設定せずに利用できます。ただし、セキュリティ上の理由から、環境変数に保存する方法が推奨されます。

3. generate_image関数

この関数では、DALL-E APIを呼び出し、ユーザーが入力した説明文 (prompt) に基づいて画像を生成します。

4. StreamlitのUI構築

  • st.text_input() を使用して、ユーザーからキーワードを入力してもらいます。
  • st.button("画像を生成") がクリックされると、DALL-E APIを呼び出して画像を生成します。
  • st.spinner() を使って画像生成中のステータスを表示します。
  • 生成された画像は st.image() を使って表示します。

参考サイト

DALL-EとStreamlitを組み合わせることで、簡単にAI画像生成アプリを作成できます。ぜひ活用してみてください!

最後に、書籍のPRです。

最新のOpenAIのチャットAPIの使い方もしっかりと解説されている良書です。2024年11月初版発行、「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」西見、吉田、大嶋著。

最後まで読んでいただきありがとうございます。73

コメント

タイトルとURLをコピーしました