Masayuki Takigahira

Forum Replies Created

Viewing 15 posts - 1 through 15 (of 74 total)
  • Author
    Posts
  • in reply to: 連続してループ中のループを実行する問題 #2731

    > 音声ファイルが30チャンネルのWAVファイルであることが原因で、

    はい。30チャネルの入力の場合には HARK をソースコードからビルドし直す必要がございます。

    現在公開しているパッケージ版の HARK では、扱えるチャネル数や音源数などに上限がありそのままでは処理できません。上限を変更するためには、ソースコードを一部書き換えて再ビルドする必要がございます。

    ビルドする前に、 hark-core パッケージの libseparation/MICARY_def.h ファイルに記述されているマクロ定義 __MICARY_def_MAX_NCH および __MICARY_def_MAX_NSRC の値を変更してください。上限ですので今回は 16 から 32 などに変更する必要がございます。
    libseparation という名称ですが、分離以外のノードでも参照されているため変更が必要となります。
    例えば、お使いのネットワークの場合 Beamforming ノードでも使用されています。

    具体的なビルド方法につきましては、 Installation from Source CompilationStep5 : hark-core installation instruction をご参照ください。

    PyHARK ではリファクタリングされており、この制限が無く再ビルトが不要です。

    以上、宜しくお願い致します。
    HARK Support Team.

    in reply to: 連続してループ中のループを実行する問題 #2724

    頂いたノード (定位結果を CSV ファイルに出力する Python ノード) の実装を用いて Ubuntu がインストールされた VM 上で動作の確認をさせて頂きました。
    結果が得られないという状況が再現できず、定位結果が正常に CSV ファイルに保存されていましたので下記についてご確認ください。

    1. “all” などの出力端子が MAIN (LOOP を置いている subnet) でも出力端子が設定されていること。
     これが行われないとノードが実行対象から除外されている可能性があります。

    2. DisplayLocalization ノードの代わりに SaveSourceLocation ノードなどでファイル出力を行う。
     XML 形式で読みづらい出力ファイルとなってしまいますが、ファイルは確実に出力されますので定位が出ているか否かの確認が出来ます。Python ノードに起因する部分を無視できますので、ここで定位結果が得られない場合は定位が出来ていない可能性が御座います。

    3.CSV ファイルの出力先のアクセス権をご確認ください。
     書き込み禁止の場所で実行しますとファイルが生成されない事が御座います。

    4.下記のサンプルで結果が得られることをご確認ください。
     下記の URL に我々が提供しているサンプルが御座います。
      https://hark.jp/download/samples/
     下記のサンプルファイルをダウンロードして頂き、
      https://hark.jp/networks/HARK_recog_3.0.0_practice2.zip
     本投稿に添付している patch.7z の内容を上記サンプルのディレクトリ内に展開します。
    export OPENBLAS_NUM_THREADS=1 && ./sep_rec_offline_loop_wo_disp_write_csv.n
     のように実行して頂くと、処理が行われ 999.py の結果が output.png にあるような内容で出力されます。
     最初の環境変数設定はコア数の多いPCで処理速度が落ちないようにするために設定していますが、無くても実行は可能です。

    5.以上の対処で解決が出来ない場合は、実行環境の HARK を最新版に更新することをご検討ください。HARK 講習会などで使用している既に HARK がインストール済みの VM イメージを一般公開しております。下記の URL の「第22回HARK講習会用のファイル一式の URL」から VM イメージを取得する事が可能です。
     https://www.hark.jp/document/tutorial/2023/practice0.html

    ———-

    DisplayLocalization を接続すると Python が応答なしとなる件について:
    原因は Python の GIL に起因するもので複数の Python ノードを使用している場合に UI を描画するノードを使用すると処理が重い場合に応答なしのダイアログが表示されるという状況が発生していることが分かりました。ダイアログを「キャンセル」で閉じると処理が継続されますが、頻繁に停止してしまうことから描画系のノードは使用を控えてファイル出力などでご対応頂けないでしょうか。
    PyHARK では各ノードをマルチスレッド・マルチプロセスで処理を行っておりますので PyHARK に移行して頂くことでも回避が可能です。

    もし PyHARK にご興味が御座いましたら、下記 HARK 講習会の資料でも紹介しております。 practice3 が PyHARK の紹介となっております。
     https://www.hark.jp/document/tutorial/2023/practice0.html
     https://www.hark.jp/document/tutorial/2023/practice1.html
     https://www.hark.jp/document/tutorial/2023/practice2.html
     https://www.hark.jp/document/tutorial/2023/practice3.html

    以上、宜しくお願い致します。
    HARK Support Team.

    Attachments:
    in reply to: 連続してループ中のループを実行する問題 #2714

    回答が遅くなり申し訳ございません。サンプルを作成致しました。

    添付ファイルの Python ノードを LOOP0 の中にある AudioStreamFromMic や AudioStreamFromWave の代わりに使用して頂くとご希望の動作になると考えております。
    MAIN には LOOP0 のみ存在し、また LOOP0 については出力端子のみとなるネットワークになります。InputStream ノードなどは必要なくなります。

    まず、 PyCodeExecutor3 ノードに出力端子 AUDIO と NOT_EOF を追加してください。AUDIO 端子の出力を AudioStreamFromXXXX ノードの出力と同様に接続して頂き、NOT_EOF 端子の出力に CONDITION を設定します (Set as Condition) 。 AudioStreamRepeaterFromWave.png のようになります。
    また、必須ではないのですが NOT_EOF 端子に対して Set as Output で出力端子としても設定して下さい。これは HARK-Designer の不具合なので動作には影響がないのですが、入出力が設定されていない任意の端子(接続が必須でない端子)が存在する場合、次回ネットワークを開いた際に端子が非表示になるという問題を避けられます。
    次にパラメータの設定を添付の AudioStreamRepeaterFromWave_parameters.png のように設定します。

    AudioStreamRepeaterFromWave.py (zipで圧縮して添付しています) の実装の概要ですが、
    load_file メソッドは単独のファイルを読み込んで AudioStream のためのバッファ self.frames を作成します。 self.frames.shape は (frames, channels, length) で calculate メソッドの実行時(各フレームの処理時)に (channels, length) サイズの numpy.array() を出力するために使用します。 2次元配列は C++ 側で HARK::Matrix として変換されるため AudioStreamFromMic や AudioStreamFromWave の出力と同様の形式で出力されます。
    load_files メソッドは複数ファイルを連結して読み込む例として実装させて頂きました。AudioStream のバッファをどのように結合するかの参考になれば幸いです。チャネル数やフレーム長(length)が変わる場合にはバッファを再構築する仕様で実装しております。

    添付の Python ノードをご使用になる際の注意点として、 sliding_window_view を使用しておりますので numpy の 1.20.0 以降が必要となります。

    以上、宜しくお願い致します。
    HARK Support Team.

    in reply to: 連続してループ中のループを実行する問題 #2699

    お問い合わせありがとうございます。

    Network file (.n 拡張子のファイル) が停止するタイミングは、 CONDITION を設定している出力端子に False が設定された時点となります。AudioStreamFromWave の場合を例に挙げますと、WAVファイルの終端(EOF)に達した時点で NOT_EOF 端子が False となり停止いたします。AudioStreamFromMic の場合はマイク入力ですので常に NOT_EOF 端子が True が設定されており、 Ctrl + C などで停止しない限り動作し続けます。

    CONDITION は iterator 設定のサブネット (LOOP するための Dynamic ノード) の終了条件を示し、該当する iterator 設定のサブネット内に1か所だけ設定可能です。2か所目を設定しようとすると最初の設定が外れて排他的に設定されます。 Bool 値の出力端子であればどこにでも設定可能です。(非推奨ですが、 Int 値の出力端子の場合も動作し、0=False、0以外=Trueとみなします。)

    外部からの Ctrl + C や kill signal 送信をトリガーとして停止したい場合は、 Constant ノードなどで True を固定値として入れて CONDITION を設定します。

    PyCodeExecutor で実装されているノードが読み取るファイルをリストのようなもので処理していて、最後のファイルを処理し終えたことが分かっているようなケースでしたら NOT_EOF や NOT_END など分かりやすい端子名の出力端子を追加し、 Bool 値で True を終了させたいタイミングで False としてください。この端子に CONDITION を設定します。

    複合条件で停止させたい場合は、各ノードの CONDITION 状態 (Bool 値) を出力する端子を AND ノードや OR ノードの入力に接続し、出力端子に CONDITION を設定することも可能です。 つまり、 (A AND B) OR C という状態で停止させることも可能です。

    iterator 設定のサブネットが多重化されている (入れ子状態の) 場合、上位階層へ CONDITION を通知するために CONDITION の端子を該当の iterator 設定のサブネットで OUTPUT し、上位階層のサブネットで配置した LOOP の Dynamic ノードの出力値 (CONDITION の値) を読み取ってください。

    つまり、 CONDITION が設定される出力端子は単なる Bool 値の出力端子で CONDITION として設定されることで LOOP 停止条件となると覚えるのが分かりやすいのではないでしょうか。設定されていない端子の状態は未接続の出力端子と同じ扱いとなりますので無視されます。

    ご不明な点がございましたら、いつでもご返信ください。
    以上、宜しくお願い致します。

    HARK Support Team.

    in reply to: harktool5-guiについて #2697

    追加情報ありがとうございます。

    > > 通常の環境であれば、インパルスのピーク波形(大きな振幅)の後に残響(小さい振幅が減衰して続く)が出ていれば問題ないはずです。
    > と変身をいただいたのですが見る限りだと後ではなく先に残響が出ている気がするのですが大丈夫でしょうか?

    time.png を拝見しました。インパルス波形以外に若干振幅が出ていますが振幅も小さく残響ではないようです。残響の場合は、インパルスの後に減衰しながら振動する波形が出ます。収録環境によるのですが、 time.png の画像からは殆ど残響がない空間で収録をされているように見えます。

    > それと一応過去この部屋で録音した伝達関数も添付していおいたのですが同じ部屋でこれほどに伝達関数が変化することはあるのでしょうか?

    kakonomono.png と frequency.png を拝見しました。収録環境やマイク、スピーカの特性により frequency.png のような状況になる可能性はあるのですが、今回は何らかの問題が起きていると考えられます。まず、 frequency.png の5kHz以下の振幅が殆どみられません。収録されているお部屋が同じであるとのことですので、マイクやスピーカ、アンプ等の機材の変更などある場合は特性が違うということになるのですがバンドパスフィルタがかかったかのような極端な波形となっています。

    何点か確認させて頂けないでしょうか。

    ・1点目
    transfer_function.png で TSP Offset や Mouth TSP Start が 48384 となっていることを確認しました。TSPはダウンサンプリング後のPCMファイルを HARKTOOL に入力されているという認識ですが違いますでしょうか。また、初期値が 16384 になっていたはずですが変更されましたでしょうか。TSP Offset が行われる理由は繰り返し再生するTSPの最初の1回分(16384サンプル分)には残響が含まれない為です。複素回帰モデルで作成する場合は音が含まれている区間を指定するだけなので影響が少ないですが、通常の同期TSPの場合は加算平均を行うため残響が含まれない1回をスキップしています。

    ・2点目
    Mouth TSP Start ~ Mouth TSP End の区間が 16384 サンプル分となっていましたが、TSP1回分(16384サンプル分)だけの区間に設定されている理由(例えば収録中に雑音が入ったので雑音の無い区間だけにしたなど)がございますでしょうか。TSPは16回繰り返して再生しているため長めに例えば 10 回分の 163840 サンプル分ぐらいの範囲で設定された方が精度が上がります。

    ・3点目
    前回伝達関数を作成された際 (kakonomono.png) の収録時点から今回の収録で変更のあった部分について差し支えない範囲でお伺いしても宜しいでしょうか。例:部屋の壁面に吸音材を貼り付けた、機材を**から**に変更した、など。また、1~2方向分だけで良いので収録されたTSPのオリジナル(ダウンサンプリング前)のWAVファイルを頂く事は可能でしょうか。

    以上、宜しくお願い致します。

    in reply to: harktool5-guiについて #2690

    座標系が90度方向で正面(*1)となっているようでしたので、その部分だけ注意が必要ですが頂いた内容から判断する限り伝達関数自体は問題ないのではないでしょうか。

    *1) マイクアレイを前後の縦長に配置してマイクアレイの左側だけで音源を収録されたのであれば座標系は0度が正面になっています。その場合は、以降の内容で座標系の回転の話については読み飛ばしてください。

    > harktool5のドキュメントに乗っている画像のものとはかけ離れたようなものなのですが、

    マイクアレイ形状、環境などが全く異なるので掲載画像と異なること自体は問題ございません。

    > 16chの一直線型のマイクロフォンアレイを使用し、

    マイク間が 3cm の等間隔で 16個 並んでいるという設定に見えますが相違なければ大丈夫です。
    ただ我々が想定している HARK の座標系において、マイクの配置方向が想定と異なっているように見えます。
    4.5 HARK 標準座標系 にあるように、我々の想定では X=1.0, Y=0.0, Z=0.0 がマイクアレイの正面方向(0度方向)という想定で HARK を使用しております。
    microphones.png を拝見する限り、マイクが左右に長く並んでいるのであれば座標系が90度回転している(我々の想定では正面が0度:X=1.0が正面、yuito様の座標系では右が0度で正面が90度:Y=1.0が正面)となっていること以外は問題が無いように見えます。角度の定義を90度読み替えて頂ければ現状のままでも問題はございません。

    > TSP信号は場所の都合上0度から150度で5度ずつで録音しております。

    マイク配置でもお伝えした通り、90度座標系が回転しているようでしたので 0度(マイクアレイから見て右)から150度(マイクアレイから見て左やや前方)の範囲の音源位置で収録された音源であれば問題ございません。90度が正面となりますのでご注意ください。
    soundsource.png の内容ではそのようになっています。
    マイク配置の座標を修正して正面が0度となるように回転させる場合は、音源位置の座標も同じく回転させてください。

    > 録音機器の都合上、録音はサンプリングレート48kHzで行いsoxを利用して16kHzにダウンサンプリングしており、16kHz,16bit integerの物を使用しています。再生している音源に関しては16386.little_endian.wavを17回連続で再生するものを使用しています。

    収録されたTSPを見る限りでは問題は起きていないようです。sox と HARK のダウンサンプラーのアルゴリズムに差がある可能性も考慮すると HARK で収録した方がベターですが波形やスペクトログラムを見る限りでは特に問題は無いように見受けられます。

    > 伝達関数についてこれで正しいのかという点です。

    kekka.png ですが、 Domain を周波数ドメインから時間ドメインに変更して頂くことでインパルス応答の時間波形となりますので正常に変換されているか確認しやすいのではないでしょうか。また、その際に TF type を Localization ではなく Separation に切り替えて頂くことで残響を含めたインパルス応答波形となります。定位には直接音のみを使用するため残響部分がカットされています。
    通常の環境であれば、インパルスのピーク波形(大きな振幅)の後に残響(小さい振幅が減衰して続く)が出ていれば問題ないはずです。

    > この様な場合新たなトピックを建てるのがよいのか分からなかったので返信させていただきました。迷惑であれば申し訳ありません。

    前回から継続のお問い合わせ、前回と関連するお問い合わせなどでしたら、返信、新規どちらでも問題ございません。時間が空いても前回の話と関連する場合は返信で問題ございませんのでお気軽にお問い合わせください。
    複数件のお問合せや、別件のお問合せなどの場合は分かりやすいタイトルを付けてトピックを分けて頂くことでご質問内容ごとの回答となり後で見る際に内容を追いやすく、同じ内容でお困りの方の助けとなりますので新規のトピックで建てることもご検討ください。

    以上、宜しくお願い致します。

    in reply to: harktool5-guiについて #2596

    お問合せありがとうございます。

    > tsp信号は同期録音ではないため各音源ごとに多少のずれがあります。
    問題ございません。HARKTOOL5の下記のURLにある機能を使用して頂き、音が含まれる区間(start ~ end)を指定して頂くと伝達関数を作成できます。「Use TSP record Files」となっているところを「Use Mouth TSP Record Files」に変更すると設定用の項目が表示されます。
    複素回帰モデルを用いた伝達関数推定

    > tsp信号はharkダウンロード時に得られるものを
    「ダウンロード時に得られるもの」というのは下記のファイルという事で合っていますでしょうか。
    /usr/share/hark/16386.little_endian.tsp または
    /usr/share/hark/16386.little_endian.wav

    > 再生環境に合わせ変換したものを使用しておりrate:48000,float32bitのものを使用しました。
    再生については制限がありませんが、収録するTSPは 16bit integer または 24bit integer の WAV ファイルで収録をお願いします。

    また、「再生環境に合わせ変換」とありますが、具体的にはどのように行われたのでしょうか。
    アップサンプリングを行っても16kHzの入力(ナイキスト周波数の8kHzまでの音)までしか分離する事が出来ません。また、再生するTSPがアップサンプリングにより歪みますので音声などが目的の場合で16kHzでも十分な場合にはTSP信号自体をアップサンプリングするのではなく、16kHzのままで再生して頂いた方がベターです。再生デバイスは通常、複数のサンプリングレートに対応していますので16kHzのままでもファイルを再生できるはずです。

    音声の定位や分離が目的である場合は16kHzで十分に機能しますので、次のケース1または、ケース2のどちらかの方法で対応してください。
    音楽や電子音など高周波数帯域の定位や分離も行いたい場合は、ケース3の方法で48kHz用のTSP信号で対応してください。その場合、音声認識に関しては通常16kHz(あるいは8kHz)用にモデルが作られているため、そのままでは音声認識が出来ない事に注意して下さい。
    *) 我々が提供しているKaldiのモデルは16kHz用です。

    ケース1:16kHzで収録し、16kHzで処理する。
    音声のみを対象としている場合は、こちらの手順を推奨します。
    TSP収録時のマイク設定を16kHzにした状態(*)で収録して頂き、HARKで処理を行う際も16kHzで使用する。
    伝達関数は16kHzで作成したものを使用します。
    *) マイクデバイスが対応していれば、サンプリングレートを変更して収録が可能です。
    arecord などでは -r オプションで収録するサンプリングレートが指定できます。

    ケース2:マイクの設定は48kHzのままで、収録時とHARK処理時にDownSamplingし、16kHzで処理する。
    マイクが16kHzでの収録に対応していない場合はこちらの手順で16kHz対応のマイクと同様に処理できます。
    HARKで「AudioStreamFromMicノード」の後に「MultiDownSamplerノード」を接続して48kHzを16kHzにダウンサンプリングする事が出来ます。TSP収録を「AudioStreamFromMic、MultiDownSampler、SaveWavePCM」という接続のネットワークで行って頂き、HARKで定位/分離処理を行うネットワークでも同様に「MultiDownSamplerノード」を挿入して頂く事で16kHzとして処理できます。
    伝達関数は16kHzで作成したものを使用します。

    ケース3:
    音楽や電子音のように高い周波数を含む48kHzの入力(ナイキスト周波数の24kHzまでの音)を分離したいという要望であれば、下記のURLにあるように48kHz用のTSP信号を使用する必要があります。
    Recording TSP
    HARKTOOLで不具合が発生する場合は、GUIを使用せずコマンドラインから作成しなければならない場合があります。エラーなどが発生しましたら再度ご連絡ください。

    > 伝達関数を生成するサンプルのtsp録音データなどがあれば頂けると幸いです。
    サイズが大きいため公式サイトからのダウンロード提供は今まで行っておりませんでしたが、公開しているTAMAGO03の伝達関数を作成する際に使用したTSP収録データはございます。
    ただし、こちらは16kHzで収録したデータになります。16kHz以外の例えば48kHzでのサンプルとなりますとご提供可能な(公開可能な)収録データがございません。
    TAMAGO03用(16kHz)で宜しければ下記からダウンロード出来ように致しました。
    TAMAGO03 TSP recording data
    サイズを小さくするため 7-zip 形式で圧縮しておりますので、下記のように 7-zip を入れて頂いてから展開して頂けますでしょうか。

    
    sudo apt install p7zip-full
    7z x tsp.7z
    

    以上、宜しくお願い致します。
    HARK support team.

    in reply to: Separation for 3D Audio #2577

    Thank you for your inquiry.

    Q.1
    But I don’t know how to record the TSP response, mainly because I don’t know how to run wios and I don’t know how to make the loudspeaker output the TSP even after reading and watching the tutorials you have.

    A.1
    From HARKTOOL5, we have provided a method to create a transfer function from recorded data whose playback and recording are not synchronized. In other words, instead of wios, you can record TSP with a combination of common playback tools (such as aplay) and recording tools (such as arecord).

    Please refer to the following URL for the information necessary for setting to use the transfer function creation algorithm newly provided in HARKTOOL5.

    https://www.hark.jp/document/packages/harktool5-gui-en/harktool5-gui.html#fd-conv-label

    Below is an example command to play a TSP for 60 seconds with the default playback device.

    
    sox /usr/share/hark/16384.little_endian.wav tsp_60sec.wav repeat 59
    play tsp_60sec.wav &
    

    You can prepare the recording data by the following steps.

    1. Keep playing the TSP repeatedly in the direction of the sound source you want to record.
    Notes:
    It’s best if you have a monitoring speaker with a constant frequency response, but if you pay attention to the following points, you can use a normal speaker.
    ・In general, if the volume is lowered or raised too much, distortion will occur depending on the characteristics of the amplifier. It is better not to go below 20% or above 80%.
    ・It is better to use PC speakers with a certain diameter instead of small speakers built into smartphones. You can also take the approach of connecting a good quality speaker to your smartphone.
    ・For PCs, software effects (theater mode, etc.) attached to the Audio chipset may be enabled, and for smartphones, the vendor’s own virtual high quality technology may be enabled, so please turn it off.

    2. Record the TSP of “1.” in multi-channel with your microphone array. Any recording software can be used, but it is recommended to select a sampling frequency of 16 kHz in order to use HARK with the default settings.
    Notes:
    Respeaker has a function to output 1ch data after beamforming, but please record all channels of raw PCM without using the beamforming function. It’s a good idea to record at least 20 seconds per direction.

    3. Repeat “1.” to “2.” for multiple sound source directions. Be sure to record the direction of the separation target.
    Notes:
    Please adjust the speaker volume and microphone sensitivity to avoid clipping. Do not change the speaker volume and microphone sensitivity once determined, and use the same settings in all directions. Be especially careful if you have speakers close to the microphone array.

    Regarding the distance between the speaker (sound source) and the microphone array:
    Place the loudspeaker at the sound source position of interest to be localized or isolated. For voice, the speaker should be positioned close to the mouth of the person speaking. The conversational robot will be about 1m, but if you are sitting on a seat and talking to a PC, it will be about 30cm. No minimum distance is specified, but be careful not to clip.

    4. After recording is completed in all directions, select a section containing sound and select at least 10 seconds or more (eg 16 seconds) to cut out. You can use any software to cut out, but please be careful not to convert the output format. With software such as sox, if you specify only the start time and length with the trim command, the format is preserved.
    Notes:
    For ease of setting in HARKTOOL5, it would be better if the PCM data for each direction has the same length. Also, since the space reflection sound is not included immediately after the start of the section containing the sound, it is better to start cutting out about 1 second after the start of the section containing the sound, not immediately after the start. . However, if the reverberation continues for a few seconds in a hall, etc., shift the extraction start point according to the reverberation time so that the section that fully includes the reflected sound is extracted.

    Q.2
    And I would like to know if there is a minimum distance between the loudspeaker and the microphone array when the response is being recorded?

    A.2
    As shown in the steps above, there is no minimum distance if you are careful with clipping. However, if the microphone array is placed directly on a table, it can be adversely affected by table reflections. It can also pick up table vibrations. If it is judged that there is an adverse effect, consider floating the microphone array with a tripod or the like.

    Q.3
    The location where the recording is made is complex with obstacles, what is the minimum number of TSP recordings that you recommend around the microphone array?

    A.3
    If the sound source position is fixed, the only mandatory source direction is the direction where the source to be separated is located. The sound source positions do not have to be evenly spaced. The sound source is not limited to the object such as voice, but also includes noise from a specific direction if you want to remove it by separating it. Also, it is necessary to record in a positional relationship where the sound reaches the microphone array directly. When recording TSP, be careful not to place any obstacles between the speaker and the microphone array that would block the direct sound arrival.

    As is concerned, in environments where the transfer function varies significantly with azimuth change (e.g., environments with many obstacles or rooms with complex shapes), the transfer function may not match when deviating from the known source direction, degrading the separation performance. There is no problem with simulations that synthesize inputs, but when performing live demonstrations, it is recommended to also create a transfer function for a position that is 5 to 10 degrees off the original position of the sound source. By creating such a transfer function, even if the speaker’s position deviates a little, the SourceTracker node can track the movement of the nearby sound source.
    The transfer function we provide is created with 72 directions in 5 degree units for 360 degree omnidirectional moving sound source tracking assuming that the speaker walks around the robot. On the other hand, in an environment where you know there are speakers at 15 and 45 degrees, it’s fine to restrict the orientation of the transfer function to just the directions in which the speakers are. For example, 10, 15, 20, 40, 45, and 50 degrees may be enough, assuming that the position of the speaker is slightly off. Even with such a direction-limited transfer function, it is possible to separate speaker A at 10 to 20 degrees and speaker B at 40 to 50 degrees. Of course, if you take the solution of telling the speaker A and B to stay at a point marked as the sound source location when doing the demo, then we don’t need additional TSP recordings in the vicinity of the assumed sound source.

    If you have any questions, please feel free to contact us.
    Thank you.

    Best regards,
    HARK support team

    in reply to: iGEVD-MUSIC法について #2556

    お問い合わせありがとうございます。

    iGEVDは雑音相関行列を逐次的に変化させるという認識で合っています。追加パッケージは不要です。
    直前(指定したフレーム前)の相関行列を雑音相関行列とみなすことで実現します。

    仰る通り、作成済み雑音相関行列を CMLoad ノードで読み込む代わりに CMMakerFromFFT または CMMakerFromFFTwithFlag ノードで相関行列を生成しながら LocalizeMUSIC ノードの NOISECM 端子に与えるネットワークにします。
    ここで注意点として、INPUT 端子へ入力する信号と NOISECM 端子へ入力する雑音相関行列を同じフレームから生成してしまうと自分自身を WhiteNoise 化してしまうため MUSIC スペクトルでピークが出なくなってしまいます。そのため、 Delay ノードを挿入して入力フレームをずらす必要があります。
    HARKの仕様として、 Delay ノードに与える遅延量は負値で与える必要がありますのでご注意ください。正値で入力した場合、後段ノードに対して入力が揃っていない状態で計算指示を出している意味になりクラッシュします。負値の場合は、後段ノードに先行フレームなのでバッファに保持しておいてくださいという指示になり、後段ノードの計算開始タイミングをずらすという処理となります。

    iGEVD-MUSIC の場合は LocalizeMUSIC のパラメータを GEVD に、iGSVD-MUSIC の場合は LocalizeMUSIC のパラメータを GSVD に設定して下さい。

    iGEVD/iGSVD いずれの場合も継続音がある場合は雑音として扱われてしまうため、人間の声で「あーーーー」と言い続けていたり電子音で「ピーーーー」と鳴り続けている場合には音の出始め部分だけピークが出て、あるフレーム以降はピークが消えます。
    検出したい継続音がある場合は、 Delay ノードの遅延フレーム数と CMMakerFromFFT ノードや LocalizeMUSIC ノードのウィンドウサイズを調整して頂くと解決できる場合があります。

    ご不明な点がございましたら、コメントでご返信ください。

    以上、宜しくお願い致します。
    HARK Support Team.

    in reply to: Kaldi results / training a new model #2365

    Yes, the correct way is to adjust the MultiGain connected after AudioStreamFromMic. To check the amplitude of the separated sound, check the output of SaveWave PCM. The HARK Cookbook URL below is an example of a SaveWave PCM connection. The IJCAI-PRICAI network file differs in that the separated sound after noise suppression is output, but the connection is such that the separated sound is output as in “Connection example 2”.
    https://www.hark.jp/document/hark-cookbook-en/subsec-Separation-002.html

    Note: The IJCAI-PRICAI network file uses the separated sound file output by SaveWave PCM only for confirmation. When converting to features, the frequency domain is calculated as it is, so be aware that changing the gain parameter of Synthesize does not affect the features used in the recognition process.

    Use a toolkit called Kaldi to train the model. Kaldi contains a number of sample recipes for learning models with the corpus.
    https://www.kaldi-asr.org/
    https://github.com/kaldi-asr/kaldi
    We use a paid corpus, but there are also free corpus. Fortunately, there are many free English corpus.

    Note that we are using MSLS features. It is not a general MFCC features. Therefore, we will propose two methods, so please select the one you want.
    We have confirmed that using MSLS features is better than MFCC features, so we chose method 2, but the work cost is less if we choose 1.

    1. Simply replace the MSLS Extraction contained in the HARK network file with the MFCC Extraction and match the feature dimensions to those used by the recipe.
    2. Understand the features output by MSLS Extraction and make some patches to the recipes used for learning Kaldi.

    Work required to prepare training data:
    First, the impulse data is convoluted into the corpus data to be used, and the input data that simulates the microphone array coming from various sound source directions is prepared.

    For method 1:
    Next, input the data that simulates the input of the prepared microphone array to the network file, and use the separated sound file output by SaveWave PCM for learning.

    For method 2:
    Next, prepare a network file to obtain the features to be learned. Duplicate the network file you are currently using for speech recognition and make the following modifications: Use AudioStreamFromWAV instead of AudioStreamFromMic. At that time, don’t forget to set CONDITION for the EOF terminal. HARK also has a Save HTK Feature node for saving in HTK Feature format. The feature amount input to SpeechRecognition (SMN) Client is connected to SaveHTKFeature. At that time, set the parameter of SaveHTKFeature to USER.
    In the created network file, data that simulates the input of the microphone array prepared first is input, and the output feature amount file is used for training.
    Replace the features learned by Kaldi with those output by HARK. Also, match the number of dimensions in the config file related to the features of the learning recipe.
    Supplementary explanation: Kaldi has a method of learning while converting PCM data to features, but please do not use Kaldi’s feature conversion function and directly read the HTK Feature format output by HARK for learning. By doing so, the patch that outputs the MSLS feature to Kaldi’s feature conversion program becomes unnecessary.

    Best regards,
    HARK support team.

    in reply to: Kaldi results / training a new model #2351

    Thank you for your inquiry.

    The model we are distributing is a learning of the separated sound of the TAMAGO-03 microphone array. When used with different microphone arrays, at least the difference in the volume of the separated sound input when generating the feature amount causes a decrease in recognition performance. Please try to compare the volume of the separated sound with the original evaluation set of IJCAI-PRICAI and adjust the volume until the performance improves.

    Also, if the microphone arrangement is significantly different from the TAMAGO-03 microphone array, the recognition performance may deteriorate because the tendency of distortion after separation is different. For best results, you need to create your own model by learn the separated sounds in your microphone array.

    Since it is a language model learned with a large vocabulary, many words can be recognized unless it is a word such as jargon or slang, so a language model with a small vocabulary should not be necessary. If you really need to create your own language model, please use Kaldi’s tools to create your language model. You need to run mkgraph.sh with arguments to the directory containing the “final.mdl” file and the directory of your language model.

    Best regards,
    HARK support team.

    in reply to: Use kaldi trained model in mobvoihotwords #2295

    Thank you for your inquiry.

    
    [ERROR] Expected token "<Nnet3>", got instead "<DIMENSION>".
    

    According to the content of the error message, it seems that a file that is not a model in nnet3 format was entered. First, please check the your recipe used for learning.
    From the content of the error message, it looks like you’ve probably given a model in nnet1 format.
    Is there a file called final.nnet other than final.mdl? If final.nnet exists, you should specify –nnet-type=1 instead of –nnet-type=3 because it is a learning recipe for nnet1.

    For details, refer to the following items in HARK-Document.
    https://www.hark.jp/document/hark-document-en/subsec-KaldiDecoder.html

    Best regards,
    HARK Support Team.

    お問い合わせありがとうございます。

    下記URLにファイルフォーマットの仕様が書かれていますので、ご参照ください。
    https://www.hark.jp/document/hark-document-ja/sec-formats.html

    C/C++の実装サンプルで宜しければ、HARKが読み書きに使用しているIOライブラリのlibharkio3のソースコード等も御座います。
    Ubuntuの端末上では、「apt source libharkio3」でダウンロード可能です。
    その他環境でダウンロードされる場合は、下記URLのリンクから最新版をダウンロードしてご利用ください。
    https://www.hark.jp/download/source-code/

    以上、宜しくお願い致します。
    HARKサポートチーム

    お問い合わせありがとうございます。

    > ●質問1
    > 処理分配機能について、ドキュメント(3.1.0)のどのページを見ればよいか、教えていただけませんでしょうか?
    > (目次からそれらしいのがわからず、それらしいキーワードでぐぐっても探せなかったため)

    確認致しましたところ、ドキュメントの更新作業に遅れが発生しており
    十分な情報がまだ公開されていない状況となっております。
    もし宜しければ、別のThreadを立ててPostして頂けませんでしょうか。

    > ●質問2
    > SourceSelectorByDirectionのパラーメータ値(フィルタリングする角度情報)を外部から動的に与えるにはどうすればよいでしょうか?例えば、時刻t1では0-10度、時刻t2では20-30度、時刻t3では70-90度のように、動的に任意の角度を渡したいのですが、その場合、どのようなノードを使えばよいでしょうか?
    > (やりたいことは質問3の具体例部分です)

    SourceSelectorByDirectionは静止した話者方向のみを残すフィルタリングを目的としているため、
    フィルタリングする角度情報を動的に与えることは出来ません。
    HARK-Python等でSource情報を入力してフィルタ方向を決定するノードを実装する必要があります。
    前回の図ではConstantLocalizationを使用されていますが、時間で動的に変化する音源を追跡するという事で宜しいでしょうか?その場合には、LocalizeMUSIC等の定位ノードで音源検出を行う必要があります。
    動的に変化する音源であるが、音源方向が既知であるという場合についても考えましたがマイクアレイからの入力との事でしたので、お使いになる用途について確認させて頂ければと思います。

    > ●質問3
    > SaveWavePCMを複数音源の音声を結合する方法がわからないので教えていただきたい。

    INPUT入力端子は1つですが、複数音源のスペクトルデータが入力されています。
    まず、SaveWavePCMの挙動について説明させて頂きます。
    SOURCES入力端子には音源情報(音源ID、定位結果の座標など)が Vector (C++ の std::vector に相当) で入力されます。また、INPUT入力端子には分離スペクトルが Map(C++ の std::map に相当)で入力されます。つまり、どちらの入力端子でも複数音源のデータを1端子で入力しています。
    SaveWavePCMノードは毎フレーム受け取る Map の同一の Key (音源ID)を1つのファイルに書き出します。つまり、有音区間のデータしか書き出しされません。SOURCES入力端子が接続されている場合は、音源情報に含まれる音源IDだけがファイルに書き出されます。SOURCES入力端子が未接続時は Map に含まれるすべての Key (音源ID)が出力されます。

    無音区間を含めて結合する必要がある場合について:
    soxなどの外部ツールをお使いください。
    SaveSourceLocationノードで音源情報をファイルに出力する事が可能ですので、各音声ファイルの開始/終了フレーム(音声区間)をご確認頂く事が可能です。その時間情報に基づき、sox等の外部ツールを使って結合する事でご希望のファイルを得る事が出来ます。soxの場合、無音に対して音声ファイルの開始時間を与えてMixingしたものをファイルに書き出すのが楽だと思います。

    質問3の最後に書かれていた具体例について:
    既知の音源方向であると仮定して書かせて頂きます。
    前者はt1~t5までが連続しているため音源情報のIDが同一で、音源座標の情報が「 t1=> 5度 =>t2=> 35度 =>t3=> 10度 =>t4=> 75度 =>t5 」と変動していれば1つの音声データとして出力可能です。後者の場合にはt1~t3とt4~t5の2つの区間に分かれてしまっているので2つの音声データとして出力されます。
    既知の特定時間で変動する音源情報を作るためには、次のように作成します。
    まず、IterCountノードで現在のフレームカウント(16000Hzサンプリング、ADVANCEが160サンプルの初期設定では1フレームが10msです。)を取得し、これとConstantノードで与える定数(何フレーム目で切り替えるか)をGreaterまたはSmallerノードで比較した結果をIFノードの条件(COND端子の入力)とします。各区間での方向を表す座標を与えたConstantLocalizationノードをIFノードのTHEN端子とELSE端子に入力してこれを切り替える回数だけ多段に接続してください。
    また、前者/後者の2つの音源情報をCombineSourceノードで結合し、SOURCES端子の入力とします。
    *)別件ですが、Wordpress原因で図が添付できない問題が解決しましたので、ご連絡させて頂きます。テキストだと分かりにくいかと思われますので、後ほどサンプルを添付させて頂きます。

    > ●質問4
    > 質問3の具体例のような処理を行う場合に必要となるPCのスペックを検討しています。
    > 上記の処理は主にビームフォーミング処理と音声結合処理から構成されますが、どの程度のスペックのPCで各々の計算時間がどの程度になるのか、知見がございましらご教示頂けないでしょうか?

    毎年、HARK講習会を開催しておりますが来訪者の方には下記スペックのPCを準備して頂いております。
    プロセッサ:Core iシリーズ (メモリ:4GB以上搭載、SSD搭載 を推奨)

    ビームフォーミング処理等は使用するアルゴリズムやパラメータで計算時間が異なりますので具体的な時間は申し上げにくいのですが、上記スペックのPCであればリアルタイムに処理を行うことが出来ます。
    オフライン(ファイル入力)では実時間より短くなりますが、実際に処理を行って確認して頂く必要があります。


    投稿タイトルと異なる内容のご質問となる場合(例えば 質問1 や 質問4 のような場合)は、別のThreadに分けて投稿して頂いた方が他の方からも回答が付きやすくなります。ご検討ください。

    以上、宜しくお願い致します。
    HARK Support Team,

    お問い合わせありがとうございます。

    > ソケット通信でアレイマイクの音声を送信して、受信側で任意の方向ごとに音声を分離して出力したいと考えています。実現可能か?また実現方法について下記3点についてご質問させてください。

    実現可能です。実現方法は複数あります。

    • HarkDataStreamSenderの出力を受信するノードを作る(C++/Pythonは問わない)
    • 受信側ネットワークファイルの最初のノードをAudioStreamFromMicにして、デバイスタイプにNETWORKを選択する
       送信側の仕様については下記URLに記述がありますが、IEEE float形式のrawデータを送信するだけですのでシンプルな実装で済みます
       動作確認は、arecordをIEEE float形式(FLOAT_LE)で実行し、pipeでtcpdump(HARKのAudioStreamFromMic宛て)に送るだけで動きます(TCP/IPセッションの管理などのために、実際の運用ではアプリを書かれた方が良いと思います)
       https://www.hark.jp/document/hark-document-ja/subsec-AudioStreamFromMic.html

    「ソケット通信で」の部分が重要でなければ下記の候補もご検討ください。

    • HARK-ROSのPublisher/Subscriberを使用する(ROSの知識が必要になります)
    • HARK 3.1 から処理分配機能が追加されましたので、ノードを実行するホストを変更する事で処理を振り分ける(現在、HARK 3.1はUbuntu版のみリリースしております)
       Windows環境の場合は、VMwareやVirtualBox等でUbuntuのVirtualMachine環境を準備する必要があります

    > (1) HarkDataStreamSenderのデータを受信するための既存ノードの有無
    > HarkDataStreamSenderのデータを受信するためのノードはありますでしょうか?自作するしかないのでしょうか?

    HarkDataStreamSenderはHARKの出力を外部アプリケーションで受信できるようにするために作成されたノードですので、受信側のノードは準備しておりません。

    > (2) hark windowsの独自ノード作成の可能性
    > 自作の場合、FAQに「HARK Windowsでの独自ノードの追加はサポートされていません。」とありました。

    Windows版のHARKでも、HARK-Python3を用いたPython実装で独自ノードを作成する事は可能です。
    Windows版のHARKでは、MSYS2やAnaconda等の複合環境を用いてビルドする関係で環境構築の難しさからソースコードに改変が必要な箇所などを含め情報を開示しておりません。つまり、C++実装による独自パッケージのビルド環境がユーザー様側で容易に構築できないためサポートしていないという表記となっております。

    > (3) 音声ファイル出力について
    > 図中のWindows側で、指定した方向の音声だけを受信したい場合で、例えば、0〜10度、90-120度の音声をそれぞれのファイルに出力するということは可能でしょう?(ドキュメントを読むと同一PC上だとできそうな気がするのですが、ソケット通信後でもできますでしょうか?)

    ソケット通信と関係なく可能です。
    SaveWavePCMノードのSOURCES(音源情報)入力端子の前段に、方位角のフィルタのためにSourceByDirectionノード(0~10度と90~120度の範囲に設定した2つを準備します)、および複数音源情報の結合にはCombineSourceノードを用いてください。
    SaveWavePCMノードのファイル名にタグを付与する機能で角度値をファイル名に埋め込むことが可能です。
    https://www.hark.jp/document/hark-document-ja/subsec-SaveWavePCM.html
    https://www.hark.jp/document/hark-document-ja/subsec-SourceSelectorByDirection.html
    https://www.hark.jp/document/hark-document-ja/subsec-CombineSource.html

    以上、宜しくお願い致します。
    HARK Support Team

Viewing 15 posts - 1 through 15 (of 74 total)