【Node.js】OpenAI の API ＋ 新モデル（gpt-4o-transcribe、gpt-4o-mini-transcribe）で音声認識

## はじめに

以下の記事の最後の部分に書いていた、OpenAI の新モデル（gpt-4o-transcribe、gpt-4o-mini-transcribe）を使った音声認識のお試しの話です。

●【Node.js】OpenAI の API ＋ 新モデル（gpt-4o-mini-tts）で音声合成 - Qiita
　https://qiita.com/youtoy/items/a35f7907eaa4259e417e

![2025-03-23_01-46-04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/aa676dcd-1933-483c-94b4-14ed3c50b27a.jpeg)

### 【余談】OpenAI のモデルに関連した音声認識を過去に試した話

過去に音声認識サービス・ライブラリなどを試してみて、記事を書いたりしたこともありました。

その中で OpenAI のモデルが関わるものでは、「MLX版の Whisper」や「Azure で提供されている Whisper」、他に「GitHub で公開されているバージョンの Whisper」を試して記事を書いたことがあります。

- [M4 Mac mini で mlx-whisper を試す（pyenv・venv を使った環境準備も）【Python-4】 - Qiita](https://qiita.com/youtoy/items/c5b204c811f5d8b4e5fe)
- [curlコマンドで Azure OpenAI Service の tts-1 を使って音声合成して whisper による音声認識も行う - Qiita](https://qiita.com/youtoy/items/ab77d552d8d18afb14e7)
- [Windows 11 で pyコマンド（Python Launcher for Windows）による仮想環境構築 ＋ OSS版の Whisper【Python-3】 - Qiita](https://qiita.com/youtoy/items/da53bfd8ca54e196e897)

また、[オンラインイベント関連の依頼をいただき、API版の Whisper のデモや利用時の音声ファイルの処理まわりの話をしたこともありました](https://speakerdeck.com/you/chatgptyan-jiu-hui-di-7dan-algyan)。

## 実際に試す

### 公式の情報を確認する

実際に試していくために [OpenAI公式の APIリファレンスでサンプルを確認](https://platform.openai.com/docs/api-reference/audio/createTranscription)してみます。

#### JavaScript のサンプル

以下の JavaScript のサンプルを見てみます。

https://platform.openai.com/docs/api-reference/audio/createTranscription?lang=javascript

Default というタブで示されている内容は、以下の通りです。

```javascript
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const transcription = await openai.audio.transcriptions.create({
    file: fs.createReadStream("audio.mp3"),
    model: "gpt-4o-transcribe",
  });

  console.log(transcription.text);
}
main();
```

ちなみに、それ以外のタブを選ぶことで、ストリーミングやタイムスタンプ付の処理を行う場合などのサンプルを見ることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/5be659c2-dffc-473c-bb5e-8d324d7d794f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/22cf669d-2900-454f-b995-29bb946841da.png)

今回は「Default」の内容で進めていきます。

### 公式サンプルを用いた処理の実行

公式サンプルをベースに、お試しを進めます。

#### 利用するライブラリ・APIキー

その際、以下の TypeScript・JavaScript用のライブラリを使います。

●openai - npm
　https://www.npmjs.com/package/openai

上記を npmコマンドでインストールして、APIキーは環境変数に設定します。
（Mac の zhs上で exportコマンドを使うやり方で、一時的にキーを設定しました）

#### 利用する音声ファイル

[今回利用する音声ファイル](https://github.com/openai/whisper/blob/90db0de1896c23cbfaf0c58bc2d30665f709f170/tests/jfk.flac)は、[冒頭に掲載していた記事](https://qiita.com/youtoy/items/da53bfd8ca54e196e897)の中で用いていたものと[同じもの](https://github.com/openai/whisper/blob/90db0de1896c23cbfaf0c58bc2d30665f709f170/tests/jfk.flac)にします。

#### 処理の実行と結果（gpt-4o-transcribe）

用いたコードは以下のとおりです。

公式サンプルとの違いは、音声ファイルの名前を変えたところくらいです。

```javascript
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const transcription = await openai.audio.transcriptions.create({
    file: fs.createReadStream("tests_jfk.flac"),
    model: "gpt-4o-transcribe",
  });

  console.log(transcription.text);
}
main();
```

上記を実行した結果を以下に示します。

![2025-03-23_18-00-09.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/0f43d056-b5a8-46f9-88c0-1c1fb9de2941.jpeg)

元の音声をテキストにしたものが得られたことを確認できました。


#### 処理の実行と結果2（gpt-4o-mini-transcribe）

上記では、「gpt-4o-transcribe」を使っていましたが「gpt-4o-mini-transcribe」のほうも試してみます。

以下のとおり、先ほどのコードのモデルを指定していた部分のみ書きかえたものを用いました。

```javascript
import fs from "fs";
import OpenAI from "openai";

const openai = new OpenAI();

async function main() {
  const transcription = await openai.audio.transcriptions.create({
    file: fs.createReadStream("tests_jfk.flac"),
    model: "gpt-4o-mini-transcribe",
  });

  console.log(transcription.text);
}
main();
```

これを実行した結果は、以下のとおりです。

![2025-03-23_18-10-46.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/6b66c2ed-cdf9-4eaa-83a9-1d018f2f71c4.jpeg)

先ほど比べると、記号の部分で微妙な違いがありますが（※ 先ほどは「,」だった部分が、なぜか「:」や「−」になっている）、他は同じ内容が得られました。

## 利用履歴の確認

最後に、[ダッシュボードの Usage のページ](https://platform.openai.com/usage)で、API の利用履歴を確認してみました。

表示されていた内容は以下のとおりです。

![2025-03-23_18-20-00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/384a2989-53c9-48fe-b831-1d608c47a4d9.jpeg)

gpt-4o-transcribe、gpt-4o-mini-transcribe が表示されるカテゴリは、Audio系ではなく [Chat Completions](https://platform.openai.com/usage/chat-completions)になるようです。
（そのカテゴリ分けは、前回の記事の gpt-4o-mini-tts と同じでした）