エムスリーエンジニアリンググループ/BIRの滝安(@juntaki)です。 BIRはビジネスインテリジェンス&リサーチの略で、そこでは医療従事者の会員向けアンケートをベースに、製薬会社へのマーケティング支援を提供する事業を行っています。
さて、BIRの事業とはさほど関係ないのですが、先日のTechTalkでROSを使ったSLAMラジコン(この話も今度ブログに書こうと思います)について発表をしました。その際に、Zoomの画面共有にかぶせられる自動字幕ツールを作って使ってみました。今回の記事ではその構成と使い方について説明します。
デモ
コード
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は初挑戦でしたが簡単につくれました。
使い方
こんなファイルを/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エンジニアや、データ基盤開発に興味があるエンジニアを募集しています。社員とカジュアルにお話することもできますので、興味を持たれた方は下記よりお問い合わせください。