東京生まれHOUSE MUSIC育ち

悪そうな奴はだいたい友達なの?

Cloud Speech-to-Textを使ってアフター6ジャンクションの文字起こしをやってみた


スポンサードリンク

googleのCloud Speech-to-Textを使用して、愛聴しているラジオ番組アフター6ジャンクションの文字起こしをやってみました。

クラウドで文字起こしをやってみる

文字起こしというと、以下のミヤーンさんをよく参照しています。

miyearnZZ Labo

とはいうものの、コンピュータでやってみたらどうなるんだろうと思って、やってみました。

使用したのはこれ。googleのサービスです。

cloud.google.com

実際の文字起こしの精度は?

confidenceという信頼度が「0.94305253(94%の信頼度)」となっている部分をピックアップして比較してみます。

太字部分が自分で直した部分です。

Speech-to-Textの結果

「第91回アメリカのアカデミー賞ノミネート作品が8昨日の夜に発表になりましたとこの後ですねえーと梅田2歳未勝利予想ねライフワークとしている女性俺は彼女のノミネート ねこの結果という金の皆様と思う感じがしますからその話を買おうと思うんですが」

手直しした部分

「第91回アメリカのアカデミー賞ノミネート作品がえーと昨日の夜に発表になりましたとで今日この後ですねえーとメラニーさんというねアカデミー賞予想をねライフワークとしている女性がね、おりまして彼女のノミネートのねこの結果というかねのその話をうかがおうと思うんですが」

やってみての感想

最初に文字起こしをやってみたの感想です。

アフター6ジャンクションの文字起こしには向いていないと思う

このサービスは音声認識できる単語があると、それをきっかけにがんばって文字にされているという印象です。

ただ、宇多丸師匠の喋りが速いせいか、ほとんど音声が認識されていない印象です。また、2人でかけあいながらのトークは誰の言葉を文字にすればいいのかクラウドで判断できずに、文字起こしは省略されているように感じました。

ただ、別番組なら結果は異なっているかもしれないです。例えば、session22なら落ち着いた喋りですし、掛け合いは少なめなので、別な結果になっているかもしれないです。

制約や手順が多い

音声認識するまでの制約や手順が多くて面倒に感じます。

例えば、音声ファイルはflacかwav形式で、さらにモノラル形式でないとエラーが出てしまいます。その音声認識に適したファイルに変換する手間が面倒です。

変換した後は、cloud storageにアップロードするのも面倒です。このあたりは、コード書いていろいろやれば

手順で参考にした記事

参考にしたのはここです。この記事を参照すると、Cloud Speech-to-Textで文字起こしできます。

ハマったポイントとその対処

2019年1月23日放送の冒頭5分間のファイルを文字起こししてみました。

上記の参考記事には書いてない、自分でハマったポイントとその対応です。

音声ファイルの変換

面倒なのは、音声変換です。aacで録音しているファイルをflacのモノラル変換するためのffmpegのコマンドです。

ffmpeg -i /recorder/session22_2019-01-24.aac  -sample_fmt s16 -ss 00:51:35 -to 00:56:35 -ac 1 flac.flac

-sample_fmt s16は16bitへの変換

-ss 開始時間 -to 終了時間 5分だけ抽出したかったので、このオプションを使用

-ac 1はモノラルに変換 (無償のFFmpegでWavファイルの変換(Wavに変換)

ストレージへのアクセス権が無い

やり方が悪いのかもしれないけど、ストレージへのアクセス権が無いと以下のようなメッセージが出力されました。

権限設定でallUsersを追加して対応しました。

curl -H "Content-Type: application/json" -d @sync-request.json https://speech.googleapis.com/v1/speech:recognize?key=aaaaaaa
{
  "error": {
    "code": 403,
    "message": "Anonymous caller does not have storage.objects.get access to radiosound/flacmono.flac.",
    "status": "PERMISSION_DENIED"
  }
}

1分以上の音声ファイルを扱えない

1分以上の音声ファイルで「recognize」を使用すると、「LongRunningRecognize」を使用しなさいとメッセージが出力されます。

curl -H "Content-Type: application/json" -d @sync-request.json https://speech.googleapis.com/v1/speech:recognize?key=aaaaaaa
{
  "error": {
    "code": 400,
    "message": "Sync input too long. For audio longer than 1 min use LongRunningRecognize with a 'uri' parameter.",
    "status": "INVALID_ARGUMENT"
  }
}

以下のように「recognize」を「longrunningrecognize」に変更します。そうすると、nameに番号が出力されます。

curl -H "Content-Type: application/json" -d @sync-request.json https://speech.googleapis.com/v1/speech:longrunningrecognize?key=aaaaaaa
{
  "name": "7636252158672302954"
}

5分以上の音声ファイルは時間がかかる

上記のnameにある番号を使用すると、パーセントが上昇するのがわかります。以下の状態は39%です。

curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token)      -H "Content-Type: application/json; charset=utf-8"      "https://speech.googleapis.com/v1/operations/7636252158672302954"
{
  "name": "7636252158672302954",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
    "progressPercent": 39,
    "startTime": "2019-01-25T07:21:01.260412Z",
    "lastUpdateTime": "2019-01-25T07:22:08.963031Z"
  }
}

出力結果

以下のように100%になると、文字が出力されます。

curl -H "Authorization: Bearer "$(gcloud auth application-default print-access-token)      -H "Content-Type: application/json; charset=utf-8"      "https://speech.googleapis.com/v1/operations/7636252158672302954"
{
  "name": "7636252158672302954",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeMetadata",
    "progressPercent": 100,
    "startTime": "2019-01-25T07:21:01.260412Z",
    "lastUpdateTime": "2019-01-25T07:23:26.010864Z"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech.v1.LongRunningRecognizeResponse",
    "results": [
      {
        "alternatives": [
          {
            "transcript": "パチンコ&スロット D ステーションが6時をお知らせしますちょっと今日のゲストの Base Ball Bear 小出祐介君のペースにちょっと乗せられて完全にあの後6出演者スタッフ一同ちょっと気が抜けすぎたあのやっぱ寝坊だよねやっぱねこうち ゃんもそうですけどねなんかこうオブ期間と言うかライムしたと一緒仕事して落としと書くもう一枚一枚違うんですけどなんかこう物質っぽくない気がしちゃうんですけどねあの放送生放送2分前になってもまだ表でねずっとねマスカレードホテルにおけるキムタクってき てキムタクを見たいので話をして行ってましたけどねほんとねあの Base Ball Bear あちこち痛い風邪日野なったのですがよろしくお願いいたします行ってみましょうかね",
            "confidence": 0.94522595
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "背中と7月23日水曜日6時を過ぎましたラジオを起動方もはたまたラジコでおきの方もこんばんは TBS ラジオ聞いて常にお送りしてるから千秋でも私の住所は登録パーソナルグループ RHYMESTER の宇多丸ですそして誕生日パーティー",
            "confidence": 0.9353875
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "あなたも風邪など召してないですかやなんとかもしましたがちょっとなんか鼻の奥の方が鳴ってたけどやっぱり来ました来ましたねやっぱりねよく寝れば大丈夫っていうこと感想がね今日はそうでもないのか48%に昨日とか二十何パーセントかと昨日も言ったけどとにかくその指紋認証してくれないねスマホ音が変わりますかひまわりの花と違うなんかやったら切り傷が増えませんかこの時期乾燥してるからもうちょっと紙でコピーしてきちゃったりとかなるほど",
            "confidence": 0.94174707
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "なるほどそれで私ちょっと今ピンと来てしまったんだけどひびさんの前でする話かなと思っていましたとこの時間帯やまようですね気が付いてもやっぱねなんの木いますがどういう病気とかね気持ちとか出ないんですけどさっきおトイレした ら日目に鮮血があの中から出てなくて割と光表面が表面でをちょっと明るく染めたからその子の穴にまったりご感想というのがどこまで行くんだ場所もお尻が乾燥してるからなんかねちょっと見に覚えのない笑顔を絶やさないと思うイケメンとかじゃないよそれでも永遠の生のすぐそばでここなって",
            "confidence": 0.93774974
          }
        ]
      },
      {
        "alternatives": [
          {
            "transcript": "カラカラですね頭悪いので歯の夜中の話題的に言うときついですね第91回アメリカのアカデミー賞ノミネート作品が8昨日の夜に発表になりましたとこの後ですねえーと梅田2歳未勝利予想ねライフワークとしている女性俺は彼女のノミネート ねこの結果という金の皆様と思う感じがしますからその話を買おうと思うんですがとにかく真北斗星に来れませんと話してんじゃないかな今日にセッションで待ってるって後のマーベルアメコミヒーローものも楽でありながらも社会的メッセージも強く含んだ作品でてことでブラックパンサーがでもここに入ってきたってのは結構っていう感じですねあとねママあのねゴールデングローブ賞でも車検証取ったボヘミアンラプソディとか",
            "confidence": 0.94305253
          }
        ]
      }
    ]
  }
}

参考

Session22でも文字起こししてみました。

nomusicnolife.hatenablog.com