IBM SpeechToTextとpython・curlを利用して、
音声ファイルから文字起こしをする機能をプログラミングしていきます。
プログラミングしようとした理由
これから動画の作成や、文字起こしの仕事をするにあたって、
既存の技術から省略化できないかと考えた為です。
IBM Speech to Textを選択した理由
無料枠が500分/月あり、クレジットカードの登録なども不要な為です。
いくつかの検索したところ、似たような商品やサービスがありました。
しかし、そのほとんどが有償か、無料枠ありでもクレジットカードの登録が
前提(※)のサービスばかりでした。
(※)無料枠を消化しきった場合、自動的に従量課金されてしまう仕組みです。
無料枠の管理をしっかりしないといけない分、面倒です。
また、課金の上限設定が無いものも多く、
アカウントの乗っ取りなどがあった場合のリスクが大きいです。
作業の流れ
次の作業が必要です。
- IBMCloudアカウントの作成
- SpeechToTextの有効化
- curl、pythonからのSpeechToTextの実行
- (pythonのみ)実行時の日本語対応
(\u9999などの文字コード化への対応)
IBMCloudアカウントの作成とSpeech to Textの有効化
IBM Cloudのサイトにアクセスし、次の手順で作成します。
詳しくは、後日動画にでも纏めようと思います。
- 「アカウントの作成」リンクを押下。
- Email、名前、性、会社名、などを入力。
- メールが届くので、認証用リンクを押下して有効化。
- アカウント・プライバシーに同意して「次へ進む」を押下。
- IBM Cloudのダッシュボートが展開するので、上部メニューバーのカタログを押下。
- カタログ画面で左サイドバーのサービス を押下。
- 表示されたサービス一覧からSpeech to Textの押下。
- Speech to Text画面で、以下を設定後、「作成」ボタンを押下。
リージョン:東京
料金プラン:ライト(無料) - IBM WatsonのSpeech to Text画面で、左サイドバーの管理を押下。
- 表示された資格情報欄の API鍵 と URL を確認する。
(後ほどプログラムに貼り付けて利用する。)
詳しくは動画に纏めました。
Speech to Textとは
音声から、テキスト(文字)を起こしてくれるIBM社が提供するサービスです。
いわゆる、「文字起こし」の仕事を半自動化するのに役に立ちそうです。
利用には、IBMCloudアカウントの作成が必要です。
今回は、トライアルコース(無償版)で動作確認を行いました。
利用した感想としては、かなりの認識率です。
会議の議事録などが、自動筆記になる日も近そうです。
curl、pythonからのSpeech to Textの実行
以下で動作を確認しました。 []で囲われた部分は、文字起こしをする音声ファイルパスと、上記で取得したAPI鍵とURLを貼り付けて利用します。
curlコマンド
curl -X POST -k -u “apikey:[API鍵]” –header “Content-Type: audio/flac” –data-binary @[音声ファイルパス] “[URL]/v1/recognize?model=ja-JP_BroadbandModel”
pythonコード
SpeechToTextSample.py 、 SpeechToTextSample.bat を同じフォルダに
おいて、 bat を実行するとresult.txtに結果が出力されます。
[]で囲われた部分は、文字起こしをする音声ファイルパスと、上記で取得したAPI鍵とURLを貼り付けて利用します。
<SpeechToTextSample.pyの内容>
※実行にはibm_watson、ibm_cloud_sdk_coreのモジュールが必要です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# coding: UTF-8 import json from os.path import join, dirname from ibm_watson import SpeechToTextV1 from ibm_watson.websocket import RecognizeCallback, AudioSource from ibm_cloud_sdk_core.authenticators import IAMAuthenticator # FIX_VALUE FILE_NAME='[音声ファイルパス]' authenticator = IAMAuthenticator('[API鍵]') speech_to_text = SpeechToTextV1( authenticator=authenticator ) speech_to_text.set_service_url('[URL]') class MyRecognizeCallback(RecognizeCallback): def __init__(self): RecognizeCallback.__init__(self) def on_data(self, data): print(json.dumps(data, ensure_ascii=False)) def on_error(self, error): print('Error received: {}'.format(error)) def on_inactivity_timeout(self, error): print('Inactivity timeout: {}'.format(error)) myRecognizeCallback = MyRecognizeCallback() with open(join(dirname(__file__), './.', FILE_NAME), 'rb') as audio_file: audio_source = AudioSource(audio_file) speech_to_text.recognize_using_websocket( audio=audio_source, content_type='audio/mp3', recognize_callback=myRecognizeCallback, model='ja-JP_BroadbandModel', keywords=['colorado'], keywords_threshold=0.5, max_alternatives=1) |
<SpeechToTextSample.batの内容>
1 2 3 4 |
python %~n0.py > result.txt pause |
(pythonのみ)実行時の日本語対応
APIリファレンスのサンプルをそのまま利用しても、日本語出力はできません。
その為、プログラム内の、print(json.dumps(data, ensure_ascii=False)) の
ensure_ascii=False の部分で日本語に対応しました。
コメント