天然パーマです。

AI Webcam

AI Webcamについて紹介します。

AI Webcam

AI WebcamはWebcamでとった写真についてAIが音声で返答してくれるというものです。AIのキャラクターというか音声は指定可能です。また文章のプロンプトでどのように返答するかも指定できます。

例えば、アメリカの若い女性「レイチェル」に自分の容姿を褒めてもらった時の大爆笑映像はこちらです。

元ネタ

実は元ネタがあって、Wes Bosというポドキャスターがやってたのを真似てます。コードも公開されているので、それを使わせてもらってます。みなさんもできます。

YAPCでLT

あまりにも面白いので、先日のYAPC::HiroshimaのLTでこれを応用したものをデモしました。レイチェルだけを流しても尺が余るしインパクトにかけるので、YAPCっぽく「dankogai」さんと「papix」をAIにしました。

UIはこんな感じです。

例えば、「papix、私を褒めて!」というボタンを押すと、papixの音声でpapixのAIが僕のことを褒めてくれます。これ、すごいのはpapixもdankogaiさんも彼ららしい、言葉遣いをすることです。

模様です。uzullaさんが撮ってくれました。これ、dankogaiさんじゃなくてdankogaiさんのAIが喋ってます。まじで。

仕組み

流れです。

  1. Webカムで写真を撮る
  2. その写真とプロンプトをOpenAI「gpt-4-vision-preview」に送る
  3. 返ってきたテキストをElevenLabsの「Text to Speech」に送る
  4. 返ってきたオーディオファイルを再生する

簡単でわかりやすい仕組みです。

今回のLTでおもしろおかしくできた肝はdankogaiさんとpapixがかなり似てたことです。そのために2つのことをしました。

  1. 音声をその人にする
  2. プロンプトを調整する

1. 音声をその人にする

今回「Text to Speech」に使ったElevenLabsのAPIが面白いです。レイチェルの声は一般に公開されているもので、誰でも使えます。一方、dankogaiさんとdankogaiさんの声は自分で作りました。音声ファイルをアップロードするとそれを解析、学習してその人の「音声」になります。ありがたいことに彼らはイベントでよく登壇していてその動画がありますので、そこから音声を抽出します。アップできるファイル容量は10MBまでなので、5分くらいの動画がギリギリいい感じでした。そこで発行されたIDをAPIのリクエスト時に指定するとそれが使われる仕組みです。この「音声」は自分だけしか使えず、僕のダッシュボードには 「僕だけの」dankogaiさんとpapix の「音声」がいます。

これが学習時間が短いのに、相当似ています。

2. プロンプトを調整する

音声がその人になっただけでは、ちょっと物足りなかったです。なので、「Text to Speech」に渡すテキストをそれっぽくするために、OpenAIに生成させるためのプロンプトを調整します。

OpenAIの「gpt-4-vision-preview」では以下のようにAPIをコールすることになります。

const chatCompletion = await openai.chat.completions.create({
  max_tokens: 800,
  messages: [
    {
      role: 'system',
      content: voice.system
    },
    {
      role: 'user',
      content: [
        {
          type: 'text',
          text: voice.user
        },
        {
          type: 'image_url',
          image_url: image
        }
      ]
    }
  ],
  model: 'gpt-4-vision-preview'
})

このvoice.userのテキストがプロンプトにあたります。それをこのようにしました。まず、全部貼り付けます。

const prompts = {
  papix: {
    name: 'papix',
    system: `あなたは優秀なエンジニアです。あなたは写真の人物について褒めます。`,
    user: `あなたは写真の人物について説明します。彼の容姿の特徴について褒めてください。「超」と「すげー」「めっちゃ」「まじで」という言葉をたくさん使ってください。テンション高めに。`
  },
  dan: {
    name: 'dan',
    system: `あなたはベテランのエンジニアです。あなたは写真の人物についてたくさん褒めます。`,
    user: `あなたは写真の人物について説明します。彼の容姿の特徴について褒めてください。プレゼンをしているようにしてください。冒頭に「えー」という言葉、語尾に「はい」を使ってください。`
  }
}

ここでのポイントは

  • papix - 「超」と「すげー」「めっちゃ」「まじで」という言葉をたくさん使ってください。
  • dankogaiさん - 冒頭に「えー」という言葉、語尾に「はい」を使ってください。

ってところで、これが彼ららしくしています。

ベストLT賞とった

結果、大爆笑を誘い、結果、ベストLT賞をもらいました。

メガネもらいました。

分配

賞撮った時の挨拶でも言ったのですが、これはまじでdankogaiさんとpapixのおかげです。賞品を分配しないといけないです。

備考

当然ですが、dankogaiさんとpapixには事前に許可をもらってました。

感想

これ、面白いのですが、ふたりのAIが喋ったのがコンテンツになってるのはある意味怖くて、発表してる最中に「俺何もしてないし、むしろdankogaiさんとpapixが頑張ってる」って考えてちょっとゾクゾクしました。

あとは受賞の時に言ってもらったのですが、昔僕がやってた「なんたらDetect」と似たように新しい技術をコミカルに応用できたというのはよかったのではないでしょうか。

誰かをAIにする場合は許可をとるなり考慮しつつ、みなさんも試してはいかがでしょうか。