見出し画像

【音声認識】サービス別の文字起こし結果を比較 長所・注意するポイントは?

こんにちは、情報企画部の秋田です。プレゼンで話している内容を音声認識で字幕にして、画面内に表示する「プレゼン自動字幕」について、いろいろな方法を試してみたので、ご紹介していきたいと思います。

【全4回】「自動字幕」お手軽設定からセキュリティも解説

このシリーズでは、プレゼンに自動字幕をつけるお手軽方法やセキュリティ面での検討、javascriptでの自作方法など、目的に分けて4回でお話しします。もしよろしければ、第1回もお読みくださいね。

1:プレゼン自動字幕の簡単な設定方法
2:(本エントリ)音声認識のサービス比較
3:盗聴されない?セキュリティを解説!

4:リモート会議で字幕をつける方法

今回試した方法の紹介

Googleのスマホの音声文字変換のほかにもいくつか試しました。
具体的には次の五つです。
 ①javascriptのWeb Speech API
    ②Googleドキュメント
    ③Word(Microsoft 365)
    ④Power Point(Microsoft 365)のプレゼンテーション
    ⑤Power Point(Microsoft 365)の編集機能

 芥川龍之介の杜子春の書き出しを読み上げた音声を使って、これらのサービスの雰囲気を紹介します。また秋田の主観に基づいた良い点と注意する点も紹介します。使い方を知らないだけで、注意点と捉えてしまっていたらごめんなさい。修正します。

読んだ文章
 或春の日暮です。
 唐の都洛陽(らくやう)の西の門の下に、ぼんやり空を仰いでゐる、一人の若者がありました。
 若者は名は杜子春(とししゆん)といつて、元は金持の息子でしたが、今は財産を費(つか)ひ尽(つく)して、その日の暮しにも困る位、憐(あはれ)な身分になつてゐるのです。

①Web Speech API

画像7

 「Web Speech API」というのは、Webページ上で音声認識ができるJavaScriptのAPIです。このページの最後にソースコードを紹介しています。これを、たとえばSpeech_to_text.htmlというファイル名で保存してGoogle chromeで読み込めば準備完了です。
 「Clik to Start」ボタンをクリックして、マイクの使用許可をクリックすると変換ができるようになります。

画像3

変換結果
ある春の日暮れです
唐の都洛陽の西の門の下にぼんやり空を仰いでいる一人の若者がありました若者はノアと思春と言って元は金持ちの息子でしたが今は財産を使い尽くしてその日の暮らしにも困るくらい哀れな身分になっているのです

良い点
 無料であることでしょう。プログラミングができる人なら、自分好みのソフトを作ることができることも長所ですね。プログラミングは「Webページでブラウザの音声認識機能を使おう」のサイトで丁寧に説明をしてくれています。また鈴木 一平さんのサイトにデモが紹介されていますので、凝るなら参考になります。
 今のところ(2021年2月)PC版とandroid版のchromeでしか使えないようです。

注意する点
 今のところWeb Speech APIそのものの短所は見当たりません。
 ただし、今回紹介しているサンプルコードには短所があります。今回は、Web Speech APIのページのサンプルコードのEXAMPLE4に、改行機能を入れ、下からのスクロールにしました。
 最初は元気に変換してくれますが、10分くらいたつと勝手に止まります。調べていませんが、chromeが変換結果の表示に使っているメモリーがパンクしているのかもしれません。またこのスクリプトは変換を開始するときに、これまでの変換結果を消しますので、開始前に変換結果を別のファイルにコピーする必要があります。

②Google ドキュメント

画像8

 Googleドキュメントを開き、上のメニューの「ツール」を開き「音声入力」をクリック。マイクのアイコンが出ますので、それをクリックすると変換ができるようになります。

画像1

変換結果
ある春の日暮れです頭の落葉の西の門の下にぼんやり空を仰いでいる一人の若者がありました若者は水泡と思春と言って元は金持ちの息子でしたが今は財産を使い尽くしてその日の暮らしにも困るくらい哀れな身分になっているのです

良い点
 Googleのアカウントが必要ですが、これも無料です。自動的に保存してくれます。修正も可能です。

注意する点
 常にGoogleドキュメントを選択している状態でないと変換してくれません。例えば変換を開始したあとPower Pointをクリックすると、そのとたん変換が停止します。他の作業をしながら音声変換できないのは、少し不便です。
 話者の変更に対応が苦手なようで、会議のようにいろんな人が話す場合、人が変わると変換しなくなることが多々あります。

Microsoft 365 (Office365)

 Office 365の2018年5月23日(現地時間)にリリースしたバージョン 1804で、Windowsデスクトップ版のWord、PowerPoint、Outlookの3製品で音声入力がサポートされました。
 ※参考 https://forest.watch.impress.co.jp/docs/news/1125012.html
 Microsoftのサイトに使用方法の案内があります。
 そこで、Word、PowerPointの字幕作成を紹介します。

③Word(Microsoft 365)

MS Wordを開き、ホームリボンの右端にある「ディクテーション」ボタンをクリックして、マイクに赤い印が点くと変換ができるようになります。

画像6

変換結果
ある春の日暮れです 唐の都洛陽の 西之門の下にぼんやり空を仰いでいる1人の若者がありました 若者は縄杜子春といっても元は金持ちの息子でしたが今は財産を使い尽くしてその日暮らしにも困るぐらい哀れな身分になっているのです

良い点
 フォントや段落など事前に文章の体裁を設定しておけば、見栄えのする字幕ができます。修正も可能です。次回ご紹介するセキュリティの観点からも、安全に使えそうです。

注意する点
 有償のソフトなのでお金がかかります。でも今時はOffice入りのパソコンを買う人が多いと思うので大きな短所ではないでしょう。
 これもWordを使っていないと変換してくれません。例えば変換を開始したあとWebブラウザーをクリックすると、そのとたん変換が停止します。さらにやや不便なのは、変換を開始したあとに別のWordをクリックすると、
 これも話者の変更に対応が苦手なようで、会議のようにいろんな人が話す場合、人が変わると変換しなくなることが多々あります。

④Power Point(Microsoft 365)プレゼンテーション

 Power Pointは二つの方法で字幕をつけることができます。1つはプレゼンテーション中の字幕です。映画の字幕のように、発表中のスライドの下部に字幕がでます。もう1つはシートの編集の状態で音声入力をすることができます。

 プレゼンテーションの字幕表示を紹介します。プレゼンテーションを開始し、画面を右クリックして「字幕の開始」をクリックします。すると変換ができるようになります。

画像4

変換結果
***ごめんなさい、勉強不足で保存方法がわかりません***

良い点
 スライドの下に字幕が表示されるので、視覚的に読みやすいです。

注意する点
 有償のソフトなのでお金がかかります。これはWordと同じです。今時はOffice入りのパソコンを買う人が多いと思うので大きな短所ではないでしょう。
 こちらも音声認識はプレゼンを行っているときのみ有効です。プレゼンをいったん止めてノートを確認をしたり、WEBの画面を出したりすることがあると思います。この場合、プレゼン画面を停止した時点で変換が停止します。このため再開時には字幕開始の指示が必要です。
 また、字幕を保存する方法がわかりませんでした。字幕の表示形式は設定できるのですが、過去の字幕を見るとか、字幕を保存するとかの方法がわかりませんでした。

⑤Power Point(Microsoft 365)編集機能

 プレゼンテーションの編集画面を使った字幕を紹介します。
 Power Point開き、ホームリボンの右端にある「ディクテーション」ボタンをクリックして、マイクに赤い印が点くと変換ができるようになります。Wordと同じです。

画像5

変換結果
ある春の日暮れです 唐の都洛陽の西の門の下にぼんやり空を仰いでいる1人の若者がありました 若者は縄杜子春と言って元は金持ちの息子でしたが今は財産を使い尽くしてその日の暮らしにも困るくらい哀れな身分になっているのです

良い点
 Wordと同じです。フォントや段落など事前に文章の体裁を設定しておけば、見栄えのする字幕ができます。修正も可能です。

注意する点
 短所もWordと同じです。話者が変わる場合は試していません。ごめんなさい。

Web Speech APIのソースコード

 おまけです。恥ずかしいですがサンプルにちょっと手を入れたソースを紹介します。
 これを、たとえばSpeech_to_text.htmlというファイル名で保存。これをGoogle chromeで読み込めばリアルタイムで字幕を作ることができます。
 コメント行で使い方説明をいっぱい入れました。長いですが、//は不要な行なので、実質50行程度でしょうか。

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <title>Speech Recognition Examples</title>
<!--

	https://qiita.com/hmmrjn/items/4b77a86030ed0071f548

 https://qiita.com/hmmrjn/items/be29c62ba4e4a02d305c
 https://so-zou.jp/web-app/tech/programming/javascript/media/audio/web-speech-api/


 https://wicg.github.io/speech-api/#speechreco-result
   EXAMPLE4
   Using continuous speech recognition, showing final results in black and interim results in grey.

-->
	<style type="text/css">
	#scroll {
		position: absolute;
		bottom: 0;
		border:dotted;
		padding:10px;
		left: 200px;
	}

	</style>
</head>

<body>
 <button id="button" onclick="toggleStartStop()"></button>
	<div id="scroll">
		  <span id="final_span"></span>
 		<span id="interim_span" style="color:grey"></span>
	</div>


	<script>

//音声認識インスタンスを定義
   var SpeechRecognition = SpeechRecognition || webkitSpeechRecognition
   //SpeechRecognition() コンストラクタの作成
   let recognition = new SpeechRecognition();
   //認識インスタンスの他のいくつかのプロパティも設定します。
   //SpeechRecognition.lang: 認識の言語を設定します。これを設定することは良い習慣であるため、推奨されます。
   recognition.lang = 'ja-JP';
   //認識が開始されるたびに連続した結果をキャプチャする (true) か、または単一の結果だけをキャプチャする (false) かを制御します。
   recognition.continuous = true;
   //音声認識システムが中間結果を返すかどうかを制御します(true)false。中間結果は、まだ最終的な結果ではありません(たとえば、SpeechRecognitionResult.isFinalプロパティはfalseです)。
   recognition.interimResults = true;
   //結果ごとに返される代替候補数を設定します。これは、結果が完全に明確ではなく、ユーザーが正しいものを選択できるように代替候補のリストを表示したい場合などに便利な場合があります。1つだけ指定します(これは実際にはデフォルトです)。
   SpeechRecognition.maxAlternatives = 1;

		//onend プロパティは、音声認識のサービスが切断された後 (endイベントが発生した時) に、実行するイベントハンドラー
		//
		reset();
	  recognition.onend = reset;

		//onresult プロパティは、音声認識サービスが正しく言葉や文法が認識できアプリに通信した時に、実行するイベントハンドラー
		recognition.onresult = function (event) {
			// 最終の認識結果
	  	let final = "";
			// 暫定の認識結果
			let interim = "";
	  	for (var i = 0; i < event.results.length; ++i) {

				//isFinalは、最後の認識結果のときはtrue。値がfalseの場合はまだ変更される可能性がある
				if (event.results[i].isFinal) {
     		final += event.results[i][0].transcript + '<br>';
   		} else {
   			interim += event.results[i][0].transcript;
	  		}

			}
			final_span.innerHTML = final;
 	  interim_span.innerHTML = interim;
			// console.log('Confidence: ' + event.results[0][0].confidence);
			// console.log('final: ' + final);

		}

		function reset() {
   	recognizing = false;
   	button.innerHTML = "Click to Speak";
 	}

   //音声認識の開始・終了のトグルボタン
		function toggleStartStop() {
   	if (recognizing) {
     	recognition.stop();
     	reset();
				// console.log('Stop to recognition.');
			} else {
     	recognition.start();
     	recognizing = true;
     	button.innerHTML = "Click to Stop";
     	final_span.innerHTML = "";
     	interim_span.innerHTML = "";
			  //	console.log('Ready to receive speech.');
   	}
 	}
	</script>

</body>
</html>

 というわけで、いろいろ試しました。
 使う方法は、使う場所、話す内容の重要性を加味して考える必要がありそうですね。

次回に続く

 簡単に導入できるこのセットですが、セキュリティ面はいかがでしょう? 次回は、文字に変換される音声データの取り扱いなどをまとめていきます。

(情報企画部・秋田仁士)