文字起こしで使えると話題のWhisperを使ってSTT(Speech to Text)してみます。
ちなみに逆のTTSはこちら
公式にはPython版サンプルはあるけど
公式にはPython版はありましたが、JavaScript版がなかった感じです。
Node.jsから触りたいですが、以外とコピペできそうなコードが落ちてなくて
こちらのYouTubeが参考になりました。
まずは文字起こし用音声 - 25MBまで
Google Meetで録画したMP4ファイルをMacで書き出してm4aファイルにしました。
調べてると
File uploads are currently limited to 25 MB and the following input file types are supported: mp3, mp4, mpeg, mpga, m4a, wav, and webm.
と書いてあり、1回のリクエストで25MBまでのファイルしか扱えない模様だったのでかなり一部だけにトリミングしてます。
拡張子は以下が使える様ですね。
- mp3
- mp4
- mpeg
- mpga
- m4a
- wav
- webm
openaiライブラリで試す
ライブラリはGPTなどを使う時と同様です。
$ npm i openai
APIキーも同様です。
const fs = require('node:fs');
const OpenAI = require('openai');
const audioFilePath = './speech2.m4a'; // 音声ファイルのパスを指定
const openai = new OpenAI({
apiKey: 'APIキー',
});
async function main() {
// Whisperモデルを使用してテキスト変換リクエストを送信
const response = await openai.audio.transcriptions.create({
model: "whisper-1",
file: fs.createReadStream(audioFilePath),
language: "ja",
});
// 変換されたテキストを出力
console.log(response);
}
main().catch((err) => {
console.error(err);
process.exit(1);
});
出力結果を眺める
某商工会議所の人とMTGしたときの会話ログの一部です。名前は伏せて別名にしてますが出力としては一人の方は珍しい苗字だったので読み取れてなかったですが僕も聞き取れなかったので仕方なしな気がしました。
$ node app.js
{
text: 'どうも野火助と申します よろしくお願いします ありがとうございます よろしくお願いします XX商工会議所の田中と申します よろしくお願いします 佐藤と申します よろしくお願いいたします'
}
こんな感じでした。
どうものびすけと申します。ってところが謎に野火助になってますが、全然良いですね。
本当は3人での会話でした。
のびすけ: 「どうものびすけと申します よろしくお願いします」
田中さん: 「ありがとうございます よろしくお願いします XX商工会議所の田中(別名)と申します」
佐藤さん: 「よろしくお願いします 佐藤と申します」
のびすけ: 「よろしくお願いします」
平坦になってしまっていて人の認識までは出来てないですが、結構良い精度なのかなとは思います...が、まだデータ不足でなんともですね。
参考