連続してループ中のループを実行する問題

HARK FORUM 連続してループ中のループを実行する問題

Viewing 14 posts - 1 through 14 (of 14 total)
  • Author
    Posts
  • #2698
    程治
    Participant

      一度batchflowを実行するだけで、.n拡張子のファイルを無限に実行する方法があるかどうかお伺いしたいです。終了条件は、手動でbatchファイルを停止するまでで、その中でどのファイルを開くかはPyCodeExecutorを使用して選択されます。

      #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.

      #2700
      程治
      Participant

        申し訳ありませんが、私はまだ少し混乱しています。参考にできるサンプルプログラムはありますか?また、PyCodeExecutorを使用してファイル名を渡す方法が、画像に示されているようにする必要があるのかどうかも知りたいです。というのも、画像の方法で渡すとエラーが発生するためです。以下にPythonプログラムの画像も添付します。
        (画像のアップロードにエラーがあったため、もう一度新しくアップロードしました。)

        • This reply was modified 9 months, 2 weeks ago by 程治.
        • This reply was modified 9 months, 2 weeks ago by 程治.
        #2707
        nterakado
        Moderator

          ご連絡ありがとうございます。

          こちらで想定していたものと違う使用法でしたので、
          すぐにご用意できるサンプルがありません。
          申し訳ありませんが、少しお時間をいただきたく思います。

          また、確認なのですが、
          複数のファイルを次々に再生するのではなく、
          一度選択したファイルをループ再生するという目的でよろしいでしょうか?

          以上、よろしくお願いいたします。
          HARKサポートチーム

          #2708
          程治
          Participant

            はい、一つのファイルを選択してループ再生することで、
            私はこのファイル中の音声ファイルを継続的に即時で更新する予定です。

            #2713
            程治
            Participant

              失礼いたしますが、参考できる例はありますでしょうか。

              #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.

              #2720
              程治
              Participant

                上記の方法を使用した結果、成功したようですが、出力がされていないようです。ネットワークファイルにDispalyLocalizationを追加すると、連続実行が直ちに中断されることがあります。以下の画像では、2番目のPythonノードが認識された座標を出力するはずですが、実行後に何も表示されません。そのため、最初のPythonノードが各フレームの情報を出力できていない可能性があると考えています。

                Attachments:
                #2723
                程治
                Participant

                  お手数おかけして、申し訳ございませんが、解決策がありますか?

                  #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:
                  #2730
                  程治
                  Participant

                    使用トレーニング教材では正常に実行できたため、音声ファイルが30チャンネルのWAVファイルであることが原因で、AudioStreamRepeaterFromWaveが正常に出力されない可能性があります。

                    #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.

                    #2735
                    程治
                    Participant

                      Windowsシステムを使用する場合、どのように変更するかについてはどのようになりますか。

                      #2736
                      nterakado
                      Moderator

                        申し訳ありませんが、Windows版のサポートは終了しております。
                        最新のAnaconda環境に対応していないこともあり、
                        Windowsホストでご利用する場合は
                        VMware等の仮想環境でLinuxのVMイメージを実行する方法をご案内しています。

                        以上、よろしくお願いいたします。
                        HARKサポートチーム

                      Viewing 14 posts - 1 through 14 (of 14 total)
                      • You must be logged in to reply to this topic.