リアルタイムに音声認識して字幕をオーバーレイしてみた【Python】


TLを眺めていたら @1heisuzuki 氏が音声認識からWebカメラ映像への字幕合成までをChromeだけで実行するWebページの紹介をしているツイートが流れてきた.
tkinterを使ってより汎用的なシステムを作れるのではないか?と思い,雰囲気で再現してみました.

実行例

ソースコード

TranScriptoWindowにあります.

環境

  • Windows10
    tkinterの-transparentcolorがかなり環境依存なため,windows環境以外では動作しません.
  • Python 3.7
  • pyaudio 0.2.11
  • Google Cloud SDK

使用方法

$python transcriptowindow.pyを実行し,startボタンを押してPCに向かって話しかけるのみです.

機能

リアルタイムに音声認識した結果を字幕としてウィンドウにオーバーレイします.
起動したまま別のタブを操作でき,あらゆるコンテンツに字幕をつけたまま画面共有できるので,画面共有するオンライン会議に有効です.
見せたいウィンドウの横に自分のWebカメラのウィンドウを小さく表示すれば,顔と画面を同時に見せながら字幕も大きく表示することが可能です.

環境構築

Python環境の構築は各自お願いします.

Google Cloud Speech API


ここをクリック
基本的に
Google Cloud Speech APIのリアルタイム音声認識は使い物になる精度なのか?
の通りに進めれば構築できますが一応.

(1)
GoogleCloudPlatformにログインしてプロジェクトを適当に作成.

コンソール上部の"プロダクトとリソースの検索"からCloud Speech-to-Text APIを有効化.
Cloud Speech-to-Text APIは一定量無料で利用でき,自分で設定しない限り請求されることはない(Google曰く)ですが,クレジットカード情報の登録が必要な点に注意!
(2)
GCPのページより"Google Cloud SDK のインストーラ"をDL&起動.何も変更せずにSDKをインストールします.exeファイルを実行するとコマンドプロンプトが立ち上がるので,誘導に従って設定します.


設定が終わったら

C:\Users\Username\AppData\Local\Google\Cloud SDK>gcloud auth application-default login

によりデフォルト認証設定を行います.

設定を誤った場合や,変更したい場合は

gcloud init

で再設定可能です.

サービスアカウントキーの取得

GCPコンソールの「APIとサービス > 認証情報」からサービスアカウントキーを作成します.





jsonファイルをダウンロードしたら,コマンドプロンプトでこのjsonファイルを環境変数として定義.

set GOOGLE_APPLICATION_CREDENTIALS=C:\path\to\credential.json

これでGCPに関する設定は終了です.

ライブラリのインストール

pip install google gcloud google-auth google-cloud-speech grpc-google-cloud-speech-v1beta1
pip install pyaudio

ただし,Windows環境ではpyaudioの依存ライブラリの関係でpip install pyaudioではエラーを起こす場合があります.

$ pip install pyaudio
Collecting pyaudio
  Downloading PyAudio-0.2.11.tar.gz (37 kB)
Using legacy setup.py install for pyaudio, since package 'wheel' is not installed.
Installing collected packages: pyaudio
    Running setup.py install for pyaudio ... error
    ERROR: Command errored out with exit status 1:
     command: 
    (中略)
    Complete output (9 lines):
    running install
    running build
    running build_py
    creating build
    creating build\lib.win-amd64-3.7
    copying src\pyaudio.py -> build\lib.win-amd64-3.7
    running build_ext
    building '_portaudio' extension
    error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/
    ----------------------------------------
ERROR: Command errored out with exit status 1: 'c:\users\Username\appdata\local\programs\python\python37\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\Username\\AppData\\Local\\Temp\\pip-install-5i7rg8qb\\pyaudio\\setup.py'"'"'; __file__='"'"'C:\\Users\\Username\\AppData\\Local\\Temp\\pip-install-5i7rg8qb\\pyaudio\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\Username\AppData\Local\Temp\pip-record-9jxqfhqn\install-record.txt' --single-version-externally-managed --compile --install-headers 'c:\users\Username\appdata\local\programs\python\python37\Include\pyaudio' Check the logs for full command output.

これを解決するため,https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio より自分の環境にあったバージョンの.whlファイルをダウンロードしてインストール.

$ pip install c:\Users\Username\Downloads\PyAudio-0.2.11-cp37-cp37m-win_amd64.whl
Processing c:\users\Username\downloads\pyaudio-0.2.11-cp37-cp37m-win_amd64.whl
Installing collected packages: PyAudio

以上で環境構築は終了です.transcriptowindow.pyを実行できるはずです.お疲れさまでした.
エラーが出る場合は, PCがマイク入力を正常に認識し,Pythonがアクセスできているか確認するなどしてみてください.

先行事例と比較

(1)
@1heisuzuki 氏による音声認識からWebカメラ映像への字幕合成までをChromeだけで実行するWebページ
https://1heisuzuki.github.io/speech-to-text-webcam-overlay/
は,ユーザは面倒な設定一切なしにGoogleChromeからアクセスするだけでWebカメラからの出力に字幕をオーバーレイできるほか,透明度,フォントサイズといった各種変数の変更,ログのダウンロード,翻訳機能を備えていて非常に多機能です(執筆当時).

(2)


動画内ではリップリードに関する言及がありました.若干用意するものが多いですが,非常に見やすいです.

(3)


今回作成したシステムは, 環境構築編を見ていただければわかるように,上と比較して圧倒的に面倒で,導入難度が高いです.本格的に使用する場合,APIの無料枠を超えて料金が発生する可能性もあります.
また,これは自分ではどうもできなかったのですが,このような問題を抱えています.

しかし,一度環境構築してしまえば(2)と同程度かそれ以上に綺麗に字幕を表示でき,(ログの保存や,翻訳機能は実装していませんが)操作上の自由度は一番高くなっている(のではないかと思いたい...).
導入の難しささえどうにかなれば割と使いやすいシステムになったかなとは思います.

まとめ

ねとらぼの記事によると,iPhoneとmacで同じような機能を再現した方もいるようです.
使いやすいものを導入してオンラインチャットしてみてはいかがでしょうか.
私はチャット相手がいないので使いませんが()