まえがき
ある日のこと、画像処理の調べものに悪戦苦闘していると、ふらりとやってきた妖精さんがこう言いました。
「ついでに音声合成も調べといてくれる?」
え?なんですと?また無茶振りだネ?
まあ、Qiitaのキャンペーンもあるしちょうどいいかナ?
軽く安請け合いしたのでした。
とりあえず最終目標
人が台本を読み上げてマイクから録音しつつ、テキストに落として字幕ファイル(SRT形式)を作成する。
こんな感じ。
まずはマイク周りは後回しにして、音声認識を試してみる。
サンプルプログラムをPythonで動かしてみる
AmiVoiceAPIの利用登録とクーポンの登録が終了したら、Github上に公開されているサンプルグロムをダウンロードします。
amivoice-api-client-library-main\Wrp\python 以下のファイル/フォルダと、amivoice-api-client-library-main\audioフォルダ、curl-ca-bundle.crt を一つの作業用フォルダにまとめたら、run.bat を以下のように変更します。
REM @set /P AppKey="Please enter AppKey: "
set AppKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
set PYTHONPATH=src
set SSL_CERT_FILE=curl-ca-bundle.crt
REM 標準出力はjsonのみでファイルに落とす。jsonから取り出したテキストはエラー出力にして画面に表示する
python WrpSimpleTester.py wss://acp-api.amivoice.com/v1/ audio/test.wav 16K -a-general %AppKey% > %~dp0output.json
rem @pause
※ 接続先は「ログあり」を指定しています。機密情報を扱う場合は、”wss://acp-api.amivoice.com/v1/nolog/”を指定して「ログなし」にします。
また、WrpSimpleTester.py の106行目のprint文を、次のように変更して出力先を標準エラー出力に変更します。
print(" -> %s" % text, file=sys.stderr)
※ 今回はPython3.11を使います。現行のPython3.12は脆弱性対策のためssl.wrap_socket()が廃止されているとのことで、src\com\amivoice\wrp\Wrp_.pyの146,148行目が動作しません。
このバッチファイルをコマンドプロンプトから実行すると、jsonファイルが作成されたうえで画面には認識された文章が表示されます。
-> アドバンスト・メディアは、人と機械との自然なコミュニケーションを実現し、豊かな未来を創造していくことを目指します。
そのうえで、この参考記事のソースコードをpyファイルに落として、run.batに次の1行を付け加えます。
python WrpParser.py output.json
これを実行すると、output.srt が以下のように作成されます。
1
00:00:00,506 --> 00:00:02,026
アドバンスト・メディアは
2
00:00:02,026 --> 00:00:05,626
人と機械との自然なコミュニケーションを実現し
3
00:00:05,626 --> 00:00:08,746
豊かな未来を創造していくことを目指します
4
00:00:00,000 --> 00:00:08,746
ここまで、ssl.wrap_socket()に悩んだ以外はすごく簡単でした。音声ファイルからは割にあっさりと字幕が生成できることを確認できました。
次の記事では、マイク入力にしてリアルタイムに音声認識させてみます。
参考記事
Qiita記事投稿キャンペーン開催中!クーポン発行方法をご紹介
AmiVoiceのJSONデータから字幕ファイル(SRT)をつくってみた