はじめに
こんにちは、Maiです。
ボランティアで細々と米国本社のシニアマネジメントの翻訳をするという活動を行っています。
Blogは文字なので、翻訳するのは(時間をかければ)まあできるのですが、動画の翻訳となると、
①字幕を書き起こし(動画にはついてるものとそうでないものがある)、
②翻訳し、
③必要なら日本語の字幕をつける、
という手順があって結構しんどいので、どうにか楽をしたいなと思うようになりました。
字幕がある動画はTranscriptionを作ってくれたらいいんだけど、そんなに親切じゃない。
そこで、弊社Watsonの「Speech to Text」という音声認識のAPIを使用して、文字起こしをしてみることにしました。
私のスペック、PCのスペック
Me: 開発経験が少ない悲しき自称エンジニア、pythonは勉強中。
MacOS: Catalina
Python: Python 3.8.0
前提
Pythonインストール済
IBM Cloudアカウント作成済
まずはライブラリをインストールしましょ
pip install --upgrade "ibm-watson>=5.1.0"
APIとURLをメモしたらLet's try!
import sys
import json
from os.path import join, dirname
from ibm_watson import SpeechToTextV1
from ibm_cloud_sdk_core.authenticators import IAMAuthenticator
# 認識する音声ファイルは引数
input_file = sys.argv[1]
# 要変更
apikey = {自分のapi}
url = {自分のurl}
authenticator = IAMAuthenticator(apikey)
speech_to_text = SpeechToTextV1(
authenticator=authenticator
)
speech_to_text.set_service_url(url)
with open(join(dirname(__file__), './.', input_file), 'rb') as audio_file:
speech_recognition_results = speech_to_text.recognize(
audio=audio_file,
content_type='audio/wav', #オーディオタイプによって変更の必要あり
word_alternatives_threshold=0.9
).get_result()
# print
with open('result.txt', 'w') as f:
raw_text=[]
for i in range(len(speech_recognition_results["results"])):
txt = speech_recognition_results["results"][i]["alternatives"][0]["transcript"]
raw_text.append(txt)
for i in range(len(raw_text)):
f.write(raw_text[i])
補足
上記は、音声ファイルを引数にして読み込むようにしていますので、コマンド叩く時は引数つけてください。
今回は自分が使いやすいので、テキストで出力させていますが、本来はjsonで返すAPIです。
IBM Cloud無料枠の場合は、1回の音声ファイルは100MBが上限です(非同期HTTPだと1GBでもできるらしいのですが、よくわかりません)
参考
以下を参考に進めました。
API公式ドキュメントの日本語版は、翻訳されるのが遅いのと、pythonのコードが載っていないので、先人の方がいなければ意味不明だっただろうと思います。上のコードは下2つのブログのコードを改良しただけみたいなものですし…
本当にありがとうございました。
Speech to Text API Document
IBM Watson Speech to Text API を使ってみた (Python)
[Python]WatsonのSpeech To Textを使うお話
次の野望
今回は対象が英語音声だったので、比較的問題なく文字起こしできました。
次の野望としては、会議のリアルタイム文字起こし(日本語)ができたらいいなぁと考えています。
それではまた。