変わりモノがいい!

変わりモノには価値がある・・・ハズ?

音声の文字起こしにチャレンジ!

陽気な引きこもり生活に慣れてきました。

昨年の12月に体調を崩し、2月に手術し、そうこうしていると武漢ウイルスの影響で自粛要請が始まり、今では陽気な引きこもり生活にすっかり慣れてしまいました。
これはこれで特に不満もないのですが、唯一のデメリットは人との会話が少なくなること。
さてこれらかどうするかな、と思っていた時に、以前、一緒に仕事をさせて頂いていたコンサルタントから声をかけて頂き、ZoomでWeb会議をすることとなりました。

f:id:ken2017:20200529063603p:plain

そのコンサルタントもクライアントが武漢ウイルスの影響で対面でのコンサルが全て無くなりWebでのリモートコンサルになったとのことです。
今後はZoomやMicrosoftのTeamsを使ったWebコンサルが多くなる、多くしていかないといけないとのことでした。
それを一緒に進めていくメンバでのWeb会議とのことでした。
変化に対応しないといけないとはいえ、少々寂しい気持ちになりましたね。
対面での良さは、表情や目の動き、振る舞いで相手の心の動きが判り悩みや課題を共有しやすいこと、懇親会などでより深く知り合えることがあります。
これらのメリットを放棄してのWeb会議への対応になります。
でも、ニーチェも、脱皮できない蛇は死ぬ、と言っていますので死なないように変化していかないといけないですね。

Zoomを使いました。

初めてZoomを使いました。 感想は、非常に使いやすい、でした。 会社で使っていたTV会議システムは、会議のたびにトラブり、定刻に開始できないことが多々ありました。
Zoomに関してはセキュリティーの問題があるとの報道もありますが、対策が進められているとのことですので期待したいと思います。
ZoomでのWeb会議の結果、ZoomやTeamsを使ってのコンサルの仕方を模索することになりました。 色々と検討し決めていかないといけないことがあります。
Web会議で久々に多くの人(参加は僕を入れて4人でしたが)と話したためか刺激を受け、折角なので何か新しいことをやろうと思い、記録した動画の音声の文字起こしにチャレンジすることとしました。
昔、と言っても20年以上前ですが、会社で開発関連の大切な会議をする時には当事者である僕たちは録音しながら二人で速記し、会議後に録音テープから文字起こしをやっていました。
当時は耳で聞き、それを書き出す、という原始的な方法でやっていました。
今は、GoogleやAmazonがそういうサービスを提供しているようなので、それを使っての文字起こしにチャレンジしてみました。 4つか5つの候補の中からネット情報を参考にしてGoogleのCloud Speech-to-Text APIを使うこととしました。

f:id:ken2017:20200529065422p:plain

使えるようになるまでに、えらく手間取りました。

いつも思うのですが、設定はなぜ1回で上手くいかないのでしょうかね。
今回も悩みに悩みました。
ということで、同じようなことをやってみようと思っている人と自分自身の備忘録として記録することとします。

まず、
1)やりたいこと:ZoomやTeamsのWeb会議の動画の文字起こし
2)動画から文字起こしまでの流れ:Zoomで録画⇨iMovieでオーディオファイルに変換⇨
                Cloud Speech-to-Textで文字に変換⇨
                自分で文字ファイルの内容を編集
このための準備としては、Google Cloud Speech-to-Text APIの導入をしないといけません。

まずは、Googleアカウントを作りましょう。
Googleアカウントを持っている人でも、個人用のアカウントとは別にアカウントを作っておいた方が良いと思います。
作り方はコチラ。 ここは悩まなくて大丈夫です。

www.howtonote.jp

Googleアカウントを作ったら次はAPIを導入しましょう。
Google Cloud Speech-to-Text APIの導入方法はコチラ。
手順としては、
1)Google Cloud Speech APIを有効化します。
2)API認証情報を作成します(サービスアカウントキーを作成します)。
3)Google Cloud ShellでAPI認証します。

qiita.com

上の動画には、使うところまでの手順が示されていますが、まずはAPI認証までの手順を済ませます。
ここまでのところでの注意事項としては、環境変数の設定のところで、JSONファイル名を入れるようになっていますが、フルパスでの指定が必要というところです。
$ export GOOGLE_APPLICATION_CREDENTIALS=[3.で取得したJSON名].json
となっていますが、[3.で取得したJSON名].jsonは、Macの場合は、例えば以下のようになります。
/Users/yamadatarou/Speech/jsonfilename.json
yamadatarouさんのSpeechというフォルダーにあるjsonfilename.jsonというファイルを設定しました。
Windowsの場合は、C:¥から始まりますが、Macでは/Users/から始まるんですよね。

これでGoogle Cloud Speech-to-Text APIの導入ができました。

次に文字起こしのためのPythonスクリプトの準備をしましょう。
ここで行うことは、仮想環境の構築、音声認識の環境構築、Pythonスクリプトのインストールになります。
仮想環境の構築と音声認識の環境構築については以下のURLに説明がありますのでご参考。
仮想環境の構築としては、virtualenvをインストール、
音声認識の環境構築としては、portaudio、pyaudioのインストールを行います。

qiita.com

Pythonスクリプトの例が以下のURLにあります。
今回は、6.文字起こし実行Pythonスクリプト、にあるコードを使いました。

qiita.com

ここにあるPythonスクリプトを、transcribe.pyという名前で、上で作った仮想環境に保存しましょう。

ここまできたら音声ファイルをGoogle cloud Storageにアップロードします。
手持ちのwavファイルを準備してください。
適当なファイルがない場合にはパソコンのマイクを使って自分の音声を録音したファイルを準備してください。
音声データのアップロードの仕方は、下のURLの5.音声データのアップロードに手順が書いてありますのでご参考。

qiita.com

最初は悩むかもしれませんが、要は、Google cloudのStorageのところにブラウザを選択してバケットを作成し、そこに音声データをアップロードする、ということで、一度できるようになれば2度目からは悩むことはなくなります。

これで準備は終わりました。
さて実行してみましょう。
実行は、Macのターミナルを起動し、上で作った仮想環境に入り、以下の命令を実行します。
python transcribe.py gs://バケット名/音声データ名.wav
結果は?
見事にエラーが出ました。
実は、このコード、英語用になっていまして、日本語対応にするには
language_code='en-US') を
language_code='ja-JP') に変えましょう、となっていましたので変えました。
実際には、それだけでは上手くいきませんでした。
理由は、このコードがファイル形式がflacに対応したものでwav対応になっていなかったからです。
wav対応にするには、
encoding=enums.RecognitionConfig.AudioEncoding.FLAC, を encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16, に変える必要があります。
その他にも、
sample_rate_hertz=16000, にサンプリング周波数を設定する必要があります。
このためには、wavファイルの詳細データを調べる必要があります。
wavファイルの詳細を調べるにはsoxを入れて、そのときについてくるplayコマンドを使います。
soxの入れ方は以下のURLに手順が書いてありますのでご参考。

sox.sourceforge.net

仮想環境に音声データファイル(wavファイル)を置き、ターミナルから以下のコマンドを打てばファイルを再生しながらファイル情報がターミナル上に表示されます。
例えばこんな感じで。

asano.wav:
File Size: 4.63M     Bit Rate: 768k
Encoding: Signed PCM 
Channels: 1 @ 16-bit   
Samplerate: 48000Hz      
Replaygain: off         
Duration: 00:00:48.19

実はここまでやっても上手くいきませんでした。
どうもGoogle Cloud Speech-to-Text APIはモノラル対応ではないかと思います。
ステレオ形式のファイルは変換しても何も変換できず(空ファイルができました)、モノラル形式のファイルは上手く変換できました。
ファイル形式がモノラルであることを示すために、transcribe.pyのコードの中のlanguageの行の前に以下の記述を追加しました。
audio_channel_count=1,
そしてモノラルのwavファイルをネットから探して試してみました。
結果は?
成功です。
それがコレ。


asanotomomi

変換結果が以下です。

浅野友美ですの東京株式市場で日経平均株価は小幅続伸となっています終わりには昨日に比べ22円72銭高の11088円58銭でした東証1部の値上がり銘柄数は1146台して値下がりは368変わらずは104銘柄となっています
ここでプレゼントのお知らせですこの番組では毎月発行のマンスリーレポート4月号を抽選で10名様にプレゼントいたしますお申込みはお電話で東京レーサー1レ78373レ3レ1レ78373まで以上番組からのお知らせでした

見たらわかりますが、文章の区切りは認識されません。 また、誤認識もあります。
従って、議事メモとするには手を入れる必要があります。
が、十分使えるレベルと思います。

以上、悩みながら紆余曲折し、ここまできました。
なんとなくですが、コツが掴めたような気がします。
ここまでこれたので次は本番を想定しての練習をしてみようと思います。
(注意は、Google Cloud Speech-to-Text APIは無料期間を超えると有料ということです)

では、また。

(参考情報)
音声データのサンプルです。

www.arky.co.jp

 

プライバシーポリシー お問い合わせ