こんにちは、JS2IIUです。
今回は画像生成AIのBlack Forest Labを利用してみます。OpenAIのAPIと使い勝手が若干異なるので、画像取得までの手順を丁寧にみていきたいと思います。今回もよろしくお願いします。

Black Forest Labとは?
Black Forest Lab(BFL)は、機械学習を活用した高度な画像生成APIを提供するプラットフォームです。特に、flux-devモデルを使用することで、ユーザーは簡単に高品質な画像を生成することができます。BFLのAPIは非同期処理を採用しており、リクエストを送信後に定期的に結果を取得することで画像を生成・取得する仕組みとなっています。
BFLのAPIを利用するためには、Black Forest Labs APIに登録し、APIキーを取得する必要があります。Black Forest Labは従量課金制です。最低1000クレジット、$10分の課金が必要になります。

Streamlitを活用した画像生成アプリ
以下に、BFLのflux-devモデルを使用した画像生成アプリのプログラムを示します。flux-devモデルは複数あるモデルの中でも最も単価が安いモデルです。(2025年2月時点)
必要なライブラリのインストール
アプリを実行するために、以下のPythonライブラリが必要です。
pip install streamlit requests pillowプログラムコード
import streamlit as st
import requests
from PIL import Image
from io import BytesIO
import os
import time
# 環境変数からAPIキーを取得
API_KEY = os.getenv('BFL_API_KEY')
# APIエンドポイント
REQUEST_URL = 'https://api.us1.bfl.ai/v1/flux-dev'
RESULT_URL = 'https://api.us1.bfl.ai/v1/get_result'
# Streamlit UI
st.title('Image Generation with FLUX-DEV Model')
prompt = st.text_input('Enter your prompt:')
width = st.number_input('Width of the image:', min_value=64, max_value=2048, value=512, step=64)
height = st.number_input('Height of the image:', min_value=64, max_value=2048, value=512, step=64)
if st.button('Generate Image'):
if prompt:
with st.spinner('Generating image...'):
# リクエストペイロードを作成
payload = {
'prompt': prompt,
'width': width,
'height': height
}
headers = {
'accept': 'application/json',
'x-key': API_KEY,
'Content-Type': 'application/json'
}
# 画像生成リクエストを送信
response = requests.post(REQUEST_URL, json=payload, headers=headers)
if response.status_code == 200:
request_id = response.json().get('id')
if request_id:
# 結果を取得するためのポーリング処理
while True:
time.sleep(0.5)
result_response = requests.get(RESULT_URL, headers=headers, params={'id': request_id})
if result_response.status_code == 200:
result_data = result_response.json()
if result_data.get('status') == 'Ready':
image_url = result_data['result'].get('sample')
if image_url:
# 画像を取得し表示
image_response = requests.get(image_url)
if image_response.status_code == 200:
image = Image.open(BytesIO(image_response.content))
st.image(image, caption='Generated Image', use_column_width=True)
else:
st.error('Failed to retrieve the generated image.')
else:
st.error('Image URL not found in the response.')
break
elif result_data.get('status') == 'Failed':
st.error('Image generation failed.')
break
else:
st.error('Error while fetching the result.')
else:
st.error('Request ID not found in the response.')
else:
st.error('Error while submitting the generation request.')
else:
st.warning('Please enter a prompt.')プログラムの詳細解説
1. APIキーの設定
APIキーは環境変数BFL_API_KEYに設定されていることを前提としています。ターミナルで以下のように設定できます。
export BFL_API_KEY='your_api_key_here'または、スクリプト内で直接設定する場合は以下のように記述します。
API_KEY = 'your_api_key_here'2. Streamlitのインターフェース
st.text_input():ユーザーからプロンプトを入力st.number_input():画像の幅と高さを指定st.button():ボタンをクリックすると画像生成処理を開始
3. 画像生成リクエストの送信
requests.post()を使い、BFL APIのflux-devエンドポイントにリクエストを送信します。
response = requests.post(REQUEST_URL, json=payload, headers=headers)成功すれば、リクエストIDが返され、それを使って結果を取得します。
4. 結果の取得(ポーリング処理)
画像生成は非同期で行われるため、定期的にAPIに問い合わせて結果を取得します。
while True:
time.sleep(0.5)
result_response = requests.get(RESULT_URL, headers=headers, params={'id': request_id})statusがReadyになったら画像のURLを取得し、表示します。
5. エラー処理
APIリクエストや画像取得時のエラーに対応するため、st.error()を使って適切なエラーメッセージを表示します。
アプリの実行方法
- 必要なライブラリをインストール
- APIキーを設定
- スクリプトを
app.pyとして保存 - 以下のコマンドでアプリを起動
streamlit run app.py参考リンク
このアプリを活用して、簡単に高品質な画像を生成してみましょう!
最後に、書籍のPRです。
最新のOpenAIのチャットAPIの使い方もしっかりと解説されている良書です。2024年11月初版発行、「LangChainとLangGraphによるRAG・AIエージェント[実践]入門」西見、吉田、大嶋著。
最後まで読んでいただきありがとうございます。73


コメント