LoginSignup
20
15

More than 1 year has passed since last update.

[UnityでWhisper APIを使う方法]改め、ChatGPTが自分の能力を超えつつあると実感した瞬間

Last updated at Posted at 2023-03-02

概要

自分が一時間ぐらいぐだぐだ悩んでいたコードをChatGPTがほぼ一瞬で書いてくれて、思わずうわっって気分になった話
UnityでWhisper APIを使用するコードとその使い方は経緯の後に書いてあるので、経緯に興味のない人はそちらをご覧ください。

経緯

今日ChatGPTとWhisperのAPIが公開されました。
自分もWhisperのAPIを試してみて性能が非常に素晴らしかったから、それをUnityでも使用できるようにしようと思ってScriptを書いていたんです。
ただWhisper APIの仕様って以下のような形で、Content-Type: multipart/form-dataなんですね。
複数のファイル形式のデータを送る形式。

curl https://api.openai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F model="whisper-1" \
  -F file="@/path/to/file/openai.mp3"

初めて使う形式なのと久しぶりにC#を書いたことが合わさってちょっと苦戦していて、一時間ぐらい悪戦苦闘していたんです。
で、動かねえなぁ、って思いながらコードを書いていたら、そうだ、ちょっとChatGPTにお願いしたらどう書いてくれるか見てみよう、と思ったんです。
それで、以下のようなプロンプトでお願いをしました。
その結果が、以下です。

プロンプト

Unity Webrequestを使用して、以下のcurlを送信するためのスクリプトを作成して

curl https://api.openai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F model="whisper-1" \
  -F file="@/path/to/file/openai.mp3"

出力結果

image.png

試したら、一つだけエラーがありました。
using UnityEngine.Networking;がなく、ライブラリを読み込んでいないから、UnityWebRequestが使えない、というエラーが。
ただ、それだけでした。
それだけ直すと、そのまま普通に動きました。

もちろん、このコードは非常に単純で機械にも作りやすいということはあります。
ですが、それでも一時間苦戦したものを一瞬で書いてくれた、ということも事実です。
これから、このようなことがどんどん起きてくるでしょう。
まずは小さな能力から始まり、だんだん複雑な能力まで拡張していって、どんどんAIのほうが能力が高くなっていくでしょう。
5年か、10年か、遅くとも20年以内には、ほとんどの人間の能力をAIが上回る時代がほぼ確実に来るでしょう。
そこまでいかなくても、AIを使用するかしないか、うまく活用できるかできないかで、生産性が何十倍、何百倍にも差が生まれる時代がもう来ています。
AIをうまく使えるようにならなければならない。
今までもそう思ってはいましたが、今日改めてそのことを実感しました。

Unity上でWhisper APIを使うコードとその使い方

1. 以下のコードをUnity上で作成する

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine.Networking;

public class AudioTranscription : MonoBehaviour
{
    public string openaiApiKey;
    public string filePath;
    public string modelName;

    IEnumerator Start()
    {
        string url = "https://api.openai.com/v1/audio/transcriptions";

        WWWForm form = new WWWForm();
        form.AddField("model", modelName);

        byte[] fileBytes = File.ReadAllBytes(filePath);
        form.AddBinaryData("file", fileBytes, Path.GetFileName(filePath), "multipart/form-data");

        Dictionary<string, string> headers = new Dictionary<string, string>();
        headers.Add("Authorization", "Bearer " + openaiApiKey);

        UnityWebRequest www = UnityWebRequest.Post(url, form);
        www.downloadHandler = new DownloadHandlerBuffer();

        foreach (KeyValuePair<string, string> header in headers)
        {
            www.SetRequestHeader(header.Key, header.Value);
        }

        yield return www.SendWebRequest();

        if (www.result != UnityWebRequest.Result.Success)
        {
            Debug.Log(www.error);
        }
        else
        {
            Debug.Log(www.downloadHandler.text);
        }
    }
}

2. 作成したコードを適当なGameObjectに貼り付ける

3. Editer上で、openaiApiKey、使用する音声のfilePath、使用するmodelNameを入力する

4. Editer上で実行すると、Console画面に認識した音声の結果が出力される

20
15
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
15