エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

Zoomでつかえる自動字幕ツール(AmiVoice/Go)

エムスリーエンジニアリンググループ/BIRの滝安(@juntaki)です。 BIRはビジネスインテリジェンス&リサーチの略で、そこでは医療従事者の会員向けアンケートをベースに、製薬会社へのマーケティング支援を提供する事業を行っています。

さて、BIRの事業とはさほど関係ないのですが、先日のTechTalkROSを使ったSLAMラジコン(この話も今度ブログに書こうと思います)について発表をしました。その際に、Zoomの画面共有にかぶせられる自動字幕ツールを作って使ってみました。今回の記事ではその構成と使い方について説明します。

デモ

youtu.be

コード

AmiVoiceのGoライブラリ(なかったので作りました)のサンプルコードとして、字幕ツールをいれてあります。AmiVoiceのAPPKEYだけあれば使えます。 github.com

AmiVoiceのAPI

音声認識のコンポーネントは、AmiVoice® Cloud Platformを使っています。 医療用のエンジンが最初から選べ、薬剤名などの認識精度も最初からそれなりに高いようでした。 BIRではアンケート以外に電話インタビューも実施しており、その文字起こし等の活用を検討しているなかで見つけたサービスでした。

APIは2種類あるのですが、HTTPのAPIは50秒制限があるため、本格的に使おうとするとWebSocket APIの方を使わざるをえないです。 API自体はシンプルなので、簡単に使えます。 Go以外の公式サンプルコードは色々公式から提供されているようでした。

マイクとGUI

ある程度(少なくともLinux/Mac)くらいはマルチプラットフォームで動作させたかったので、マイク・GUIのライブラリ選定はその観点で行いました。

マイクについては、下記のPortAudioのラッパーライブラリが使いやすかったです。 github.com

GUIは文字を出すだけなので、まず、ライトなものとしてfyne-io/fyneを使ってみたのですが、日本語表示にやや難があるくらいで便利でした、が。 現段階のバージョンではタイトルバーを隠したり、ウィンドウを透過させることができないようなので、結局GTK3を使いました。 常に最前面を維持する方法など、Windowシステムごとの癖はあるものの、ライブラリで吸収してくれているので、ネイティブのGUIは初挑戦でしたが簡単につくれました。

github.com

使い方

こんなファイルを/cmd/caption/setting.yamlとしてつくって、go run main.goで動きます。

app_key: <APPKEY>
audio_format: lsb16k
grammar_file: -a-general

まとめ

音声認識のサービスをつかって、Zoomの画面共有にかぶせられる字幕ツールをGoでつくってみました。 マルチプラットフォームで動くので、よかったらつかってみてください。

We are hiring!

エムスリー、とくにBIRではGo/Reactエンジニアや、データ基盤開発に興味があるエンジニアを募集しています。社員とカジュアルにお話することもできますので、興味を持たれた方は下記よりお問い合わせください。

open.talentio.com

jobs.m3.com