マジセミドライブ

ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。

AIツール実験室

2023.10.20

【AIツール実験室】アバタートーク動画生成AIツール「 Creative Reality Studio 」②API編🗣

【AIツール実験室】アバタートーク動画生成AIツール「 Creative Reality Studio 」②API編🗣

コンテンツ

はじめに

ごあいさつ

日本全国の「APIでアバタートーク動画を作成したい勢」のみなさま、
おつかれさまです。

「マインクラフト」累計販売本数3億突破!

→「マイクラ」累計販売本数3億突破! 公式ブログで15年を振り返る

・ツルハシ総制作数=1500万個
・ダイヤモンド発見数=670万個

「マインクラフト」は、やったことがなく、
「ドラゴンクエストビルダーズ1」をちょっとだけやったくらいなのですが、
はまるとすごいおもしろそうなゆえに手を出していない、
マジセミ担当者Aでございます。

今回の作戦

今回は、
「API」でアバタートーク動画生成AIツール「Creative Reality Studio」を使ってみる
という企画です。

コードから制御できると、
より活用できる幅が広がりそうですね。

前回までのあらすじ

→【AIツール実験室】アバタートーク動画生成AIツール「Creative Reality Studio」①Web編🗣

ご注意点

※本記事は、担当者Aの主観により作成されていますので、なにとぞ、そういうことでよろしくお願いします。

※使用してみる場合は最新情報をご確認ください。

「Creative Reality Studio」API機能まとめ

「Generative AI API」とは

「Generative AI API」を使用することで、
「Creative Reality Studio」で作成する動画を、
シームレスに「コンテンツ」や「プロダクト」に追加できます。

リアルタイムアニメーション生成

・オーディオファイルからのビデオ同期生成をサポート
・レンダリング時間=100FPS :リアルタイムより4倍高速
・数万のリクエストを並行処理
・これまでに1億5000万以上の動画を生成

ステップ①キャラクター画像をセット

・任意の顔画像を使用して、簡単なAPIリクエストで会話させる
・人間味がある魅力的なプレゼンテーションが可能
・コスト効率が高いビジネスコンテンツに

ステップ②音声を選択

・AIプレゼンターに音声を与える
・数百のテキスト読み上げオプションを選択可能
・独自音声データのアップロードもサポート
・100以上の言語に対応

ユースケース

・AIチャットボットと統合
・対面でのCX会話を作成
・リアルタイムのビデオ通話アバターを作成
・キャラクターベースのオンラインゲームに追加 など

オフィシャルサイト

→d-id.com →api

APIガイド

→docs.d-id.com →reference →get-started

API料金プラン

→d-id.com →pricing →api

アニメ調イラスト風「マジセミちゃん」(仮)を創造します→フォトリアルになりました

作戦

前回の①Web編では、
アニメ調イラスト風マジセミちゃん画像の生成は、
断念という結果でしたが、
再チャレンジです。

DALL·E 3

「ChatGPT4経由」or「Bing経由」で、
「DALL·E 3」で作成してみます。

画像生成プロンプト作成用プロンプト

■指示
「DALL·E 3」で、
以下のイメージ画像を作成するための「英語プロンプト」を作成してください。

■利用用途
作成した画像を、
「Creative Reality Studio」に登録して利用します。
https://www.d-id.com/creative-reality-studio/

■作成オーダー
・アニメイラスト調
・背景は白色無地
・登場人物の数=1名
・画像中央に直立している
・カメラ目線
・手には何も持っていない
・口を閉じている
・口元を隠さない
・画像サイズ=正方形

■作成キャラクターのイメージ
①女子生徒
・日本の学校に通う 女子生徒
・テクノロジーに興味津々
②ベースカラーは青
・「青色の光線エフェクト」や「アクセント」をキャラクターの衣装やアクセサリーに取り入れる
③スマイル
・明るい表情
・笑顔
・目はキラキラしている
・ポジティブなエネルギー

■顔認識
「人間の顔」として認識される画像を作成してください。

画像生成プロンプト

Create an anime-style illustration of a female student who attends a school in Japan and is fascinated by technology. She should be standing upright in the center of a square image with a plain white background. She is looking directly at the camera, not holding anything in her hands, and her mouth is closed but not covered. She has a bright, smiling expression with twinkling eyes and radiates positive energy. Incorporate blue light effects and accents into her clothing and accessories. Make sure the image is recognized as a human face.

新たなフォトリアル「マジセミちゃん」(仮)できました!

今回のマジセミちゃん(仮)は・・・

前回よりも、
「電子の妖精感」があり、
「マジセミちゃん感」が強まっていて、
なかなかよろしいのではないかと思います。

Step①「APIキー」を生成します

GENERATE NEW KEY

「Account settings」ページで、
「GENERATE NEW KEY」ボタンをクリックします。

→studio.d-id.com →account-settings

APIキーが表示されます

コピペして、大事に保管します。

【参考】APIリファレンスページ「Basic Authentication」

→docs.d-id.com →reference →basic-authentication

【詰まり事案】[username]には何を入れればよいのだ?問題

APIでの呼び出しには、
[username]+[password]での認証が必要です。

よくあるパターンで、
[username]=登録されているメールアドレス
[password]=生成されたAPIキー
なのかなと思い、
いろいろやってみても、
認証エラーコード(401)が返ってきてしまうのです😢

いったい、[username]に何を入れればよいのだろうか?と、
しばらく、半泣きになりながら、さまよっていたところ・・・
ついに、
[username]を発見しました!

なんと、
[username]は「APIキー」に含まれていたのです!!

「APIキー」は、
xxxxxxxxxxxxxxxxxxxxxxxxx:yyyyyyyyyyyyyyyyyyyyy
という構造で、
真ん中に「:」があります。
つまり、
[username]=xxxxxxxxxxxxxxxxxxxxxxxxx
[password]=yyyyyyyyyyyyyyyyyyyyy
だったのです!
なんたる巧妙なトラップ!!
なんということでしょう。

『[username]には何を入れればよいのだ?』と、
さまようAPI使い同志に、
次の言葉を伝えます。
『よくよく見たら、リファレンスページに書いてありましたよ。』と👍

Step②API実行環境「Google Colab」を準備します

「Google Colab」ノートブック

ノートブックを新規作成

「Google Colab」ページを開きます。
「ファイル」→「ノートブックを新規作成」をクリックします。

ノートブックタイトルを設定しておきます。
例:「Creative Reality Studio」API機能テスト

→colab.research.google.com/?hl=ja

Step③API呼び出しPythonコード作成

困難なるコード作成

参考にできる資料ページが少ないという厳しい状況下において、
ChatGPT4と熟議熟考を重ね、
いろいろな事件が発生した結果、
とりあえず出来たPythonコードがこちらとなります。

※APIキーは伏せ字にしてあります。

Pythonコード(Ver1)日本語会話版

# requestsライブラリをインポート
import requests

# D-ID APIのエンドポイントURLを設定
url = "https://api.d-id.com/talks"

# リクエストのペイロード(送信データ)を設定
payload = {
    "script": {
        # スクリプトのタイプをテキストとして設定
        "type": "text",
        # 字幕を無効に設定
        "subtitles": False,
        "provider": {
            # 音声合成プロバイダーをMicrosoftとして設定
            "type": "microsoft",
            # 音声を日本語(NanamiNeural)に設定
            "voice_id": "ja-JP-NanamiNeural"
        },
        # SSML(音声合成マークアップ)を有効に設定
        "ssml": True,
        # 読み上げるテキストを日本語に設定
        "input": "これは、Pythonコード(Ver1)日本語会話版です。"
    },
    "config": {
        # 出力フォーマットをMP4として設定
        "result_format": "mp4",
        # 全身が表示されるように設定
        "stitch": True
    },
    # アニメーションする画像のURL
    "source_url": "https://majisemi.com/topics/______import/2023/10/majisemiChan2.jpeg",
    # 動画のタイトルを設定
    "name": "Pythonコード(Ver1)日本語会話版",
    # 動画を永続的に保存するかどうかを設定(Trueで保存)
    "persist": True
}

# リクエストヘッダーを設定
headers = {
    # JSON形式でのレスポンスを要求
    "accept": "application/json",
    # 送信するコンテンツのタイプをJSONとして設定
    "content-type": "application/json",
    # 認証情報
    "authorization": "Basic ●●●●●:▲▲▲▲▲"
}

# POSTリクエストを送信してレスポンスを受け取る
response = requests.post(url, json=payload, headers=headers)

# レスポンスからJSONデータを取得
response_data = response.json()

# JSONデータから作成された動画のIDを取得
talk_id = response_data.get('id', '')

# 作成された動画のIDを出力
print(f"Created Talk ID: {talk_id}")

Step④APIから動画を生成します

①「Google Colab」でコードを実行します

(1)「Google Colab」ノートブックに、Pythonコードを貼り付けます。

(2)三角の実行ボタンをクリックして、実行します。

②戻り値を確認します

5秒もあれば、完了します。

>Created Talk ID: tlk_C3fhxw29ZmvrehKKptwh8
「作成された動画のID」が出力されたら、成功です。

このようなタイプではない戻り値の場合は、
おそらく失敗しています。
※「日本語で表現できないテキスト」があったりするかもしれません。

Step⑤生成された動画を確認します

生成されました

動画タイトルを付けておかないと、
わけがわからなくなります。

→studio.d-id.com

それでは「APIで生成された動画」をご覧ください

→Pythonコード(Ver1)日本語会話版

とうとうできました

コードから実行できるので、
動画自動生成工場になれてしまうわけですね。
※有り余るクレジットがありさえすればですが・・・。

【改善版】Happyバージョン

作戦

Happyにしてみます。

【ご参考】「expressions」パラメータ

このパラメータは、顔の表情を制御するために使用されます。
・expressions: 表情の配列を指定します。
・start_frame: 表情が開始するフレームを指定します。
・expression: 使用する表情の種類を指定します(例:happy, surprise)。
・intensity: 表情の強度を0から1.0の範囲で指定します。

Pythonコード(Ver2)Happyバージョン

# requestsライブラリをインポート
import requests

# D-ID APIのエンドポイントURLを設定
url = "https://api.d-id.com/talks"

# リクエストのペイロード(送信データ)を設定
payload = {
    "script": {
        # スクリプトのタイプをテキストとして設定
        "type": "text",
        # 字幕を無効に設定
        "subtitles": False,
        "provider": {
            # 音声合成プロバイダーをMicrosoftとして設定
            "type": "microsoft",
            # 音声を日本語(NanamiNeural)に設定
            "voice_id": "ja-JP-NanamiNeural"
        },
        # SSML(音声合成マークアップ)を有効に設定
        "ssml": True,
        # 読み上げるテキストを日本語に設定
        "input": "Pythonコード(Ver2)Happyバージョン"
    },
    "config": {
        # 出力フォーマットをMP4として設定
        "result_format": "mp4",
        # 全身が表示されるように設定
        "stitch": True,
        # 表情を設定
        "driver_expressions": {
            # 表情の配列を設定
            "expressions": [
                {
                    # 表情が開始するフレームを設定(0は動画の開始)
                    "start_frame": 0,
                    # 使用する表情の種類を設定(ここでは「happy」)
                    "expression": "happy",
                    # 表情の強度を設定(1は最大の強度)
                    "intensity": 1
                }
            ]
        }
    },
    # アニメーションする画像のURL
    "source_url": "https://majisemi.com/topics/______import/2023/10/majisemiChan2.jpeg",
    # 動画のタイトルを設定
    "name": "Pythonコード(Ver2)Happyバージョン",
    # 動画を永続的に保存するかどうかを設定(Trueで保存)
    "persist": True
}

# リクエストヘッダーを設定
headers = {
    # JSON形式でのレスポンスを要求
    "accept": "application/json",
    # 送信するコンテンツのタイプをJSONとして設定
    "content-type": "application/json",
    # 認証情報
    "authorization": "Basic ●●●●●:▲▲▲▲▲"
}

# POSTリクエストを送信してレスポンスを受け取る
response = requests.post(url, json=payload, headers=headers)

# レスポンスからJSONデータを取得
response_data = response.json()

# JSONデータから作成された動画のIDを取得
talk_id = response_data.get('id', '')

# 作成された動画のIDを出力
print(f"Created Talk ID: {talk_id}")

それでは「Happyバージョン」をご確認ください

→Pythonコード(Ver2)Happyバージョン

Happyに変わりました?

そこはかとなく、
Happyになっている気がします。
なってますよね?

【ご参考】APIリファレンスまとめ

概要

ChatGPT4にまとめてもらいました。
※ご利用時には、最新のリファレンスを参照してください。

多くのパラメータがありますね。
使えこなせば、いろいろなことができそうです。

APIリファレンスまとめ(2023/10/19時点)

VIDEO ENDPOINTS

パラメータ名 パラメータの説明
source_url アニメーションするソース画像のURL、または提供されたスタジオ俳優のリストからの選択
driver_url トークを制御するドライバービデオのURL、または提供されたドライバーのリストからの選択。提供されていない場合、事前定義されたドライバーバンクからドライバービデオが選択されます。
script テキストまたはオーディオスクリプト(必須)
config 高度な設定オプション(オブジェクト)
user_data トークレスポンスとWebhookに追加される非機密のカスタムデータ(文字列)
name トークビデオの名前(文字列)
webhook ペイロード(アニメーションの詳細を含む)を送信するWebhook URL
result_url トークビデオのURL。提供されていない場合はデフォルトの宛先を使用します。
face アニメーションする顔(オブジェクト)。それ以外の場合は、自動的に顔を検出します。
persist ビデオがTTLなしでストレージに残るかどうか(真偽値)
limit ページネーション – 返すトークの数(double)
token ページネーション – 前のレスポンスからのページネーショントークン(string)
id 特定のトークを取得するためのID(string、必須)

Delete a specific talk (特定のトークを削除する)

パラメータ名 パラメータの説明
id 削除するトークのID(string、必須)

Create a new stream (新しいストリームを作成する)

パラメータ名 パラメータの説明
source_url アニメーションする写真へのURL(string、必須)
driver_url トークを制御するドライバービデオのURL、または提供されたドライバーのリストからの選択(string)
face アニメーションする顔(object)
config 高度な設定オプション(object)

Start a stream (ストリームを開始する)

パラメータ名 パラメータの説明
id ストリーム識別子(string、必須)
session_id セッション識別子情報(string)
answer Jsep answerオブジェクト(object、必須)

Submit network information (ネットワーク情報を送信する)

パラメータ名 パラメータの説明
id ストリーム識別子(string、必須)
ICECANDIDATE ICE候補(オプション)

Create a talk stream (トークストリームを作成する)

パラメータ名 パラメータの説明
id ストリーム識別子(string、必須)
session_id セッション識別子情報(string)
result_url ビデオ結果を保存するURL(string)
script スクリプト(必須)
config 高度な設定オプション(object)
user_data トークレスポンスとWebhookに追加される非機密のカスタムデータ(string)
name トークビデオの名前(string)

Delete a talk stream (トークストリームを削除する)

パラメータ名 パラメータの説明
id ストリーム識別子(string、必須)
session_id セッション識別子情報(string)

Get actors list (俳優のリストを取得する)

パラメータ名 パラメータの説明
limit ページネーション – 返す俳優の数(double)
token ページネーション – 前のレスポンスからのページネーショントークン(string)

Get driver list of an actor (俳優のドライバーリストを取得する)

パラメータ名 パラメータの説明
id 俳優のID(string、必須)
limit ページネーション – 返すドライバーの数(double)
token ページネーション – 前のレスポンスからのページネーショントークン(string)

Get a list of the presenters (プレゼンターのリストを取得する)

パラメータ名 パラメータの説明
limit ページネーション – 返すプレゼンターの数(double)
token ページネーション – 前のレスポンスからのページネーショントークン(string)

Get presenter by id (IDによるプレゼンターの取得)

パラメータ名 パラメータの説明
id プレゼンターのID(string、必須)

Create a clip (クリップを作成する)

パラメータ名 パラメータの説明
presenter_id プレゼンターID(string、必須)
driver_id ドライバーID(string)
script スクリプト(必須)
config 高度な設定オプション(object)
created_by クリップを作成したユーザー(string)
presenter_config 高度なプレゼンター設定オプション(object)
background クリップ結果の背景色(object)
user_data クリップレスポンスとWebhookに追加される非機密のカスタムデータ(string)
name クリップの名前(string)
webhook ペイロード(アニメーションの詳細を含む)を送信するWebhook URL
result_url クリップビデオのURL(string)
raw_result_url 生のクリップビデオのURL(string)
persist ビデオがTTLなしでストレージに残るかどうか(boolean)

Get clips (クリップを取得する)

パラメータ名 パラメータの説明
limit ページネーション – 返すクリップの数(double)
token ページネーション – 前のレスポンスからのページネーショントークン(string)

Get a specific clip (特定のクリップを取得する)

パラメータ名 パラメータの説明
id クリップのID(string、必須)

Delete a specific clip (特定のクリップを削除する)

パラメータ名 パラメータの説明
id クリップのID(string、必須)

Get presenter drivers by id (IDによるプレゼンタードライバーの取得)

パラメータ名 パラメータの説明
id プレゼンターのID(string、必須)

Create an animation (アニメーションを作成する)

パラメータ名 パラメータの説明
source_url アニメーションするソース画像のURL(string、必須)
driver_url アニメーションを駆動するドライバービデオのURL(string)
result_url アニメーションビデオのURL(string)
face アニメーションする顔(object)
webhook ペイロード(アニメーションの詳細を含む)を送信するWebhook URL(string)
config 高度な設定オプション(object)
user_data アニメーションレスポンスとWebhookに追加される非機密のカスタムデータ(string)

Get animations (アニメーションを取得する)

パラメータ名 パラメータの説明
limit ページネーション – 返すアニメーションの数(double)
token ページネーション – 前のレスポンスからのページネーショントークン(string)

Get a specific animation (特定のアニメーションを取得する)

パラメータ名 パラメータの説明
id アニメーションのID(string、必須)

Delete a specific animation (特定のアニメーションを削除する)

パラメータ名 パラメータの説明
id アニメーションのID(string、必須)

Get Voices (Text-to-Speech対応の音声を取得する)

パラメータ名 パラメータの説明
provider プロバイダーによるフィルタ(string)
id 音声IDによるフィルタ(IDはプロバイダーごとに一意)(string)

Upload an image (画像をアップロードする)

パラメータ名 パラメータの説明
image 画像のバイナリデータ(file)
detect_faces 顔を検出するかどうか(string)
metadata メタデータ(string)
source_url 画像をアップロードするためのURL(string)
result_url 画像がアップロードされた後のURL(string)

Delete image (画像を削除する)

パラメータ名 パラメータの説明
id 画像のID(string、必須)

Upload an audio file (オーディオファイルをアップロードする)

パラメータ名 パラメータの説明
audio アップロードするオーディオファイル(file、サイズは6MB以下)
source_url オーディオをアップロードするためのURL(string)
result_url オーディオがアップロードされた後のURL(string)

Delete an audio file (オーディオファイルを削除する)

パラメータ名 パラメータの説明
id オーディオファイルのID(string、必須)

Upload audio file (オーディオファイルをアップロードする)

パラメータ名 パラメータの説明
script オーディオに変換されるスクリプト(object、必須)

スクリプトオブジェクト内のパラメータ:

パラメータ名 パラメータの説明
type スクリプトのタイプ(string)
subtitles 字幕を使用するかどうか(boolean)
provider プロバイダーのタイプ(object)
ssml SSMLを使用するかどうか(boolean)

プロバイダーオブジェクト内のパラメータ:

パラメータ名 パラメータの説明
type プロバイダーのタイプ(string)
voice_id 音声ID(string)

Get credits (ユーザーのクレジットを取得する)

パラメータ名 パラメータの説明
なし このAPIエンドポイントにはパラメータがありません

Upload logo (ロゴをアップロードする)

パラメータ名 パラメータの説明
logo アップロードするロゴのファイル(file、必須)
top ロゴの上端の位置(string、必須)
left ロゴの左端の位置(string、必須)

Delete logo (ロゴを削除する)

パラメータ名 パラメータの説明
なし このAPIエンドポイントにはパラメータがありません

Asynchronous Errors (非同期エラー)

エラーの種類 説明
DriverError ドライバが無効または読み込めない
SourceError ソース画像が読み込めないまたは無効な形式
LogoError ロゴ画像が読み込めないまたは無効な形式
FaceError 有効な顔が検出されない
UnknownError 未知の内部エラー

終わりの会

「微課金」推奨

APIの場合、何回も実行して確認する必要があるため、
無料プランの配布クレジットだけでは、足りないかもしれません。

「微課金しないといけないかもしれない」心意気が、
必要かもしれません。

※今回は「最小プラン」で課金しました。

マジセミちゃん(仮)のごあいさつ

【お知らせ】「マジセミ」のご紹介

「マジセミ」では、日々、多くのIT関連セミナーを開催しています。

多くのセミナーの中から「ご自身のスキルやビジネスを強化できるセミナー」を見つけて、
ぜひ1度、ご参加ください。

マジセミのイメージロゴ

マジセミ関連プラットフォーム

プラットフォーム 説明 URL
マジセミ マジセミで実施されるさまざまなセミナーの開催情報を確認できます。
「IT関連セミナー」「製造業関連セミナー」など、ご自身のビジネスを強化できるセミナーを検索できます。
→majisemi.com
マジセミサービス 「セミナーを開催したい方」向けの情報を確認できます。
トライアルからの利用が可能です。
→majisemi.com
→service
マジセミドライブ IT関連コンテンツを紹介しています。 →majisemi.com
→topics
YouTubeマジセミ動画①
情シス向けIT・DX
「情シス向け」の最新トレンド情報をお届けします。 →youtube.com
→@majisemi
YouTubeマジセミ動画②
情報セキュリティ
「情報セキュリティ」の最新トレンド情報をお届けします。 →youtube.com
→@majisemisecurity
YouTubeマジセミ動画③
企業向けAI活用
「AI活用」の最新トレンド情報をお届けします。 →youtube.com
→@majisemiai
YouTubeマジセミ動画④
製造業向け先端技術・DX
「製造業向け」の最新トレンド情報をお届けします。 →youtube.com
→@majisemimanufacturing
YouTubeマジセミ動画⑤
人事・バックオフィス部門向け
「人事」「バックオフィス」部門向けの最新トレンド情報をお届けします。 →youtube.com
→@majisemibackoffice
マジセミFacebook 毎日「マジセミ関連情報」や「IT関連ニュース」などを紹介しています。 →facebook.com
→OSSNews
マジセミX(Twitter) マジセミFacebookと同様に投稿しています。 →twitter.com
→Majisemi_it
マジセミInstagram マジセミFacebookと同様に投稿しています。 →instagram.com
→majisemi_it/
マジセミThreads マジセミFacebookと同様に投稿しています。 →threads.net
→@majisemi_it
マジセミBluesky マジセミFacebookと同様に投稿しています。 →majisemi.bsky.social

おすすめの記事

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

「 2029年問題 」とは、高校でのデジタル教育改革により、新入社員と既存社員間でデジタルスキル格差が拡大する懸念を指します。企業は早急に対応が求められています。この格差は、企業競争力や業務効率にも、影響を及ぼす可能性があります。

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

経済産業省による「 生成AI 利活用ガイドブック 」は、企業やクリエイター向けに、安心して「生成AI」を利用するための、「指針」「実例」「注意点」を明示しています。「業務効率化」や「新しいアイデア創出」の支援を目的としています。

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

「 VMWare 」の仮想化技術は、「ITインフラの効率化」に大きく貢献する技術ですが、Broadcomによる買収後のライセンス変更が大きな問題として注目されています。柔軟で慎重な契約見直しが今後の鍵となります。