見出し画像

60. 音を収集し、活用する

前回の記事

はじめに

この定期購読マガジンでは、以前の第41回第48回の記事で、IoT シナリオで画像を扱う方法を試しました。
多くの情報を含む画像と同様、IoT 機器周辺の音もまた、数値計算や AI 活用により様々な情報を取り出し活用が可能です。
今回から数回に渡り、音を扱う方法を試していきます。

音データの取り込み

IoT 機器による音データの取り込み方法は、大きく以下の三つに分類できます。
※ 今後の一連の記事では、IoT 機器は、Windows、Linux(Unix)系の OS で動くものを対象とすることにします。MBED や Arduino 等の OS 無しのファームウェア上で動く場合や、Azure RTOS や Free RTOS 等の Realtime OS の場合は、UART 等で接続されたデバイスとのシリアル通信からのデータ入力になるのが一般的です。

  • IoT 機器に接続されたマイクロフォンデバイスからの音データ取り込み

    • USB 有線接続だけでなく、Bluetooth 等の無線接続も含む

    • マイク付きの Web Cam や、イヤフォンも含む

  • AUX 入力からの音データ取り込み

  • ネットワークを介した音声ストリーム受信(音声付き動画を含む)

これらのデータ取り込み方法については、Windows、Linux(Unix)系で利用できる仕組みやミドルウェアが異なります。今後の記事でそれぞれ標準的と思われる方法を解説していく予定です。

音情報収集

アーキテクチャ

IoT 機器が収集する音データを活用する IoT ソリューションの構成を考えてみます。

音データを収集する

音データは、基本的に連続した一次元のデータ列です。データの単位は、8ビット、16ビット、32ビット等があり、ビット数が上がれば表現できるデータ量が増えるので、音の品質が上がります。また、データは等間隔でサンプリングされてデータ化されていきます。通常、サンプリングレート(マイクデバイスでの計測間隔)は変えることができます。人間の耳の可聴域は、20Hz~20,000Hz といわれているので、その周波数域の音データを採りたい場合は、最高域の20,000 Hz までの音をサンプリングしなければならないので、1秒/(2x20,000) = 1/40 msec = 25 usec でのサンプリング処理が必要です。
※ 2倍しているのは、信号理論のサンプリング定理に拠ってます
この辺りは、ファームウェアや Realtime OS 系の場合は直接制御するロジックを組まないといけないですが、Windows や Linux(Unix)系の OS で動作する IoT 機器ならパラメータとして設定するだけでよいので、あまり手間はかかりませんが、データのビット数やサンプリングレートは開発する IoT ソリューションで必要な音質が担保されればよいので、適切なデータビット数、サンプリングレートを設定しなければなりません。必要以上の高品質な計測は、単にデータ量を増大させ、運用コストを上げるだけになるので注意が必要です。
他に、マイクデバイスの場合、その仕組みによって指向性や感度、周波数特性等が、種類によって様々なので、音データを収集する目的に応じて適切なデバイスを選択しなければなりません。マイクデバイスによってはノイズキャンセリング機能が装備されたものもあります。人間の会話やスピーチを収集する場合は便利ですが、環境音を収集するには不向きなので注意が必要です。

音データをサービスに取り込む

IT システムに接続された IoT 機器が、たかだか数台の場合は、サービス側とそれぞれの IoT 機器の間でリアルタイムのデータストリーム通信を行ってもそれほど問題は生じないはずです。

小規模 IoT システム


しかし、接続する IoT 機器が、多くのサイトに設置され、接続数が、数百台、数千台を超える場合には、回線品質や運用コストを考えると現実的ではないでしょう。
以前の画像の扱いに関する記事の様に、適度な時間間隔で計測したデータをファイル化し、サービス側のストレージにアップロードする様な作りにするのが現実的でしょう。

大規模 IoT ソリューション

そのような仕組みと実装方法は、画像の扱いの時と同じなので、Azure IoT Device SDK や Blob on Edge 等を使ったファイルの Azure Blob Storage へのアップロードを利用すれば簡単に実現できます。

音データを活用する

画像データの時と同様、IoT 機器毎に音データを収集してファイル化し、サービス側にアップロードし保持するだけでは意味がありません。音圧や周波数特性等の算術演算による計算や、音を扱う AI の適用を、音データファイルがアップロードされる度に適用することで、特徴値を抽出して IoT シナリオ上の事象として、連携するサービス群にメッセージとして流すことになります。算術演算や AI 適用を実行する仕組みは、Kubernetes 等を活用したスケーラブルな実行プラットフォームを使うとよいでしょう。

ただし、IoT 機器のハードウェアが比較的リッチな場合や、IoT 機器が設置されたサイトに必要十分な性能を持つハードウェアで動くゲートウェイ機器がある場合は、それらのハードウェア上で数値演算や AI を適用する処理を実行するという構成も可能です。この場合は、抽出された特徴値のみをサービス側にテレメトリデータとして送信することになります。

抽出された特徴値がある条件を満たした時だけ、関連する IoT 機器とサービス側のアプリケーションとの間で、動画も含めたストリーム通信を行い、現場とのコラボレーションが必要なシナリオを実行する様な構成が考えられます。

今後の記事について

以上を踏まえ、今後、以下の内容の記事を投稿していく予定です。

  • 音データの取り込み方法

    • Windows OS の音を取り込む実装方法

      • Media Foundation や WinMM コンポーネント等

      • 音取込み処理機能の配置方法

    • Linux(Unix)系 OS の音を取り込む実装方法

      • GStreamer

    • マイクアレイや MIXER からの音収集

  • 音データへの AI 適用

    • Speech 系 AI を試す

    • 算術演算も含め、楽曲、環境音向けに使える AI を試す

私の感想レベルなのかもしれませんが、音に関する AI は、人の会話やスピーチに関するものが多い印象です。この定期購読マガジンは、環境音の分析や、ギター弾語り等の楽曲の演奏と歌唱の分離、音楽への AI 適用等も試してみようと思っています。

それでは次回以降の記事をお楽しみに

ここから先は

0字

2022年3月にマイクロソフトの中の人から外の人になった Embedded D. George が、現時点で持っている知識に加えて、頻繁に…

この記事が気に入ったらサポートをしてみませんか?