NVIDIAがなんぼのもんじゃい!Stable Diffusion Web UIを非CUDAのオンプレミス環境でやってみよう!

話題が出て大分時間が経ちましたが、今回は画像生成AIのお話です。ネタ自体はネットに色々転がってはいますが、実際にやってみると思った以上に簡単に環境が作れることがわかったので、構築までの手順と、自分の経験談も踏まえて、語っていきたいと思います。

成果

最初に、今回作成できた成果を3点掲載します。この手順通り実施することで、自分の環境で好きなように画像を生成することができるようになりました。

こんなの個人でサクサクかけちゃうんだから、絵師さんたちもたまったもんじゃないですよね・・・。

  • Model「Chillout Mix」DPM++ SDE Kerras

  • Model「Anything v5」DPM++ 2M Kerras

  • Model「realizm engine」Euler a

環境構築手順

今回は、以下2種類で実施するための手順をアウトプットしようと思います。

  1. WindowsNVIDIA
  2. MacBook Air 2020(M1)

以前はCUDA搭載のNVIDIAグラボか、Google Colaboratoryの2択だったんですが、Direct Machine Learning (DirectML) という技術によって非CUDAでも、高速環境が作れるとのことで、やってみることにしました。Macはオマケ。

まずはWindowsから。Macはスキップして下に進んでください。

Windows + 非CUDA GPU

Windowsでオンプレミスの自動生成AI環境構築を記載います。

  1. 前提条件

    • 今回、私が実行した環境は以下のとおりです。

    • 以下のソフトウェアはインストールされていることとします。

  2. Stable Diffusion Web UI 環境の取得

    最初に、以下のコマンドを実行してリソース一式をCloneします。

       > git clone https://github.com/lshqqytiger/stable-diffusion-webui-directml
    
  3. バッチを実行

    git実行した環境に、stable-diffusion-webui-directmlディレクトリが出来上がるので、その中にある webui-user.bat ファイルを実行します。

       > cd  stable-diffusion-webui-directml
       > ./webui-user.bat
    

    初回は起動まで少し時間がかかります。私の環境では、約5分程度でした。

    問題なければ、しばらくして、画面に次の行が表示されます。

       :(略)
       Running on local URL:  http://127.0.0.1:7860
       :(略)
    

    ブラウザを起動し、指示されたアドレス http://127.0.0.1:7860 にアクセスしてください。

    以下の画面が表示されれば準備OKです。この画面が「Stable Diffusion Web UI」画面となります。

    なお、実行時にエラー「runtimeerror: could not allocate tensor~」が出る場合は、実行環境でGPUのメモリが不足している可能性があります。

    この場合の対処として、ディレクトリ直下にあるwebui-user.batファイルの内容を編集し、以下の行を追加して保存した後、再実施してみてください。低メモリでも動くようにするおまじないです。

    <webui-user.bat>

     @echo off
    
      set PYTHON=
      set GIT=
      set VENV_DIR=
    
      # ↓ここを追加
      set COMMANDLINE_ARGS=--lowvram --always-batch-cond-uncond --opt-split-attention
    
      call webui.bat
    

Mac Book(M1)

MacBookでオンプレミスの自動生成AI環境構築を記載います。

  1. 前提条件

    • 今回、私が実行した環境は以下のとおりです。

    • 以下のソフトウェアはインストールされていることとします。

  2. 必要なソフトウェアをインストール

    ターミナルで以下を実行して必要なソフトウェアをインストールします。

     $ brew install cmake protobuf rust python@3.10 git wget
    
  3. Stable Diffusion を GitHubから取得する。

    ターミナルを開き、任意のディレクトリに移動してから、Githubからダウンロードします。以下のコマンドを実行してください。

     $ git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
    
  4. 起動Shellを実行

    git実行した環境に、stable-diffusion-webui ディレクトリが出来上がるので、その中にある webui.sh ファイルを実行します。

       $ cd  stable-diffusion-webui
       $ ./webui.sh
    

    初回は起動まで少し時間がかかります。私の環境では、約5分程度でした。

    問題なければ、しばらくして、画面に次の行が表示されます。

       :(略)
       Running on local URL:  http://127.0.0.1:7860
       :(略)
    

    ブラウザを起動し、指示されたアドレス http://127.0.0.1:7860 にアクセスしてください。

    以下の画面が表示されれば準備OKです。この画面が「Stable Diffusion Web UI」画面となります。

Modelデータを入手

環境が無事起動したのであれば、次に画像生成するためのモデルを入手します。

画像自動生成の成否・得意分野は、使用するモデルデータに依存しているため、生成したい画像に合わせてモデルデータを選定して取得する必要があります。

Stable Diffusionが使用できるモデルデータは、次の2つのサイトからダウンロードできます。

  • Hugging face に掲載されているので、こちらから取得します。

  • CIVIT AIという中国のサイトから入手します。

Modelデータはいずれも、一つにつき数G〜十数Gバイトに及びます。色々試したい場合は、30〜50Gバイト程度必要になるので、容量を確保しておいて下さい(NVIDIAのグラボを買うことを思えば、ここでSSDの増設でもした方が、ずっと安上がりですね^^)

①Hugging Face

  1. モデルデータを入手してきます。

    • Hugging face のサイトにアクセスします。
      Modelごとにパネルが表示されていますので、気に入った絵をクリックします。

    • 画面左側の、Multimodel - Text-to-Imageをクリックします。

    • 右に一覧された内容から、任意のモデルを選びます。今回は、主流であるstable-diffusion-v1.5を選びます。

②CIVIT AI

  1. モデルデータを入手してきます。

    • CIVIT AI のサイトにアクセスします。

    • ページ上部にある、Modelsをクリックします。

    • 画面右上の、「↓ Download」ボタンをクリックします。

Modelデータの使用方法

  1. ダウンロードしたファイルを、構築した環境の、/models/Stabel-diffusion ディレクトリに移動します。

  2. Stable diffusionを再起動させます。

    キーボードで Ctrl + C を押してバッチ処理を中止し、再度 webui-user.batMacの場合は、webui.sh) ファイルを実行します。

  3. サービスが開始されたら、ブラウザでWebページにアクセスします。

画像生成を実行する

細かいことはさておき、一旦、さくっと実行してみましょう。

  1. 画面左上にある、「Stable Diffusion checkpoint」のドロップダウンリストを開きます。さきほど格納したモデルが表示されますので、それを選択します。

  2. 画面左上にある2つのテキスト欄が「プロンプト(呪文)」と呼ばれる、画像生成のためのキーワード欄になっています。こちらにテキストを入れて、Generate ボタンをクリックします。

    • 上が「プロンプト」で、生成したい画像の特徴を入れます。
    • 下が「ネガティブ・プロンプト」といい、生成させたくない特徴を入れます。

  3. 今回は、私の方で用意した、以下のプロンプトを設定して、生成してみましょう。

    • プロンプト(下を簡潔に訳すと「日本のアイドル女優を、高精細で書いて」)

      best quality, RAW photo, smiley, realistic, girl, long hair, wavy hair, Cherry blossom, Japanese idle (Japanese actress), cute clothes, looking at viewer, Upper body,

    • ネガティブ・プロンプト(「粗悪で低画質なものはヤメて」)

      EasyNegative, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality

  4. 私の方では次のような結果となりましたが、いかがでしたでしょうか?

実際には、この結果に対して、Web UIのパラメタを細かく調整していくことで、自分の希望する画像を作っていきます。パラメタについては、別途解説されているページがネット上にありますので、そちらを参考にしてください。

プロンプトの分析

上で使用した呪文を翻しました。

  • プロンプト「最高品質、RAW写真、スマイリー、リアル、女の子、長い髪、ウェーブのかかった髪、桜、日本のアイドル(日本の女優)、かわいい服、視聴者を見て、上半身」

  • ネガティブ・プロンプト「単純で粗悪、絵画、スケッチ、(最低品質:2)、(低品質:2)、(標準品質:2)、低解像度、標準品質」

こう見てみると、そんなに難しいことは書いてないようですよね。ネガティブの方も、画質について否定的なイメージを並べているだけで、具体性のあるポイントは特に書いてません。

Modelsによる違い

上記と同じプロンプトを使って、5つのModelsを試してみました。

左から、以下のモデルを使用しています。

Model名 特徴 入手元
stable-diffusion-v1.5 stable-diffusion 標準モデルの最新版。
黒目勝ちでチョイこわ。アジア人向けでない?
Hugging face
dreamlike-photoreal-2.0 Stable Diffusion v1.5のファインチューン。
今回描かれたものの中では一番バランスがいい気がしますね。
Hugging face
ChillOutMIX アジア人美女をリアルに書かせることに定評あり。
キレイに違いないんだけど…なんていうか…〇〇方面に需要がありそう
CIVIT AI
Anything v5 簡単なプロンプトでアニメ絵が描けると評判。
これは確かにキレイ。アニメーターいらずになりそう…。
CIVIT AI
Realizm Engine 風景画や静物画などを書かせると抜群らしい。
人間は苦手なのかな?表情が引きつってて、ちょっと怖い。
CIVIT AI

同じ呪文でも、全然作られ方が違うんですね。。。 「Anything v5」のアニメ調を除くと、2番目の「dreamlike-photoreal-2.0」が一番きれいといえるんじゃないでしょうか。

パフォーマンスについて

私の環境の場合、デフォルトのサイズ(512 x 512)とパラメタを指定した状態で、画像が作成されるまでの時間は、次のようになりました。

データ 環境1.
Windows + Radeon RX570
環境2
.MacBook Air 2020 M1
Data1 52秒 48秒
Data2 62秒 51秒
Data3 58秒 55秒

たまたまかもしれませんが、二つの環境にあまり時間差はなかったですね。Mac Book Airの自力を見た気がします。

Youtube等の記事を見ていると、NIVIDAのグラボ RTX4070 を使用した場合、これが5〜6秒でできるそうです。流石に早いですがやはりグラボは高価ですし、用途によっては、上の応答時間でも十分使えますよね。

プロンプトの調整

ここまでできたら、あとは実際にプロンプトや画面のパラメタを調整していって、AIに作成する画像の変更を指示します。Stable Diffusion Web UIのパラメタの詳細については、他のサイトを参考にしてみて下さい。

参考:Stable Diffusion WebUIの使い方を解説していくよ【超入門編】

感想

いかがでしょうか。思っていた以上に、簡単に動画生成AIの環境ができました。

しかも、Modelデータは日々新しいものが出来上がっていくため、用途によって色々使い分けることで、自環境で自由に画像を作ることができました。

業務アプリの移植先として、ノーコードツール Bubble を検討してみる

昨今、話題に上がっているローコード・ノーコードによるWebページの開発を行うにあたり、この度、世界的にもっとも著名な「Bubble」を使ってみましたので、その感想など、以下に述べていきたいと思います。

業務用アプリケーションとノーコード

今回ノーコードの選定にあたり、いくつかのサービスを探索しました。

まず、一番に候補に挙がったのは「Kintone(サイボウズ株式会社)」です。日本国産のため、使い勝手がよいので間違はないはずですが、使用ユーザ数による課金制であり、月額780円/ユーザーと高価のため棄却しました。

ところがこれを除くと「PCで使用する業務アプリ」という観点でなかなかヒットするものが見つかりません。「STUDIO」や「ペライチ」、「Glide」といったサービスがありましたが、いずれもスマホ専用だったり、広告やランディングページ向けだったりと、目的に合致しないことがわかりました。

運用シーンで考えても、スマホ画面で扱うような情報量ではなく、オペレータも昔ながらの事務方です。移植前の画面を見ても、コテコテの「一覧」画面や、下部のファンクションキー(F9:プリント等)が設置されたデザインであり、極端なUI変更は忌避される可能性がありました。

私自身、あまりUX/UIデザインの知見がないため、リスク回避的に旧来のデザインに近づけたものを探していましたが、なかなか対応できそうなものが見つかりませんでした。

そのような中で、最も汎用的と名高いBubbleに触れることになりました。

Bubbleについて

bubble.io

Bubbleとは

Bubbleは、ドラッグアンドドロップのインターフェースを通じてアプリケーションをビジュアルに構築することができる、SaaSによるノーコードアプリケーションです。

プログラミングの知識がなくても、ユーザーは直感的な操作でアプリケーションを作成できるという謳い文句で、世界で約200万人のユーザがいるといわれています。

<編集画面>

<実行画面>

また、レスポンシブへの対応も容易であり、行列を正しく配置するだけで、以下のとおり簡単にスマホデザインに対応できるようになります。

<実行画面>

Bubbleの特徴

Bubbleが広く使われている特徴としては、その汎用性が挙げられます。使用できる機能は一般的なフロント画面用のテキストやリストに限らず、GoogleMapや、アカウント管理、e決済機能まで、幅広い機能を簡単に取り込むことができます。

また、デベロッパが自由に開発・公開できるPlugin機能によって、機能のさらなる拡張や、独自のマーケットプレイスによる配布が行えます。開発したプラグインは自由に有償化でき、開発者にインセンティブがあるため、随時機能拡張が行われている状態です。

<Plugin追加画面>

使用してみた所感(実際どうなの?)

最初に、実際に使用してみた所感を述べます。

よかったところ

  • 評判通り機能が豊富・汎用的であり、たしかにでなんでも作れそう。
  • バックエンドデータとの連携がPluginとして用意されており(SQL Database Connector)、MySQL等、既存データベースとの連携が容易。
  • デザイン設定と、実際に作られるCSSとのフィット&ギャップが少ない(前回記事にしたFigma→Amplify Studioのような、コード変換が行われないため?)
  • Pluginを開発する場合は、JQueryを使用したコーディングが主体となるため高難度だが、その分自由度が高い。

厳しいところ

  • 操作のインターフェイスがすべて英語であり日本語非対応(データの表示自体は日本語にできる)。開発者フォーラムも英語のため、入門が難しく、とっつきづらい。チュートリアルYoutubeを駆使して、初期の学習コストに最低でも1週間程度はかかる。
  • 画面デザインのUIが使いづらい。複数オブジェクトをまとめて移動しようとしても、ひとつしかドラッグできなかったり。Figma等に慣れていると、イライラするかも。
  • Freeプランの制約がなかなかきつい。有償のStarterプランにアップグレードしないと、Webホスティングもできない。特にデモ用のテーブルデータを、独自の登録画面から1レコードずつ手作業で登録するのには骨が折れた(結局、Seleniumで自動操作させたけど)

一番使い慣れが大変そうなのが「画面デザイン」。普通にWebデザインが必要となります。KintoneやDesknet'sといった、国産の「やさしい」ノーコードソフトは、データの型や桁数に応じてフォントサイズや項目幅を「いいかんじ」に配置してくれるようですが、こちらはひとつひとつ、細かく指定が必要です。

Webデザイナーからすると当然の作業ですが、「ローコード」と聞いて安易に飛びつくと、げんなりします。

結論

まだまだ試行錯誤しているところですが、このサービスであれば、なんとか元の形式に揃えたデザインが作れそうです。操作に慣れてくると、たしかにサクサク画面が作れるし、Pluginなどを使いこなせば、いろいろな機能も簡単にできそうな気がしてきました。

ただ前述のとおり、本来であればUX/UIデザインの側面から、このような画面再現よりもより良いデザインを設計すべきとは思います。自分がやっていることが、時代錯誤な提案をしているという自責の念もあるのですが、新しいデザインを作るにしてもツールの使い方が分かっていた方がよかろう、ということで、まずはやり進んでみたいと思います。

AWS Amplify Studioを使って手軽にWebサイトを構築してみた!

最近、AWS Amplify Studioという便利なツールが注目を集めています。AWS Amplify Studioは、ローコード開発のアプローチを取り入れており、誰でも簡単にWebサイトを作成できるクラウドベースのプラットフォームです。私も最近、AWS Amplify Studioを使って自分のWebサイトを作ってみました。この記事では、その手順と経験を共有したいと思います。

aws.amazon.com

AWS Amplify Studioとは?

AWS Amplify Studioは、AWSが提供するローコード開発環境です。これを使えば、プログラミングの知識がなくても、直感的なインターフェースを通じて簡単にWebサイトを構築できます。バックエンドの処理やインフラストラクチャのセットアップも自動化されており、開発者はビジネスロジックに集中できます。

ウェブサイト構築の手順

以下は、AWS Amplify Studioを使用してWebサイトを構築する基本的な手順です。

  1. プロジェクトの作成: AWS Amplifyコンソールにアクセスし、新しいプロジェクトを作成します。プロジェクトには名前と説明を付けてスタートします。

  2. テーブルデータ定義: アプリが使用するデータモデルを定義します。テーブル名とフィールドの一覧を設定します。これをデプロイすることにより、DynamoDB、AWS AppSyncに対してテーブル定義と、Webサイトからのアクセス用インタフェース(GraphQL)が自動生成されます。

  3. Webページデザインの追加①: Figmaで作成したモックページを取り込んで、Webページとすることができます。この画面の項目とデータベースのフィールドをバインドすることにより、簡単にページが作れます。

    Figmaの画面

    Amplify Studioの画面

  4. Webページデザインの追加②: Figmaのページとは別に、作成したテーブルに対するデータ追加・更新のページが、Amplify Studio内に自動で作成されてきます。入力項目の要素を選択したり、項目位置を変えたりはできますが、ページレイアウトのカスタマイズ性はそれほど高くなく、色などは変更できません。ただ、マスタ業務など、単純に入力するだけなら、都合は良いと思います。

  5. Webサイトをローカルでビルド: ローカル環境にreact.jsやvue.js等の開発環境を用意して、AWSのAmplify CLI機能を使って、デザインしたページとデータモデルを、ソースコードとして取得します。react.jsを指定した場合は、デザインした部品が「コンポーネント」として生成されるため、これをラップ(overrides)して、ビジネスロジックや、細かな定義を加えてページを完成させます。

  6. サイトのデプロイ: ページが完成したら、AWS Amplify Studioのデプロイ機能を使用してWebサイトを公開します。これにより、誰でもアクセス可能なWebサイトが完成します。

実際にやってみると、この5番の開発になかなかクセがあり、ドキュメントも十分にないこともあって苦戦しました。2021年からのGAなので、ネット情報もすくなく。。。

やってみた所感

今回、初めて触るreactの勉強も兼ねていたので、時間がかかりましたが約2週間ほどで、次のような内容を作ってみました。

github.com

実際に触っていた感じ、使いどころが限られる気がしました。

  • × 業務で使用するアプリケーションには不向き。よく見る「表」デザインの画面などは、Figmaからのコンポーネント起こしで作りづらい。

  • 〇 会社のブランディングページのような、シンプルな構成のページか、Todoアプリのように、単純にデータ登録を繰り返すだけなら、PCとスマホの両環境でできるのでよい。

  • 〇 初期の立ち上げは慣れれば非常に簡単。従来、API Gateway、Lambda、DynamoDBのストリームなどで構築していたバックエンドの構成が一発で出来上がる。

具体的な手順の説明は、後述のサイトに丸投げます^^

参考にさせていただいたサイト

LINEで応答するChatGPTを作ってみた

ChatGPTのAPIが公開されたことで、既成のサービスへの組み込みが簡単に行えるようになりました。

今回はこれをLINEからの呼び出しに対応させることで、高性能なLINE Botを作成します。

LINEのMessage APIとChatGPT APIへの連携にはいくつかの方法があります。

  • AWSPythonから、ライブラリopenaiを使用して実行する
  • HTTP連携サービスで、直接HTTPリクエストを実行する
  • ノーコードツールを使用する

今回は、最近話題のノーコードツール「Make(旧Integromat)を使ってみます。

システム構成

Lineからの登録内容を、LineのMessage APIを介してMakeに飛ばし、そこからChatGPTをコールします。ChatGPTからの応答内容を、そのままLineに通知することで、ChatBotを構成します。

出来上がりイメージ

作業の流れ

以下のような流れになります。

  1. ChatGPTのAPIKEYを取得する。
  2. LINE DeveloperでMessage APIを作成する。
  3. Makeで新規シナリオを作成し、Lineからの受信を作成する。
  4. LINE DeveloperのWeb Hookに上記のリンクを設定する。
  5. MakeにHTTPリクエスト処理を追加し、ChatGPTへの問い合わせを設定する
  6. MakeにChatGPTの応答文をLineへ通知する処理を追加する。

作業手順

1. ChatGPTのAPI KEYを取得する。

  • ChatGPTのアカウントを作成後、API KEYを生成して取得します。この流れは、以前公開したこちらをご確認ください。

camelrush.hatenablog.com

2. LINE DeveloperでMessage APIを作成する。

  • 以下のサイトでログインを行います。
    LINE Developers
  • サイドメニューの「プロバイダ」を選択し、新規にプロバイダを作成します(名前は任意)
  • 「新規チャネルを作成」を選び、「Messaging API」をクリックします。

  • チャネルの内容を登録していきます。ここに登録する内容はなんでも良いです。業種なども適当で大丈夫です。チャネル内容の登録ができたら、下部にある「作成」ボタンをクリックします。

  • 画面が切り替わったら、中段のメニューバーにある「Messging API設定」をクリックしてください。内容にQRコードが表示されますので、これをスマートフォンで読み込んで「友達追加」を行います。

  • スマートフォンに友達が追加されます。

  • このLineDevelopersのページは後ほど使いますので、ブラウザを閉じずにそのままにしておいてください。

3. Makeで新規シナリオを作成し、Lineからの受信を作成する。

Make(旧Integromat)について

> ChatGPTさん、「Make(Integromat)を1000文字程度で説明して」

Make (formerly Integromat)は、ノーコードで異なるWebサービスやアプリケーションを連携させ、
タスク自動化を行うツールです。このようなサービスはiPaaS (integration Platform as a Service)と
呼ばれています。Make (formerly Integromat)では、シナリオと呼ばれるフローを作成して、
トリガーとアクションを設定することで、様々なサービス間のデータのやり取りや処理を自動化
できます。例えば、以下のようなことが可能です。

・特定の送信者からのGmailの内容をGoogleスプレッドシートに記録する。
・ZOOMの録画情報をGoogleドライブに保存する。
・Shopifyからキャンセルされた注文をAirtableに記録する。
・TwitterとSlackを連携して、特定の文言のツイートが投稿されたらそのツイートをSlackの特定の
 チャンネルに流す。

Make (formerly Integromat)は、500以上のサービスに対応しており、カスタムAPIやWebhookも
利用できます。また、複雑な条件分岐やループ処理も可能であり、高度な自動化が実現できます。
Make (formerly Integromat)は無料プランから利用できますが、有料プランではより多くの
オペレーション数やデータ量に対応し、優先サポートも受けられます。
Make (formerly Integromat)は業務効率化やコスト削減に貢献するツールです。

さすがですねw

  • 以下が使用時の画面イメージとなります。設定されたノードに沿って、左から右に向けてデータが流れていきます。

設定方法

  • 以下のリンクをクリックし、Makeのサイトにアクセスします。
    https://www.make.com/en

  • 「Get started free」をクリックして、ページにサインアップを行います。
  • サインインが完了したら、左のサイドメニューから「Scenarios」を選択した後、右上にある「Create a New Scenario」をクリックします

  • 画面中央にある大きな「+」をクリックして、トリガーを追加します。最初に作る処理は、Lineからの通知の受付ます。大量に出るサービスから「LINE」を探し出します。

    • LINEの内容のうち「Watch Events」を選択します。
    • WebHook欄で「Add」ボタンをクリックしてください。「Create Web Hook」画面が表示されます。

      • 「WebHook Name」には任意の名前を入れてください。

      • 「Connection」でAddボタンをクリックします。「Create a Connection」画面が表示されます。

        • 「Connection Name」には任意の名前を入れます。

        • 「Channel Access Token」には、アクセス用のTokenを設定します。この内容は、Line Developers画面から取得します。「Line Developers」サイトで、手順1で作成したチャンネル情報を開き、「Messaging API設定」画面の下部にある「チャネルアクセストークン」で「発行」を押してください。表示されたトークンをコピーし、Makeの「Channel Access Token」に設定します。

      • Saveボタンをクリックします。
    • 「Create Web Hook」画面でSaveボタンをクリックします。

    • Makeの「LINE」画面に戻ると、作成したWebhookの下に、青字でURLリンクが表示されていますので、この内容をコピーします。

4. LINE DeveloperのWeb Hookに上記のリンクを設定する。

  • 「Line Developers」サイトで、「Messaging API設定」画面の中段にある「Webhook設定」を編集し、手順3 の最後に青字で表示されたURLを設定します。

  • これにより、LINEがこのチャットに書き込んだメッセージが、Makeに送られるようになります。

5. MakeにHTTPリクエスト処理を追加し、ChatGPTへの問い合わせを設定する

  • Makeのシナリオ画面に戻り、LINEの右にあるコネクタ(耳みたいな部分)をクリックして、HTTPアクションを追加します。

  • アクションの種類は、「Make a request」を選択してください。

  • このHTTPアクションには次の設定を行います。

    • URL:https://api.openai.com/v1/chat/completions
    • Method : POST
    • Headers
      • Item1 :
        • Name : Content-Type
        • Value : application/json
      • Item2 :
        • Name : Authorization
        • Value : Bearer [chatGPT APIKEY]
    • Body type : Raw
    • Content type : JSON (application/json)
    • Request content : { "model": "gpt-3.5-turbo", "messages":[{"role": "user" ,"content": "{{1.events[].message.text}}"}]}
    • Parse response : Yes
  • 下図のような設定内容となります。

  • 「OK」ボタンをクリックします。

  • このアクションによって、手順3のトリガーが受信したLINEのメッセージがをChatGPTに送信して、AIからコメントの回答を得ることができます。

6. MakeにChatGPTの応答文をLineへ通知する処理を追加する。

  • 手順5のHTTPアクションに引き続いて、LINEアクションを追加します。

  • アクションの種類は、「Send a Replay Message」を選択してください。

  • このLINEアクションには次の設定を行います。

    • Connection:(手順3で作成したConnectionを選択)
    • Reply Token : {{3.events.replyToken}}
    • Messages
      • Item1 :
        • Type : Text
        • Text : {{7.data.choices.message.content}}
  • もし、「Text : {{7.data.choices[].message.content}}」が設定できない場合は、一旦仮保存したうえで、後述の確認まで作業を進め、その後でこちらを再設定してください。LINEからのメッセージ受信をテストすることで、7.dataが選択できるようになる場合があります。

  • 下図のような設定内容となります。

  • 「OK」ボタンをクリックします。

  • このアクションによって、手順5でChatGPTから受信した内容をLINEに通知することができます。

設定内容の確認

  • これまでの流れで、Scenario画面は以下のとおりになっています。

  • 左から、以下の順で実行されます。みたまんまですねw
    • 【LINE】LINEメッセージから書き込みを受け取る
    • 【HTTP】ChatGPTと通信して、書き込みへの返答を得る
    • 【LINE】LINEにへ返答を送信する

保存

画面下にあるフロッピーディスクのアイコン(古いな)をクリックして、シナリオを保存します。

動作確認とサービス有効化

  • 画面左下にある、「Run Once」ボタンをクリックしてください。図の一番左にある「LINE」トリガーが待機状態となります。

  • スマートフォンのLINEから、友達登録したチャットボットにメッセージを送信すると、画面のトリガーアクションが実行されます。

  • 動作結果に問題がなければ、サービスを有効化します。シナリオ一覧の画面に戻り、シナリオ右側にあるスイッチをクリックして「ON」に切り替えます。

  • これで、LINE Botの完成です。

まとめ・課題

今回は、ChatGPTを使用したLINE Botを作成しました。Webサービスのノーコードツールは初めて使いましたが、非常に便利に感じました。ただ、Web操作ではJSONやリクエストヘッダ等の最低限の技術知識は必要となるため、「ノーコード」→「エンジニア以外も使える」というわけではないようですね。

また、今回のBotには大きな課題があります。それぞれの問い合わせを単発で処理しており、ChatGPTサイトに見られるような、連続的な質疑応答の形で答えてくれません。この原因ははっきりしています。本来、ChatGPT APIで連続の問答を行うためには、2回目の質問の送信データ(JSON)に、1回目の質問と回答を載せて送信する必要があるのですが、手順5でHTTP送信するリクエストには、LINEのメッセージだけを扱っているため、その質問単独への回答しか戻ってきません。この点は改善点ですね。

なお、最後にMakeの無料利用枠について補足します。MakeはFreeプランとして、月あたり1,000回のOperationが無料となっています(詳細はこちら)。実験的に遊ぶには十分な回数となっていますので、これにとどまらず、他にもノーコード特性を生かしたサービス開発を試していこうと思います。

Creative Reality Studio 使ってみた!

Creative Reality Studioとは

Creative Reality Studioとは、AIを使って静止画から動画を作れるプラットフォームです。

studio.d-id.com

実際に作成してみた動画はこちらです(画像はStable Diffusionで作成)

youtu.be

サービスの概要

Creative Reality Studioでは、以下のようなことができます。

  • 写真やイラストに好きな文章を喋らせて動画化できます。
  • 自分好みのイラストをAIで作ることもできます。
  • 作った動画は保存して共有可能です。
  • 喋らせる文章は日本語にも対応しています。

簡単な使い方

Creative Reality Studioの使い方はとても簡単です。

  1. サイトにアクセスして、写真やイラストをアップロードします。
  2. 喋らせたい文章を入力します。または、音声ファイルをアップロードします。
  3. 動画が生成されるまで待ちます。
  4. 生成された動画を確認して、必要に応じて編集します。
  5. 動画をダウンロードして、SNSやブログなどに共有します。

以上で動画作成は完了です。簡単ですね!

サービスの利用料金

Creative Reality Studioは、無料で利用できる枠があります。

  • 1日に5回まで動画を生成できます。
  • 生成された動画は30秒以内に制限されます。
  • 動画にはD-IDのロゴが入ります。

有料プランにアップグレードすると、以下のようなメリットがあります。

  • 動画の生成回数や時間に制限がありません。
  • 動画にロゴを入れることができます。
  • 高品質な動画を作ることができます。

有料プランの料金は、月額$29.99から始まります。

主な活用事例

Creative Reality Studioは、様々なシーンで活用できるサービスです。以下は、主な活用事例の一部です。

  • SNSやブログで自分の写真やイラストを使ってオリジナルの動画コンテンツを作る
  • プレゼンテーションや教育資料に動くキャラクターを入れて視覚的に伝える
  • 歴史上の人物や有名人の写真に声を当ててインタビュー形式の動画を作る
  • アニメーションやゲームのキャラクターに自分の声を当てて遊ぶ

類似のサービス

Creative Reality Studioと類似したサービスもいくつかあります。以下は、その中でも代表的なものです。

  • MyHeritage: 歴史的な写真や家族写真に命を吹き込んで動かすことができるサービス
  • Wombo: 自分や他人の顔写真に音楽と口パクを合わせて面白い動画を作ることができるサービス
  • Deep Nostalgia: AI技術で昔撮った写真や絵画に表情や目線を付け加えてリアルさを増すことができるサービス

まとめ

Creative Reality Studioは、AI技術を使って静止画から動画を作れるプラットフォームです。

写真やイラストに好きな文章を喋らせて動画化したり、自分好みのイラストをAIで作ったりすることができます。

無料でも利用可能ですが、有料プランではより高品質な動画作成が可能です。

様々なシーンで活用できるサービスですし、類似したサービスもありますが、Creative Reality Studioはその中でも最先端かつユニークなサービスだと言えるでしょう。

ぜひ一度試してみてください!

chatGPT 3.5 turbo公開。chatGPTとwhisperのAPIを使ってみた

最近は、猫も杓子もChatGPTの話題で持ちきりですね

私も前回の記事以降使い続けていますが、非常に便利で困ってます^^
今後は、スクラッチシステム開発を覚えるより、これらのサービスを以下に早く活用できるかが重要になっていきますね。
とはいえ、スキルの転換先がシステム開発者からプロンプト(呪文)職人というのは、まだ流石に抵抗があります。

今回は、3月1日に、ChatGPTの新エンジンであるchatGPT3.5-turboの公開と、whisperAPIの無料公開の発表があったので早速使ってみることにしました。

codezine.jp

注意点

このAPIを使用した問いかけは、新Bingに搭載されているものとは異なります。あくまで従来のChatGPTと同じ2021年のデータモデルをベースにしているようです。例えば、次のような問いかけの答えは、それぞれ異なります。

Q. 日本の現在の首相を教えてください。
A.(ChatGPT)菅 義偉さんです。
A.(新Bing)岸田 文雄さんです

使い方

はじめに、chatGPTのサイトにアクセスし、Sign upしてください。

openai.com

chatGPTサイトからAPI KEYを取得

OpenAI APIのサイトにアクセスし、メニューのAPI Keysを選択します。 画面で「Create new secret Key」をクリックします(新規でKeyを作る場合、ボタンが少し違うかも)

API Keyが表示されますので、内容をコピーし、メモ帳等に控えておきます。

実行

chatGPTでチャットする

  • ターミナルを開いて、以下のコマンドを実行します。
  • [chatGPTのAPI Key]には、上記で取得したAPI Keyを設定してください。
  • Qには、chatGPTに問い合わせる内容を設定してください。
# API KEYを設定する
API_KEY=[chatGPTのAPI Key]

# 問い合わせる文字列を設定する
Q="とても楽しそうな歌を作成してもらえますか?"

# WebAPIを実行する
QUERY_JSON='{"model":"gpt-3.5-turbo","messages":[{"role":"user","content":"'${Q}'"}]}'
curl https://api.openai.com/v1/chat/completions \
  -X POST \
  -H 'Authorization: Bearer '${API_KEY} \
  -H 'Content-Type: application/json' \
  -d ${QUERY_JSON}

次のような結果が返ってきました。
jsonのうち、choices.message.contentに回答が表示されます。実際にはJSONに埋め込まれてくるのですが、読みづらいので、後半で折り返して表示しています。

{
    "id": "chatcmpl-6qGnz2S76gswCK0FPYwrLJvN0FKkP",
    "object": "chat.completion",
    "created": 1677915675,
    "model": "gpt-3.5-turbo-0301",
    "usage": {
        "prompt_tokens": 28,
        "completion_tokens": 467,
        "total_tokens": 495
    },
    "choices": [
        {
            "message": {
                "role": "assistant",
                "content": "(回答※)"
            },
            "finish_reason": "stop",
            "index": 0
        }
    ]
}

---
※回答
もちろんです!以下は、とても楽しそうな歌の歌詞です。

(イントロ)
ラララ ラララ ラララ ラララ

(ヴァース1)
今日も眠りから覚めて
太陽が見えると世界が動き始める
街には人の笑い声が響き渡る
ああ、何とも楽しそうな朝だ

(コーラス)
ラララ ラララ ラララ ラララ
楽しい気分になって
ラララ ラララ ラララ ラララ
誰もが幸せになる

(ヴァース2)
今日は友達とお出かけ
楽しい思い出を作ろうと計画して
どこへ行こうか迷うけれど
ああ、何とも楽しそうな時間だ

(コーラス)
ラララ ラララ ラララ ラララ
楽しい気分になって
ラララ ラララ ラララ ラララ
誰もが幸せになる

(ブリッジ)
時には雨が降る日もあるけど
それでも楽しい時間は止まらない
なんでもOK!そんな心で
ああ、楽しい時間を過ごしましょう

(コーラス)
ラララ ラララ ラララ ラララ
楽しい気分になって
ラララ ラララ ラララ ラララ
誰もが幸せになる

(アウトロ)
ラララ ラララ ラララ ラララ
何とも楽しそうな歌だ!

whisper APIで文字起こしする

  • ターミナルを開いて、以下のコマンドを実行します。
  • [chatGPTのAPI Key]には、上記で取得したAPI Keyを設定してください。
  • SOUNDFILEには、文字起こしするための音声ファイルを設定してください。
# API KEYを設定する
API_KEY=[chatGPTのAPI Key]

# 問い合わせる文字列を設定する
SOUNDFILE=./assets/sound/narita.mp3

# WebAPIを実行する
curl https://api.openai.com/v1/audio/transcriptions \
  -X POST \
  -H 'Authorization: Bearer '${API_KEY} \
  -H 'Content-Type: multipart/form-data' \
  -F file=@${SOUNDFILE} \
  -F model=whisper-1

今回は、次の動画を音声としてWAVに保存したものを読み込ませています。

youtube.com

Youtube動画から音声を取り出すには、Webサービスの「dirpy」を使用しました。

dirpy.com

次のような結果が返ってきました。

{"text":"世界中どこに行っても働けたり稼げたり戦えたりする人材になろうとするか 別にそれはどうでもいいって考えるか 前者だったら当然できるだけ早く外に投げ出した方がいいと思うんですけど それはどうでもいいって考え方もあるにはあるんじゃないかなと思うんですよ 日本を衰えてるって言われていて それでも世界で3番目に大きい経済保っていて こんなに大きな経済を日本人で日本語が喋れる人だけで牛耳っているわけじゃないですか たまたま日本に生まれ育ったというだけで ある意味の既得権益を世界全体から見ると思ってると思うんですよね それを普通に活かしていくっていう生き方もありなのかなという気はしますよね"}%

話し方によって聞き取りの精度は異なると思いますが、今回はほぼ完璧に文字変換がされました。

利用状況と利用料

利用状況は、前述のAPIKEY画面のサイドバーから、「Usage」を選択することで確認できます。

<上部:日あたりの使用量>

<下部:日毎の内訳(Token数)>

利用料はToken数を元に算出されます。Tokenは「Prompt(問い合わせの単語数)」+「completion(回答の単語数)」から算出されます。あくまで単語数なので文字数とは異なります。この辺りの数え方は公式マニュアルを参照してください。

platform.openai.com

このTokenを下に、提示された料金は次のとおりです。

おおよそ、4,000Token≒1円(1$=130円計算)となります。

無料利用枠

前述の、上部の写真にあるとおり、無料利用枠として$18.00が付与されているため、9,000,000Tokenまではタダで使える計算になりますね。

まとめ

今回は、3月1日に公開されたChatGPTとWhisperのAPIを実行する方法をまとめてみました。このほかにも、Python言語でopenaiライブラリを使って呼びかけることなど、活用方法はいろいろあります。

次回は、このAPIインターフェイスをLINEから呼び出すことで、LINEとの連携を進めてみたいと思います。

なんでも答えてくれる、高度AI「ChatGPT」を試してみた

ChatGPTについて

皆さんは「ChatGPT」をご存知でしょうか。

「ChatGPT」は、イーロンマスクが設立した非営利団体のOpenAIが、アメリカ現地時間12月1日に発表した自然言語生成モデルのWebサービスです。

ChatGPT https://chat.openai.com/chat

簡単に言うと、超高度なチャットボット、というイメージで良いと思いますが、こちらで問いかけすることに対して本当に柔軟に、なんでも答えてくれるサービスです。

従来のスマートスピーカー(Alexa、Google Home)とは、次のような点が異なっています。

  1. 問いかけに対し、データモデルを元にした的確な回答事例をあげられること
  2. 複数回答の対話に対して前段の内容から、質問の趣旨を理解できること
  3. こちらの問いかけが口語的(しかも日本語で)であっても、文章として理解できること
  4. 回答文脈の構成が、非常にわかりやすいこと
  5. オリジナルな情報の創作(歌詞、小説など)も行えること

今回は、このChatGPTの使用感をサンプルに合わせて解説し、実際に使用してみた結果をいくつか上げていこうと思います。

1. 問いかけに対し、データモデルを元にした的確な回答事例をあげられること

最初に次のような問いかけをしてみました。

上記のように、いくつかの事例をあげてくれます。

なお、質問の回答は最新のものではなく、2021年時点でFIXしたものだそうです。 彼自身が答えてくれました。

2. 複数回答の対話に対して前段の内容から、質問の趣旨を理解できること

上の質問に対し、続けて次の質問を挙げてみました。

2回目の質問では、「顔画像認識」の議題には触れていませんが、前段の話から話題の趣旨を汲み取って回答していることがわかります。また、それぞれの列挙内容も、性能面を意識した回答になっていることがわかります。

回答が少し機械的なので、次に、少し苛めてみることにしました。

こちらの不満に対して、ただ謝罪、ゼロ回答を述べるだけではなく、モジュール組み合わせを使用した打開策も出してくれました。回答内容も、適当であることがわかります。

3. こちらの問いかけが口語的(しかも日本語で)であっても、文章として理解できること

驚くべきことに、北海道の地方方言もわかっていそうな気配があります。まぁ、「なまら」(とても)は形容詞なので、無視されている可能性もありますが・・・。

4. 回答文脈の構成が、非常にわかりやすいこと

これまでの回答でも分かる通り、読み手にわかりやすい文章が返されてきます。

上記のようにプログラムのサンプルを提示することに対しても、ただ回答を述べるだけではなく、内容の解説もつけてくれます。

5. オリジナルな情報の創作(歌詞、小説など)も行えること

その他

他に、次のページで使い方の事例を書いている方がいらっしゃったので、紹介します。

qiita.com

苦手なこと

1でも触れましたが、データが2021年時点で固着していることもあり、直近の状況に関する話は苦手なようです。

用途

今回のChatGPTの発表に対し、世界中で話題が広がっていますが、データサイエンティストからは懐疑的な見方もあるようです。曰く「それっぽい」回答を返すだけで正確な解答ではない、答えを信じすぎる人増えると困る、とか。

www.businessinsider.jp

個人的には、何の気なしの相談とか、技術の手慣れの段階でサンプルコードを引き出すために「ググって」Qiita記事を探すより、こちらの方が楽なので、そういった用途で使えそうと感じています。

一方で、今回のChatGPTの発表を受け、海外では、早くも次のような動きも出始めているそうです。

  • 学校の宿題でChatGPTの利用を禁止
  • 明示された以外で論文への仕様を禁止

こういった動きが出るのは、AI時事ネタの個性かもしれませんね。