2K Views
September 26, 23
スライド概要
未完Foundationは、北海道を拠点に、地域の若手エンジニアに向けた学びのコミュニティの運営と 社会実装体験の提供により、技術を使い課題を解決する課題志向の技術者である「メイカー」が活躍するエコシステムの形成を目標に、自治体・教育機関・大企業などと連携した新しい活動を創出する非営利組織です。 公式サイト:https://mikan-foundation.org
Replicate APIとLINE Messaging APIで 画像生成Botサービスを作ろう 2023/09/26@未完Study 一般社団法人未完 西村航
Replicate API とは? 生成系AIモデルのOSSプラットフォーム、Replicateが提供するプラットフォーム上の生成系AIを Web API の形でアクセスできるようにしたもの。 色々なモデルが利用可能なためllama2をベースにしたものや、Stable Diffusion といった生成系AI モデルにPythonやNode.js といったプログラミング言語でアクセスでき、推論や画像生成を行うこと ができます。
LINE Messaging API とは? LINEが提供するLINE BotとしてLINEのユーザーとの対話をプログラミング言語によるプログラムで アクセスできるようにしたWeb API。ユーザーとのメッセージ送受信に加え、リッチメニューやカルー セルなどのLINEがAPIとして提供している機能を利用可能です。 SDKとしてPythonやJava、Node.jsなどのライブラリが公開されており(公式・非公式が混在していま すプロジェクト)、ある程度好きな言語で開発が可能になっています。
前提環境 ● ● ● Pythonのランタイム(Python 3.9~)がインストール済 Visual Studio Codeがインストール済 ファイアウォールなどの設定で外部と通信が可能
Replicate API を触ってみよう! Pythonで動かすReplicate APII
Replicate API を触ってみよう! Replicateアカウント登録とReplicate API のトークン取得 1. 2. 3. https://replicate.com/signin にアクセス GitHubアカウントでログイン(ない場合は作成してください) https://replicate.com/account/api-tokens ページのDefaultと書いてあるトークンを取得してく ださい
Replicate API を触ってみよう! Pythonプロジェクトの作成 1. 2. 3. 4. 5. 6. 7. 新しくプロジェクトフォルダを作成し、そのフォルダをVisual Studio Codeで開きます。 フォルダ直下に「.env」というファイルを作成し、その1行目に REPLICATE_API_TOKEN=`**********`と記述し、*(アスタリスク)部分を先程のAPI TOKEN に置き換えてください。 Visual Studio Code の Terminal を立ちあげてください(Ctrl+J / Cmd + J) python -m venv .venv を実行してください source .venv/bin/activate を実行してください pip install replicate / pip install python-dotenv と記述します 以上でプロジェクトの準備は終了です
Replicate API を触ってみよう! Replicate API の実行準備 1. 2. 3. 4. main.py をプロジェクト上に作成します import文と呼ばれる、外部のパッケージを読み込むための記述をします 1行目に「import replicate」、2行目に「from dotenv import load_dotenv」と記述してくださ い。 3行目には「load_dotenv()」のみ記載してください。 これでReplicate API の利用と、APIトークンをReplicateに読み込ませることができるようにな りました。
Replicate API を触ってみよう!
Replicate API の実行
1.
5行目以降に以下のコードを記述してください
images = replicate.run(
"stability-ai/stable-diffusion:27b93a2413e7f36cd83da926f3656280b2931564ff050bf9575f1fdf9bcd7478",
input={"prompt": "a cat eating a hamburger"}
)
for image in images:
print(image)
2. Terminalから、python main.py でPythonプログラムを走らせてください
3. 出力されたURLを開くと、画像が表示されるはずです
解説
Replicate API の使い方について
Replicate API を走らせる方法は基本的にかなりシンプルです。 replicate.run関数の第一引数に利用したいモ
デルを指定、第二引数には連想配列の形で画像生成のプロンプトを入力します。
モデルごとに第二引数の値は代わりますが、 https://replicate.com/explore に並んでいるモデルを開き、「 API」
の項目を開くと、最低限の使い方が載っています
images = replicate.run(
"stability-ai/stable-diffusion:27b93a2413e7f36cd83da926f3656280b2931564ff050bf9575f1fdf9bcd7478",
input={"prompt": "a cat eating a hamburger"}
)
解説 Replicate API の返し値について replicate.run()が返す値はモデルによって異なりますが、 stable diffusionや一部のモデルでは Itreator(イテレー ター)の形式で複数の画像やデータを返す場合があります。 そのためfor in 文などで配列の中身を取得し、コンソール画面などに出力する必要があります。 for image in images: #取得したimagesのiteratorから画像を取り出して出力する print(image)
Replicate API と対話できるWeb API を作ろう Pythonで動かすReplicate API
Replicate API と対話できるWeb API を作ろう Flaskを利用したAPIモックの開発準備 1. 2. 3. flaskをインストールします。Terminalで pip install flask を実行してください main.pyをコピーしてapp.pyを作成します 3行目以降に追加のimport文を記述します。APIでデータをやり取りするためのパッケージを読 み込みます from flask import Flask, request, send_file import requests import io
Replicate API と対話できるWeb API を作ろう Flaskを利用したAPIモックの開発① 1. flask初期化を行います。 load_dotenvの次の行から以下のように記述してください app = Flask(__name__) @app.route("/") def index(): return "Hello, World!" if __name__ == "__main__": app.run(debug=True) 2. python app.py を実行するとローカルでWebサーバーが立ち上がります。 http://127.0.0.1:5000/ にアクセスしてみてください
Replicate API と対話できるWeb API を作ろう Flaskを利用したAPIモックの開発② 1. 2. 3. 4. 5. 6. クエリパラメーター を使い、promptを入力し、画像をウェブ上で表示します。 index関数の中身を変えていきます。 requestからクエリを取得します(今回は promptというクエリ) promptで渡されたクエリを replicate api に渡します。 取得した画像 URLの配列から1つ取り出します URLから画像を取得 flaskのsend_file関数でウェブ上に表示します。
Replicate API と対話できるWeb API を作ろう
Flaskを利用したAPIモックの開発②
@app.route("/")
def index():
prompt = request.args.get("prompt") #promptクエリを取得
if prompt is None:
return "Please set prompt parameter." #promptが空の場合エラーを表示
images = replicate.run(
"stability-ai/stable-diffusion:27b93a2413e7f36cd83da926f3656280b2931564ff050bf9575f1fdf9bcd7478",
input={"prompt": prompt}
)
#promptから生成された画像URLの配列を取得
r = requests.get(images[0],allow_redirects=True) #URLから画像そのものを取得
return send_file(
io.BytesIO(r.content),
mimetype='image/png'
) #send_file関数で画像を表示
Replicate API と対話できるWeb API を作ろう こんな感じ http://127.0.0.1:5000/?prompt=%22a%20dog%20eating%20food%22
次回:LINE Bot 連携を行います