はじめに
IBM の Watson Speech to Text を TypeScript で呼び出してみた。検索しても日本語情報少なめやったので記録。
記載してる内容は、公式サイトの抜粋なので、実際に使うときは最後のリンク先を要参照。
前提
以下の手順は、IBM Cloud のアカウント持ってる前提。
IBM Cloud のアカウントは下記サイトから、ポチポチクリックしてたら登録できるはず。
IBM Cloud - 日本 | IBM
IBM Cloud でリソースの登録と API Key の取得
IBM Cloud でリソースの登録と API Key の取得方法は以下の通り。
特に迷う部分はないと思う。
リソース・リストから作成した Speech to Text リソースを選ぶ。
Node.js x TypeScript の設定
Node.js x TypeScript の設定方法は以下の通り。
試しに使ってみるだけなら、ほぼほぼデフォルトで大丈夫やった。
下記コマンドを打って、環境を作る。
node のバージョンに合わせて、@types/node
をインストールしてる。
npm init
node -v
npm install -D typescript @types/node@14
npx tsc --version
npx tsc --init
npm install ibm-watson@^7.0.0
npm install -D ts-node
コード
コードは、以下の通り。
- ここのコードをコピペして、
- なんとなく、
require
しているところをimport
にして、 - 不要なパラメータ削って、
- apikey と serviceUrl を環境変数から取ってきた
apikey と serviceUrl は、上記手順で IBM Cloud から取得したものを使用。
linter に怒られてないからこれで大丈夫そう。
import fs from "fs";
import SpeechToTextV1 from "ibm-watson/speech-to-text/v1";
import { IamAuthenticator } from "ibm-watson/auth";
const speechToText = new SpeechToTextV1({
authenticator: new IamAuthenticator({
apikey: process.env.SPEECH_TO_TEXT_APIKEY || "",
}),
serviceUrl: process.env.SPEECH_TO_TEXT_SERVICE_URL || "",
});
const recognizeParams = {
audio: fs.createReadStream("audio-file.flac"),
contentType: "audio/flac",
};
speechToText
.recognize(recognizeParams)
.then((speechRecognitionResults) => {
console.log(JSON.stringify(speechRecognitionResults, null, 2));
})
.catch((err) => {
console.log("error:", err);
});
実行
実行するときは、こんな感じ。.bashrc
とか.zshrc
とかで環境変数に登録してたら、npx ts-node index.ts
で OK。
SPEECH_TO_TEXT_APIKEY=APIKEY SPEECH_TO_TEXT_SERVICE_URL=https://APIURL npx ts-node index.ts
結果はこんな感じの json で返ってくる。result.results[0].alternatives[0].transcript
に文字起こし結果が入ってる。いい感じ。
{
"status": 200,
"statusText": "OK",
"headers": {
"いろいろ": "省略"
},
"result": {
"result_index": 0,
"results": [
{
"final": true,
"alternatives": [
{
"transcript": "several tornadoes touched down as a line of severe thunderstorms swept through Colorado on Sunday ",
"confidence": 0.94
}
]
}
]
}
}
おわりに
迷いながら試してたけど、整理してみたら、公式サイトの情報そのままな感じやった。まじめに、公式サイト見ろってことか。。。
参考
参考にしたサイト。公式サイト中心に。
サービスの概要
Speech to Text - IBM Watson | IBM
ここに概要が書かれてる。
API の仕様
Speech to Text の入門 | IBM Cloud 資料
ここに、API の仕様が書かれている。モデルのカスタマイズの仕方とかも書かれている。
入門らしく、curl
で呼ぶ方法も書かれてるので、まずここから試すのが良さげ。
普通に使うなら、API 一回叩くだけで、transcribe してくれる。
Amazon Transcribeだと、S3 に保存して transcribe する感じやから、シンプルと言えばシンプルな気がする。設計の違いを垣間見れて面白い。良し悪しあるんやろなー。
SDK の仕様
Speech to Text - IBM Cloud API Docs
SDK の仕様はここ。
言語ごとに Example も載ってる。ありがたや。
Node.js の SDK
watson-developer-cloud/node-sdk: Node.js library to access IBM Watson services.
Node.js の SDK のソースコードはここにある。
Watson APIs 全部入りなので、Speech to Text のところ探して使う必要ある。
日本語の記事
あまりない。
Speech To Text で音声認識してみた - Qiita ってのがあったけど、古い SDK やった。
やっぱ、AWS とかに比べると情報が少ない・・・。
サンプルコード
まずは公式のSDK がある githubとSDK の使い方が書かれたサイトをコピペするところから始めるのが良さげ。websocket 使ってストリーミング処理もできるみたい。試してないけど。websocket わからん。
メモ
Zennに投稿してた記事をこっちにお引越しした(2022/11/04)