2024-01-21
Go言語で OpenAI の Whisper API を叩いてみました。
音声ファイルを文字起こしでき、めっちゃ便利です。
事前準備
ライブラリとして go-openai を用います
go get github.com/sashabaranov/go-openai
サンプルコード
ローカルに音声ファイルを置いてください。リクエストの際にファイル名を渡します
package main import ( "context" "fmt" "log" "github.com/sashabaranov/go-openai" ) func main() { ctx := context.Background() token := "" // OpenAI API のトークンをセット client := openai.NewClient(token) req := openai.AudioRequest{ Model: openai.Whisper1, FilePath: "sample.wav", // ファイルを指定 } res, err := client.CreateTranscription(ctx, req) if err != nil { log.Fatalf("Error: %s", err.Error()) } fmt.Printf("text: %s", res.Text) // text: こんにちは }
io.Reader を渡す方法
ファイル名を渡す代わりに io.Reader を渡すこともできます。 例えばウェブアプリでローカルにファイルを保存するのが難しい場合、この方法が有用です。
package main import ( "context" "fmt" "log" "os" "github.com/sashabaranov/go-openai" ) func main() { ctx := context.Background() file, err := os.Open("sample.wav") defer file.Close() token := "" // OpenAI API のトークンをセット client := openai.NewClient(token) req := openai.AudioRequest{ Model: openai.Whisper1, FilePath: "sample.wav", Reader: file, // io.Reader を渡す } res, err := client.CreateTranscription(ctx, req) if err != nil { log.Fatalf("Error: %s", err.Error()) } fmt.Printf("text: %s", res.Text) // text: こんにちは }
フォーマットを verbose_json にすると詳細なデータを取得できる
フォーマットとして verbose_json
を指定すると、language や duration など詳細なデータが返ってきました。
package main import ( "context" "fmt" "log" "github.com/sashabaranov/go-openai" ) func main() { ctx := context.Background() token := "" // OpenAI API のトークンをセット client := openai.NewClient(token) req := openai.AudioRequest{ Model: openai.Whisper1, FilePath: "sample.wav", Format: openai.AudioResponseFormatVerboseJSON, // フォーマットを verbose_json へ } res, err := client.CreateTranscription(ctx, req) if err != nil { log.Fatalf("Error: %s", err.Error()) } fmt.Printf("text: %s\n", res.Text) // text: こんにちは fmt.Printf("language: %s\n", res.Language) // language: japanese fmt.Printf("duration: %f\n", res.Duration) // duration: 2.810000 }
終わりに
めっちゃ便利です。APIを呼ぶだけなのでウェブアプリに容易に組み込めるかと思います。
作成日
2024-01-21
更新日
2024-01-21