Close
Tutorial

AUTOMATIC TRANSLATION SUBTITLE SYSTEM MADE WITH TOUCHDESIGNER For Intermediate


 2021年12月11日(土)、MUTEK.JP × Derivative共催によるTouchDesignerワークショップが行われ、講師を担当させていただきました。
ワークショップで実施した「自動翻訳ツールの作り方」について紹介したいと思います。

 

デモの概要

 
今回のワークショップにあたり、用意したサンプルファイルは以下です。
 

・サンプルファイル

 
この記事では、上記のサンプルファイルを元に解説していきます。
自分のPCにダウンロードしてからお読みください。
 
つづいて、各ファイルについて説明します。
 
1_pyaudio.py
最初に実行するファイルです。モジュールが動作するかどうかを.wavファイルを再生してみて確認します。

 

2_speech_fromaudio.py

2番目に実行するファイルです。Cloud Speech-to-Text APIを活用して、音声から文字に起こす機能を試します。

 

 3_speech_jp.py
マイクで拾った音を日本語で書き出します。
 
   
4_osc.py
PythonからTouchDesignerにテキストを送ります。
 
5_speech_jp_osc.py
マイクで拾った音を日本語で書き出し、結果をOSCでTouchDesignerに送ります。
 
6_trans_test.py
あらかじめ書き込んである「次は日本語を英語に翻訳します」という文章を英語に翻訳します。
 
7_speech_jp_to_en_osc.py
マイクの音を日本語に文字化した結果を英語に翻訳し、TouchDesignerに確定した英語を送ります。
 
8_speech_jp_to_en_osc2.py
マイクの音を日本語に文字化した結果を英語に翻訳し、TouchDesignerに確定前の日本語と、確定した日英の結果を送ります。
 
sample_1280x720.toe
TouchDesignerのプロジェクトファイルです。
TouchDesignerライセンスを持っていない方はこちらを使用してください。
 
sample_1920x1080.toe
TouchDesignerのプロジェクトファイルです。
TouchDesignerライセンスを持っている方はこちらを使用してください。
 
particle.toe
TouchDesignerのプロジェクトファイルで使用しているエフェクトの作り方を順を追ってまとめています。
 
今回のシステムは以下のような構成で実現しています。

TouchDesignerがフロント周りを処理し、Pythonはコンソールで動いています。PythonはCloud Translation APIとCloud Speech-to-Text APIの制御を行い、そこで得た結果をOSCを使ってTouchDesignerに送っています。

 

つづいて、詳細に入っていきましょう。
 
 

Pythonの環境を用意

Pythonのサイトからインストーラーをダウンロードし、現時点の最新版を入れます。

Add Python to environment variables」にチェックが入っていることを確認し、インストールしましょう。これをチェックしておかないと、後で自分でパスを通す必要があり面倒です。

インストールしたら、念のためバージョンを確認しておきましょう。

PCの左下にあるスタートボタンで右クリックし「Windows PowerShell (管理者)」をクリックし、PowerShellを立ち上げます。

以下のコマンドを入力し、実行してみます。

python -V

私の場合、Python 3.10.1を入れたので以下のように表示されました。

Python 3.10.1
 
 

Google Cloud Platformの環境を用意

今回は、GoogleのCloud Speech-to-TextとCloud Translation APIを使うので、Google Cloud Platformの設定を行います。まずGoogleアカウントを用意します。
Google Cloud Platformにアクセスしてプロジェクトを作成します。

ロゴの横にある「プロジェクトの選択」をクリック。

「新しいプロジェクト」をクリック。

「プロジェクト名」に名前を入れます。
今回は「TD DEV」としました。

続いて、Google Speech-to-Text APIを有効にします。

ページ上部の検索ボックスに「Speech-to-Text」と入れて、出てくるリストの中から「Cloud Speech-to-Text API」を選択。

「有効にする」ボタンを押します。

その後、「認証情報」のページに移動します。「認証情報」のページに来たら、「認証情報を作成」ボタンを押します。

「ウィザードで選択」を選びます。

「アプリケーションデータ」をチェックし、「Compute Engine、Kubernetes Engine、App Engine、Cloud Functions でこの API を使用する予定はありますか?」の部分は「いいえ、使用していません」をチェック。「次へ」ボタンを押します。

「サービスアカウント名」は何でも良いのですが、ここでは「TD-DEV-TEST」としました。

つづいて、「作成して続行」をクリック。
「ロールを選択」のところは「オーナー」を選びます。

「続行」ボタンをクリックします。

「完了」ボタンを押します。

「キー」のタブへ移動します。

「鍵を追加」をクリックし、「新しい鍵を作成」を選び、「キーのタイプ」を「JSON」にし「作成」ボタンを押すとJSONファイルがダウンロードされます。

JSONファイルは、サンプルファイルのディレクトリ(/td_speech_to_text)直下に置いてください。
このJSONファイルをPythonに読みこむことによってAPIサービスを使うことができます。
つづいて、Cloud SDKをインストールします。

Cloud SDK のインストーラ」のテキストリンクをクリックし、インストーラをダウンロード。PCにインストールてください。

 
以上で、Google Cloud Platformの設定は終了です。
 
 

PCの環境を作る

最新のPythonだとCloud Speech-to-TextとCloud Translation APIで使われているモジュールのPyAudioが動かない(*)ため、有志の方が作ってくれている非公式版を使います。
上記のサイトにアクセスし、Pythonのバージョンにあったファイルをダウンロードします。

今回は、Pythonの3.10.1バージョンを使っているので、「PyAudio-0.2.11-cp310-cp310-win_amd64.whl」をダウンロードしました。

サンプルファイルのディレクトリ(/td_speech_to_text)直下に置いてください。
 
 
最初に、以下のコマンドを実行しておきます。
python -m pip install --upgrade pip setuptools
つづいて、 PowerShellでサンプルファイルのディレクトリに移動します。
cd [ディレクトリ]
私の場合、デスクトップにサンプルデータを置いてますので、以下のようになります。
cd C:\Users\kkawam01\Desktop\td_speech_to_text
サンプルファイル「1_pyaudio.py」を開き、以下の [wavデータのファイル名を記載] の部分に、お手持ちの .wav ファイルのパスを記載します。
FILE_PATH = "[wavデータのファイル名を記載]"
たとえば、サンプルファイルのディレクトリ直下に、test.wav がある場合、以下の記述になります。
FILE_PATH = "test.wav"
この記載が済んで保存したら、PowerShellで以下のコマンドを実行しましょう。
python 1_pyaudio.py
音が鳴ったら成功です。
 
続いて、Cloud SDKをPythonから使えるようにしましょう。
 
次のコマンドをPowerShellに入力し、実行してください。
pip install google gcloud google-auth google-cloud-speech grpc-google-cloud-speech-v1beta1
 
上記が成功したら、「2_speech_fromaudio.py」を開き、以下の部分を書き換えます。
credential_path = "[Google Cloud Platformで取得したJSONのファイル名を記載]"
[Google Cloud Platformで取得したJSONのファイル名を記載] 部分に、先ほどダウンロードしてきたJSONのファイル名を記載してください。
 
保存した後、PowerShellに以下を入力し、実行してください。
python 2_speech_fromaudio.py
 コンソール上に、「Transcript: how old is the Brooklyn Bridge」と表示されたら、無事、Cloud Speech-to-Textが動いています。
 
続いて、マイクの音を日本語に書き出してみましょう。
サンプルデータは以下のファイルを改修して作りました。
 
 
上記のサンプルは英語になっているので指定を日本語に変えています。また、このままでは動かないことから一部修正を加えています。
 
修正したサンプルファイルが「3_speech_jp.py」です。 
 
 こちらも、ファイルを開き、以下の部分にJSONのファイル名を記載してください。
credential_path = "[Google Cloud Platformで取得したJSONのファイル名を記載]"
※以降のファイルの多くが上記の書き換えが必要ですので全て書き換えておいてください。
 
PowerShellに以下を入力し、実行してください。
python 3_speech_jp.py
話しかけてみてコンソール上に文字が出たら成功です。
 
なお、受講されていたtakanori aokiさんのPCで起きた現象ですが、オーディオのインプット先が複数ある場合にはエラーになることがあるようです。
 
その際は、コードの以下の部分を調整してみてください。=2のところを0とか1とかに変更してみる。(takanori aokiさん、調査いただきありがとうございます)
## input_device_index=2,
処理を止める場合は、PowerShell上で「CTRL+Cボタン」を押しましょう。
 
 

OSCでPythonとTouchDesignerを連携

いよいよ設定も後半戦です。
続いて、PythonからTouchDesignerにデータを送るためにPythonにOSCのモジュールをインストールしましょう。 
PowerShellに以下を入力し、実行してください。
pip install python-osc
 
つづいて、TouchDesignerのプロジェクトファイルを立ち上げます。
TouchDesignerは解像度1280px x 1280pxまでであればトライアル版(無償)で使用できます。
トライアル版の方はAを、ライセンスを持っている方はBを起動してください。
 
A: sample_1280x720.toe
B: sample_1920x1080.toe
 
上記のどちらかを起動したのち、PowerShellに以下を入力し、実行してください。
python 4_osc.py
すると、TouchDesignerの以下の箇所にテキストが飛んできたのが分かると思います。
何度かPowerShellのコマンドを実行して確かめてみてください。「テストです」という言葉が表示されたら成功です。

 続いて以下のコマンドを実行します。

下記の修正は忘れずに対応してください。
credential_path = "[Google Cloud Platformで取得したJSONのファイル名を記載]"
python 5_speech_jp_osc.py
どうでしょうか?今度は話した言葉がテキストで表示されたと思います。
 
 

Cloud Translation APIを使う

つづいて翻訳機能を追加していきましょう。Google Cloud PlatformにアクセスしてCloud Translation APIを有効化します。
ページ上部の検索ボックスに「Cloud Translation API」と入れて、出てくるリストの中から「Cloud Translation API」を選択。 

「有効にする」ボタンをクリック。

 

これにてCloud Translation APIを有効化できたので、PowerShellに以下を入力し、実行してください。
pip install google-cloud-translate==2.0.1
次に、以下のファイルを実行してみます。このサンプルは、予め記述してある「次は日本語を英語に翻訳します」という日本語を英語に翻訳するものです。
python 5_speech_jp_osc.py
以下が表示されたら成功です。
Text: 次は日本語を英語に翻訳します
Translation: Next, I will translate Japanese into English
Detected source language: ja
「え、動かない!」という方は、以下の修正はしましたか?
credential_path = "[Google Cloud Platformで取得したJSONのファイル名を記載]"
7_speech_jp_to_en_osc.py」と8_speech_jp_to_en_osc2.py」も同様に修正しておいてください。
 
これが動いたら、もう怖いものはありません。
 
以下をPowerShellに以下を入力し、実行してください。これは、マイクの音を日本語にした結果を英語に翻訳し、TouchDesignerに確定した英語を送るサンプルです。
python 7_speech_jp_to_en_osc.py
確定結果が届いてきますが、話している過程の言葉も表示すると、よりリッチになると思いませんか?
では、最後に以下を実行してみてください。
python 8_speech_jp_to_en_osc2.py
これはマイクの音を日本語にした結果を英語に翻訳し、TouchDesignerに確定前の日本語と、確定した日英の結果を送るサンプルです。確定前の日本語がカタカタと打ち込まれていく過程が面白いですよね。
 
 

foreverでデーモン化(永続化)

8_speech_jp_to_en_osc2.py は一定時間経過するとGoogleの仕様で接続が切れてしまいます。そこで、接続が切れたときは再接続するように、Node.js の forever を使って永続化しましょう。
まず、Node.jsをダウンロードします。

私の環境はWindowsですので、Windows版をダウンロードしました。

 
インストーラーからインストールしたら、PowerShellに以下を入力し実行してください。
Set-ExecutionPolicy RemoteSigned -Scope Process
npm install forever -g
私の場合、この段階でPythonのパスが壊れてしまったようで、Pythonが実行できなくなりました。再度、Pythonのインストーラーを実行して無事動くようになりました。
ここまで来たら、もうゴールは目前です。
PowerShellでサンプルファイルのディレクトリまで移動して、以下のコマンドを実行します。
forever start -c python 7_speech_jp_to_en_osc2.py
forever で実行中のプログラムを止めるには、以下のコマンドを打ち込みます。
forever stopall
実行中のプログラムを確認する場合は以下のコマンドでみれます。
forever list
これで、自分の環境で動く自動翻訳システムが出来上がりました。
ぜひ、自分なりにカスタムして使ってみてください。
お疲れ様でした。


     

Asset Downloads

Experience level 

Comments