HARK FORUM › 連続してループ中のループを実行する問題
- This topic has 13 replies, 3 voices, and was last updated 8 months, 1 week ago by nterakado.
-
AuthorPosts
-
February 4, 2024 at 5:37 pm #2698
一度batchflowを実行するだけで、.n拡張子のファイルを無限に実行する方法があるかどうかお伺いしたいです。終了条件は、手動でbatchファイルを停止するまでで、その中でどのファイルを開くかはPyCodeExecutorを使用して選択されます。
February 8, 2024 at 10:18 am #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.
February 11, 2024 at 4:10 am #2700申し訳ありませんが、私はまだ少し混乱しています。参考にできるサンプルプログラムはありますか?また、PyCodeExecutorを使用してファイル名を渡す方法が、画像に示されているようにする必要があるのかどうかも知りたいです。というのも、画像の方法で渡すとエラーが発生するためです。以下にPythonプログラムの画像も添付します。
(画像のアップロードにエラーがあったため、もう一度新しくアップロードしました。)- This reply was modified 9 months, 2 weeks ago by 程治.
- This reply was modified 9 months, 2 weeks ago by 程治.
Attachments:
February 12, 2024 at 2:29 pm #2707ご連絡ありがとうございます。
こちらで想定していたものと違う使用法でしたので、
すぐにご用意できるサンプルがありません。
申し訳ありませんが、少しお時間をいただきたく思います。また、確認なのですが、
複数のファイルを次々に再生するのではなく、
一度選択したファイルをループ再生するという目的でよろしいでしょうか?以上、よろしくお願いいたします。
HARKサポートチームFebruary 13, 2024 at 12:34 am #2708はい、一つのファイルを選択してループ再生することで、
私はこのファイル中の音声ファイルを継続的に即時で更新する予定です。February 26, 2024 at 8:37 pm #2713失礼いたしますが、参考できる例はありますでしょうか。
February 27, 2024 at 6:26 pm #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.- This reply was modified 8 months, 4 weeks ago by Masayuki Takigahira.
March 5, 2024 at 5:14 pm #2720上記の方法を使用した結果、成功したようですが、出力がされていないようです。ネットワークファイルにDispalyLocalizationを追加すると、連続実行が直ちに中断されることがあります。以下の画像では、2番目のPythonノードが認識された座標を出力するはずですが、実行後に何も表示されません。そのため、最初のPythonノードが各フレームの情報を出力できていない可能性があると考えています。
March 13, 2024 at 3:09 pm #2723お手数おかけして、申し訳ございませんが、解決策がありますか?
March 15, 2024 at 8:16 pm #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.- This reply was modified 8 months, 1 week ago by Masayuki Takigahira.
- This reply was modified 8 months, 1 week ago by Masayuki Takigahira.
- This reply was modified 8 months, 1 week ago by Masayuki Takigahira.
March 18, 2024 at 12:11 am #2730使用トレーニング教材では正常に実行できたため、音声ファイルが30チャンネルのWAVファイルであることが原因で、AudioStreamRepeaterFromWaveが正常に出力されない可能性があります。
March 18, 2024 at 12:55 pm #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 Compilation の Step5 : hark-core installation instruction をご参照ください。
PyHARK ではリファクタリングされており、この制限が無く再ビルトが不要です。
以上、宜しくお願い致します。
HARK Support Team.- This reply was modified 8 months, 1 week ago by Masayuki Takigahira.
March 18, 2024 at 3:27 pm #2735Windowsシステムを使用する場合、どのように変更するかについてはどのようになりますか。
March 19, 2024 at 3:55 pm #2736申し訳ありませんが、Windows版のサポートは終了しております。
最新のAnaconda環境に対応していないこともあり、
Windowsホストでご利用する場合は
VMware等の仮想環境でLinuxのVMイメージを実行する方法をご案内しています。以上、よろしくお願いいたします。
HARKサポートチーム -
AuthorPosts
- You must be logged in to reply to this topic.