【Streamlit】DALL-E3で好みのスタイルの画像を生成する

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

こんにちは、JS2IIUです。
DALL-Eは、OpenAIが開発した画像生成AIで、テキストの説明を基に高品質な画像を生成することができます。特にDALL-E 3は、より詳細でリアルな画像生成が可能であり、クリエイターやデザイナーにとって非常に強力なツールとなっています。今回もよろしくお願いします。

DALL-E APIの特徴

DALL-EのAPIを利用することで、プログラムから簡単に画像を生成し、アプリケーションやWebサービスに組み込むことができます。主な特徴として以下の点が挙げられます。

  • 自然な画像生成: テキスト入力に応じて、リアルな写真風の画像や絵画風のイラストを作成できます。
  • さまざまなスタイルの対応: アニメ風、スケッチ風など、プロンプト(テキスト入力)を工夫することで多様なスタイルの画像が作成可能です。
  • API経由でのアクセス: OpenAIのAPIを使用することで、Pythonなどのプログラミング言語から画像生成を自動化できます。
  • 簡単なインターフェース: APIはシンプルなリクエストで利用でき、初心者でも扱いやすい設計になっています。

DALL-Eを活用したStreamlitアプリ

以下のコードでは、Streamlitを使ってDALL-E 3による画像生成アプリを作成します。

Python
import openai
import streamlit as st

# OpenAI APIキーを直接指定
OPENAI_API_KEY = "YOUR_API_KEY"
openai.api_key = OPENAI_API_KEY

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

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

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

# 画像のテイスト選択
taste = st.selectbox(
    "画像のテイストを選択してください:",
    ["絵画風", "写真風", "アニメ風", "手書きスケッチ風"]
)

# テイストごとのプロンプト修正
def modify_prompt(base_prompt, taste):
    styles = {
        "絵画風": "A beautiful oil painting of",
        "写真風": "A realistic photo of",
        "アニメ風": "An anime-style illustration of",
        "手書きスケッチ風": "A detailed pencil sketch of"
    }
    return f"{styles[taste]} {base_prompt}"

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

コードの詳しい解説

1. OpenAI APIの設定

Python
import openai
import streamlit as st

OPENAI_API_KEY = "YOUR_API_KEY"
openai.api_key = OPENAI_API_KEY

この部分では、OpenAIのAPIキーを設定し、openai.api_key に割り当てています。このAPIキーを環境変数などで管理すると、より安全に運用できます。

2. 画像生成関数 generate_image()

Python
def generate_image(prompt):
    try:
        response = openai.Image.create(
            prompt=prompt,
            model="dall-e-3",
            n=1,
            size="1024x1024"
        )
        return response["data"][0]["url"]
    except Exception as e:
        st.error(f"エラーが発生しました: {e}")
        return None

この関数では、openai.Image.create() を使ってDALL-E 3のAPIを呼び出し、画像を生成します。エラーが発生した場合は、st.error() を使ってエラーメッセージを表示します。

3. Streamlitアプリのレイアウト

Python
st.title("DALL-E3 画像生成アプリ")

Streamlitのst.title()を使ってアプリのタイトルを設定します。

4. ユーザー入力の取得

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

st.text_input() を使って、ユーザーから画像の説明を受け取ります。

5. 画像のテイスト選択

Python
taste = st.selectbox(
    "画像のテイストを選択してください:",
    ["絵画風", "写真風", "アニメ風", "手書きスケッチ風"]
)

ユーザーが画像のスタイルを選択できるように、st.selectbox() を使用しています。

6. プロンプトの修正

Python
def modify_prompt(base_prompt, taste):
    styles = {
        "絵画風": "A beautiful oil painting of",
        "写真風": "A realistic photo of",
        "アニメ風": "An anime-style illustration of",
        "手書きスケッチ風": "A detailed pencil sketch of"
    }
    return f"{styles[taste]} {base_prompt}"

ここでは、選択されたテイストに応じてプロンプトを修正し、DALL-Eに適した形式に整えています。

7. 画像の生成

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

st.button() をクリックすると、入力されたプロンプトをもとに画像を生成し、表示する処理を行います。

参考になるWEBサイト

最後に、書籍のPRです。

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

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

コメント

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