LangChain、OpenAIのDALL・E APIを使用して、DALL・Eが生成したStreamlitアプリケーションを作成してみました。
以下、Pythonのコードです。
OpenAIのAPIキーは環境変数に登録してあります。
Python 3.9、LangChain 0.0.315で動作確認しました。
import streamlit as st
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.utilities.dalle_image_generator import DallEAPIWrapper
st.title('DALL·E Image Generator')
# Temperatureのスライダー
temperature = st.slider('Select Temperature', 0.0, 1.0, 0.5)
# テキスト入力ボックス
image_desc = st.text_input('Enter image description')
# 画像生成ボタン
generate_button = st.button('Generate Image')
if generate_button:
# LLMとプロンプトテンプレートの設定
llm = OpenAI(temperature=temperature)
prompt = PromptTemplate(
input_variables=["image_desc"],
template="Generate a detailed prompt to generate an image based on the following description: {image_desc}",
)
chain = LLMChain(llm=llm, prompt=prompt)
# 画像のURLを取得
image_url = DallEAPIWrapper().run(chain.run(image_desc))
# 画像を表示
st.image(image_url)
# ダウンロードリンクを提供
st.markdown(f'[Download Image]({image_url})', unsafe_allow_html=True)
Streamlitのアプリケーションを実行し、ブラウザから接続します。
初期表示画面は以下のとおりです。
「Enter image description」のテキストボックスに任意の画像の説明を入力できます。また、スライダーで「Temperature」を設定できます。
条件設定後、「Generate Image」ボタンをクリックすると、入力された説明に基づいてDALL·Eが画像を生成し、画面に表示されます。
画像生成の際に使用される「Temperature」というパラメータは、生成される画像の創造性やランダム性の度合いを制御するために用いられます。このパラメータは通常、0から1の範囲で設定されます。
低いTemperature(例:0.2): こうした設定では、生成される画像はより予測可能で、しばしば訓練データに近い結果になります。これは、より現実的で、詳細度の高い、安定した画像を生成する傾向があります。
高いTemperature(例:0.8): 一方、Temperatureを高く設定すると、生成される画像はよりユニークで創造的になりますが、その結果、非現実的または抽象的な要素が含まれることがあります。この設定は、予測不可能で、意外な結果を生む傾向があります。
Temperatureパラメータを調整することで、ユーザーは生成される画像の創造性と現実感の間のバランスを微調整することができます。低いTemperature設定は、より伝統的または現実的な画像を求める場合に適している一方で、高いTemperature設定は、よりアーティスティックで実験的な結果を求める場合に適しています。
Temperatureを0.9に設定し、画像の説明に「Tokyo at night」と入力して、「Generate Image」ボタンをクリックすると以下の画像が表示されました。
スカイツリーが描かれました。リクエストどおりです。
ちなみに「夜の東京」と日本語で入力すると以下の画像が生成されました。どこかの川とビル群が描かれています。
同じ条件でも毎回異なる画像が生成されます。アプリケーションとしては数枚出力するようにしてもよさそうです。