AmiVoice Techblog

AmiVoiceの音声認識に関する技術情報・活用方法・組み込み方などを発信するアドバンスト・メディアのテックブログです

Linuxで音声認識を動かしてみた1(ビルド編)


f:id:amivoice_techblog:20210115094116p:plain いちかわちゃん

こんにちは【いちかわちゃん】です。

アドバンスト・メディアという会社で開発をしています。

Linux上で音声認識を組み込みたいという話の時はだいたいエンカウントするので、ご縁がありましたら仲良くしてください。

 

Linux音声認識を動かしてみた」という題材で3回に分けてお話していきます。

 シリーズを通して、みなさんも一緒に手を動かしていただけると嬉しいです。

 

各回で話すことは以下です。

・AmiVoice Cloud Platformのプログラムで音声ファイルから音声認識する。 ←now

・AmiVoice Cloud Platformのプログラムで簡易的にマイクから音声認識する。

・AmiVoice Cloud Platformのプログラムでマイクから音声認識する。

 

今回の目標はACPのC++のサンプルをビルドして動かすまでです。

 

以下の環境で動かしています。

OS Ubuntu18.04
アーキテクチャ AMD64
GCC 7.5.0

 

手順

 1.ACPサンプルダウンロード

 2.POCOインストール

 3.ACPサンプルビルド&実行

 

  1.ACPサンプルダウンロード

acp.amivoice.com

上記のページにアクセスしてダウンロードしてください。

カレントに適当な作業フォルダーを作っておきます。

$ cd ~
$ mkdir work
$ cd work
$ mkdir acp
$ cp [サンプルファイル名.zip] acp
$ unzip acp/[サンプルファイル名.zip]

 

ここまででファイル構成は以下のようになっていると嬉しいです。

 work/
 └ acp/
   ├ Wrp/
   ├ Hrp/
   ├ audio/
   ├ curl-ca-bundle.crt
   └ readme.txt

 

  2.POCOインストール

まず「POCOってなに?」って人向けに説明を。

POCO C++ Libraries
POCO C++ Libraries は、C++のネットワーク対応でポータブルなオープンソース・クラスライブラリのコレクション。 POCOは、POrtable COmponentsの略である。ライブラリは、スレッド、スレッドの同期、ファイルシステムへのアクセス、ストリーム、共有ライブラリとクラスのロード、ソケットとネットワークプロトコル(HTTP、FTPSMTPなど)などの機能をカバーし、HTTPサーバや、SAX2とDOMインタフェースを含む XMLパーサ、SQLデータベースなどを含む。モジュラーかつ効率的な設計および実装は、組み込みシステム開発に適したライブラリである。

POCO C++ Libraries - Wikipedia

つまり、便利なものがたくさん入っているライブラリとだけ覚えてください。


では作業に入ります。

workディレクトリ直下で以下のコマンドをしてください。

$ cd ~/work
$ git clone https://github.com/pocoproject/poco
$ cd poco
$ ./configure
$ make
$ sudo make install

※筆者が試したときのpocoのバージョンは1.10.1

 

pocoproject.org 

ここまででファイル構成は以下のようになっていると嬉しいです。

work/
 ├ acp/
 │ ├ Wrp
 │ ├ Hrp
 │ ├ audio
 │ ├ curl-ca-bundle.crt
 │ └ readme.txt
 └ poco/

 

  3.ACPサンプルビルド&実行

今回はWrpライブラリの方を使います。

 

とその前にWrpはアドバンスト・メディアの独自用語のため、軽く説明を。

 WebSocket音声認識APIは、WebSocket接続上に確立される双方向通信プロトコルです。

クライアント⇔サーバ間では継続的に、コマンドパケット、コマンド応答パケット、イベントパケットがやりとりされます。また、内部には、3個の並行した状態遷移系が存在します。音声供給に関する状態遷移系、発話区間検出に関する状態遷移系、音声認識処理に関する状態遷移系です。各遷移系はいくつかの状態を持ち、固有のトリガーにもとづいて状態遷移を繰り返します。

これらを理解すれば、クライアントアプリ用に提供しているWrpライブラリ(サンプルプログラムに同梱)を使用することなく、本APIを利用することも可能です。

つまり、WebSocketでリアルタイム認識をするためのライブラリだと思ってください。

 

では作業に入ります。
workディレクトリ直下で以下のコマンドをしてください。

$ cd ~/work/acp/Wrp/cpp/
$ bash build
$ bash run.sh

 

そうすると以下のような結果が返ってきます。

Please enter AppKey: [APPKEY]
+ export SSL_CERT_FILE=../../curl-ca-bundle.crt
+ SSL_CERT_FILE=../../curl-ca-bundle.crt
+ export LD_LIBRARY_PATH=/opt/ros/melodic/lib:bin/linux64_release
+ LD_LIBRARY_PATH=/opt/ros/melodic/lib:bin/linux64_release
+ bin/linux64_release/WrpSimpleTester wss://acp-api.amivoice.com/v1/ ../../audio/test.wav 16K -a-general [APPKEY]
...
-> アドバンスト・メディアは、人と機械との自然なコミュニケーションを実現し、豊かな未来を創造していくことをめざします 。

 

「 ../../audio/test.wav」のファイルを聞いてみて同じようなことを喋っていればokです。

 

まとめ

今回はACPのビルドをしてみました。

 

次回はACPで簡易的にリアルタイム認識をするまでをやります。 

  

次の記事

amivoice-tech.hatenablog.com

この記事を書いた人

  • いちかわちゃん

    Linuxやら組み込みやらで問い合わせすると高確率でエンカウントするモンスター。