https://d226lax1qjow5r.cloudfront.net/blog/blogposts/dual-channel-transcription-split-recording-dr/split-recording-dev.png

スプリット・レコーディングによるデュアル・チャンネル・トランスクリプション

最終更新日 May 12, 2021

所要時間:2 分

当社の Voice APIの一部として、Nexmoでは通話の一部(またはすべて)を録音し、通話が完了した時点で音声を取得することができます。本日、この機能の新たな強化点である分割録音を発表いたします。分割録音により、通話のテープ起こしなどの一般的な作業がさらに簡単になります。

スプリットレコーディングを有効にすると、ダウンロードされたレコーディングには、左チャンネルに参加者A(Aliceとします)、右チャンネルに参加者B(Bobとします)が含まれます。これにより、1人の参加者のオーディオを簡単に扱うことができます。

この投稿では、簡単なユースケースを説明する。Aliceは自分の口座について調べるために銀行に電話し、Bobはその電話に対応するカスタマーサポートです。

通話をステレオで録音する

アリスが銀行から提供された番号に電話をかけると、Nexmoが電話に出て、紹介メッセージを流し、銀行の実際の電話番号につなぎ、通話中の音声をすべて録音します。これを実現するには、次のようにします。 Nexmoコール・コントロール・オブジェクト(NCCO):

[
  {
    "action": "talk",
    "text": "This call may be recorded for security and quality purposes"
  },
  {
    "action": "record",
    "eventUrl": ["https://example.com/recording"]
  },
  {
    "action": "connect",
    "eventUrl": ["https://example.com/events"],
    "from": "447700900000",
    "endpoint": [
      {
        "type": "phone",
        "number": "447700900001"
      }
    ]
  }
]

このNCCOの重要な部分は recordアクションで、音声を録音し、通話が完了したらURLを https://example.com/recordingに送信します:

{
  "action": "record",
  "eventUrl": ["https://example.com/recording"]
}

デュアルチャンネル録音を有効にするには、このアクションを更新する必要があります。 "split" : "conversation"を追加する必要があります:

{
  "action": "record",
  "split" : "conversation",
  "eventUrl": ["https://example.com/recording"]
}

それだけだ!通話録音を 通話録音をを取得すると、左チャンネルにアリスの音声が、右チャンネルにボブの音声が録音されます。

IBM Watsonによる通話録音

音声ファイルが手に入ったら、次はテキストを書き起こします。デュアルチャンネルオーディオを受け入れ、別々に書き起こしてくれるプロバイダーはあまりありません。 ffmpegを使ってトラックを2つのモノラルトラックに分割し、別々に書き起こします。 IBMの音声テキスト化API.

オーディオファイルを2つのファイルに分割するには、ターミナルで以下のコマンドを実行します。 インストール ffmpegをインストールする必要があるかもしれません):

ffmpeg -i YOUR_AUDIO_FILE.mp3 -map_channel 0.0.0 left.mp3 -map_channel 0.0.1 right.mp3

さて、2つの音声ファイルが手に入ったので、それをWatsonに送り、JSONとしてテキストを返してもらおう。これを行うには、お好きな言語を使うことができますが、最も手っ取り早い方法は curl:

curl -X POST -u "USERNAME:PASSWORD" -H 'Content-Type: audio/mpeg' "https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?timestamps=true" --data-binary @left.mp3 > left.json curl -X POST -u "USERNAME:PASSWORD" -H 'Content-Type: audio/mpeg' "https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?timestamps=true" --data-binary @right.mp3 > right.json

これで、以下のような2つのJSONファイルができる:

{
   "results": [
      {
         "alternatives": [
            {
               "timestamps": [
                  [
                     "my",
                     3.83,
                     3.94
                  ],
                  [
                     "name",
                     3.94,
                     4.18
                  ],
                  [
                     "is",
                     4.18,
                     4.31
                  ],
                  [
                     "Alice",
                     4.31,
                     4.96
                  ]
               ],
               "confidence": 0.923,
               "transcript": "my name is Alice "
            }
         ],
         "final": true
      },
      ...
    ]
}

会話を構築する

タイムスタンプを要求したので、会話のタイムラインを再構築することができる。ここでも、お好きな言語を使ってください(私はPHPを使います)。手順は以下の通りだ:

  • JSONをループし、すべてのエントリーを1つのリストにマージする。

  • 開始タイムスタンプに基づいてエントリーを並べる。

  • タイムスタンプ、名前、テキストが表示された会話を順番に出力する。

これを実行するPHPコードは以下のようになる:

<?php

$left = json_decode(file_get_contents('left.json'))->results;
$right = json_decode(file_get_contents('right.json'))->results;

function mapEntry($input, $name, $conversation = []) {
    foreach ($input as $entry){
        $text = $entry->alternatives[0];
        $conversation[] = [
            'from' => $name,
            'ts' => $text->timestamps[0][2],
            'text' => $text->transcript
        ];
    }
    return $conversation;
}

$conversation = mapEntry($left, 'Alice');
$conversation = mapEntry($right, 'Bob', $conversation);

usort($conversation, function($a, $b) {
    return $a['ts'] > $b['ts'];
});

foreach ($conversation as $c) {
    echo '['.$c['ts'].'s] '.$c['from'].': '.$c['text'].PHP_EOL;
}

このコードを実行すると、私たちの会話をそのまま見ることができる:

[0.63s]  Bob: welcome to the call what's your name
[3.94s]  Alice: my name is Alice
[7.05s]  Bob: how are you feeling today
[10.17s] Alice: great thank you
[11.81s] Bob: how can I help
[13.74s] Alice: I'd like information about my account
[20.1s]  Bob: thank you for the information I'm connecting you to my colleague ashley now

分割録音でテープ起こしが簡単に

Nexmoの新しいスプリット・レコーディング機能では、2人の参加者をそれぞれの音声チャンネルで録音することができ、テープ起こしが簡単になります。この機能を有効にするには、あなたのチャンネルに "split" : "conversation"を追加するだけです。 recordアクションに追加するだけです。

スプリット・レコーディングの詳細については、次の記事をご覧ください。 製品ブログ記事または ドキュメントをご覧ください。.

シェア:

https://a.storyblok.com/f/270183/384x384/1c8825919c/mheap.png
Michael Heapヴォネージの卒業生

マイケルはポリグロット・ソフトウェア・エンジニアであり、システムの複雑性を軽減し、より予測可能なものにすることに尽力している。さまざまな言語やツールを使いこなし、ユーザーグループやカンファレンスで世界中の聴衆と技術的な専門知識を共有している。日々、マイケルはVonageの元開発者支持者であり、あらゆるテクノロジーについて学び、教え、書くことに時間を費やしている。