ビデオ会議を音声認識で自動的に議事録を作成する仕組みをテストした話



# 概要

- ZoomやDiscordなどのビデオ会議システムで(半)自動的に議事録を作成する仕組みを作った
   - 現状はテキスト起こし機能のみ。勝手に要約して箇条書きにするとかまではさすがにできない。
- 以下のようなソフトウェアを組み合わせた
   - Windows
   - 各種ビデオ会議システム
   - InputからOutputに音声を出力する機能を持つ仮想オーディオデバイス
   - Webブラウザで動作する音声認識ウェブアプリ
- 簡単な評価などをメモ程度に

# 背景

ここ最近、在宅化の流れなどで急速に普及しているビデオ会議。自分たちでもこれまで毎週のように会っていた某アニメコンテンツの知り合いたちと週末にDiscord飲み会を楽しんでいて、割と話の内容が面白いので議事録を作ってくれている人がいるほどだったけど、ふとこれを自動化できないかと考えたのがきっかけ。

特に新規開発などの作り込みを伴う凝ったことをしているわけじゃなく「やってみたらなんとなくできた」レベルなのであくまで「仕組み」。役に立たないかもしれないけどちょっとした知見も得られたので文末にメモ程度に。

# 構築手順

以下のような手順で作成した。

## Windowsマシンの作成

今回はクラウド上に立ち上げたWindows Server 2016を使用。詳しい手順は割愛。ビデオ会議システムが導入できてインターネットに接続できればOK。

## 仮想オーディオデバイスのインストール

今回のシステムを構成するにあたって一番のキモとなる部分(多分)。ビデオ会議システムから音を拾い、それを音声認識ウェブアプリに投入する流れは以下のような感じ。

```
+---------------+                                    +------------------+
|ビデオ会議システム| --> [Input] ========= [Output] --> |     Webブラウザ    |
|オーディオ出力   |     |<--仮想オーディオデバイス-->|     |(音声認識ウェブアプリ)|
+---------------+                                    +------------------+
```

今回はWindowsで無料で使用できる[VB-CABLE](https://www.vb-audio.com/Cable/)を使用した(フリーウェアではなくドネーションウェアとのことなので、気に入ったら寄付しましょう)。InputとOutputそれぞれ1箇所があり、上記の構成を簡単に組める。何よりわかりやすい。インストールしてマシンを再起動すれば、コントロールパネルや各種アプリケーションの音声出力先/マイク設定から「CABLE Input」と「CABLE Output」が見えるようになる。

※クラウド上のWindowsをリモートデスクトップ接続経由でオーディオデバイスの設定をする場合、リモートデスクトップ接続設定で音を鳴らす先を手元のPCではなくリモートPC上を設定しないといけない。詳しくはまとめの項で。

## ビデオ会議システムの音声出力先を仮想オーディオデバイスに設定

任意のビデオ会議システムの音声出力先設定で、インストールしたVB-CABLEの「CABLE Input」を指定する。Discordの場合は設定画面の「音声・ビデオ」内にある。

<img width="329" alt="スクリーンショット 2020-05-11 11.52.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42078/e69c9ae3-da2a-51f1-82ab-9bfbcac1bc07.png">

これで、通常はPCのスピーカーから出てくる音が仮想オーディオデバイスに渡され、PC内部の別のアプリケーションからその音を拾う事ができるようになる。

## ブラウザで音声認識アプリを起動

今回はブラウザ経由でマイクからの入力を音声認識してテキスト化してくれる[Speechnotes](https://speechnotes.co)を使用(音声の解析に裏側でGoogleのエンジンを使っているらしい)。ここを開いて右上のマイクのアイコンをクリックすればすぐに音声認識が試せる。もちろん日本語に対応しており、右上のポップアップメニューで「日本語」を選択すればOK。

多くの場合は物理ハードウェアのマイクとなる音声入力ソースを、今回はVB-CABLEの「CABLE Output」にしよう。コントロールパネルなどで既定のデバイスとなっていないなど、手動で選択する場合はブラウザの設定から。Chromeの場合はカメラやマイクなどのデバイスが有効状態になるとアドレスバー右側にビデオカメラのアイコンが表示されるので、ここをクリックするとデバイスが指定可能。

<img width="332" alt="スクリーンショット 2020-05-11 12.02.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42078/502c453f-5250-badb-2650-a0bce3658d3b.png">

これであとは参加中のビデオ会議システム上で誰かが発言すれば、ブラウザ画面上に音声認識された文字列がどんどん表示されていくはず。

# 完成

Discordはもともとゲーム時のコミュニケーション用のツールであり、画面共有もゲームのアプリケーションなど任意のウインドウを指定する事ができて便利。この議事録作成マシンもブラウザ画面を画面共有して、参加者がリアルタイムに発言の生成状況を確認する事ができて便利だった。

<img width="1472" alt="discord3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42078/75e6af9a-551a-2da1-0446-97015bfcfd1d.png">

あとはずっとボイスチャンネルに入りっぱなしにしておけば、誰かが入って発言すれば勝手に文字が起こされて議事録が作成されていく。

# まとめ

使ってみて感じたことやわかったことなど。まとまってなくて見づらいけど箇条書きでずらずらと。

## ビデオ会議システム

- 音声出力先のデバイスを指定できるものである必要アリ(メジャーなやつならたいてい大丈夫だと思うけど)
- Discordは[音声通話の品質には定評があり](https://av.watch.impress.co.jp/docs/series/dal/1249614.html)、さらにノイズキャンセリング機能を使えば結構生活音が拾われなくなる。音声認識にも都合がいい環境が作りやすい。

## Windows

- 今回はWindowsを使ったけど、やはり気になるのはコスト。ビデオ会議が安定して動作するのであればLinuxでもいいかもしれない。
- 自分だけが使うなら自分のPCでやればよさそう。常時起動していれば別にクラウド上のWindowsにずっとDiscordのボイスチャンネル張らせる必要もなさそうだし。
- クラウドなど、遠隔地でWindowsを管理する場合はリモートデスクトップ接続を使用するのが一般的だろうけど、ここで接続する際はサウンドの出力先を「接続先PC」にすること！接続元PCで鳴らす設定だと、スピーカーやマイクの設定でインストールした仮想オーディオデバイスが表示されない状態になる(これに気づくまでちょっとハマってしまった…)

<img width="449" alt="スクリーンショット 2020-05-11 12.22.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42078/4415595a-c5e1-69e8-0adc-9547bfea3b3c.png">

- Windowsには標準で音声認識機能があるらしいけど未テスト。クラウド側で処理されないのであれば、センシティブな内容のテキスト化にはいいかも?

## 音声認識

- この手のものでよく利用されるのはGoogleドキュメントの音声入力機能だろうけど、すぐにマイク入力がオフになってしまうなど、放置させて使うにはちょっと難アリ。その点Speechnotesはマイクを有効状態にすればずっと待ち受けてくれるし、音声解析もGoogle謹製らしいので同程度の精度で使えて便利
- ただそれでも「多人数」で「ノイズ」もあり、各参加者のマイク入力品質(近かったり遠かったりレベルもバラバラ)も違うなど劣悪な環境だと音声認識が停止してしまう。やはり話者がひとりで静かな環境でしゃべるといった環境を想定した機能だろうし仕方ないところか。
- 音声認識の精度は最近のスマホも精度がいいので、文字起こししたいだけならわざわざこんな構成を組まなくても、手元のPCの脇にスマホを置けば似たような事できそう…