音源定位結果をhark-pythonで扱うには

HARK FORUM 音源定位結果をhark-pythonで扱うには

Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #938
    kei_15
    Participant

      お世話になっております。

      画像認識による人物検知とHARKによる音源分離を組み合わせて雑音環境下でも頑強な音声認識ができるようなシステム構築を考えている者です。
      具体的には画像認識による話者の位置情報をhark-pythonへと渡し、その後そのデータを音源分離ノードの入力とすることを考えています。

      現在、まずはhark-pythondからDisplayLocalization等のsource型を入力とするノードにデータを渡せないか練習している段階なのですが、解決できないエラーがございます。
      実行時のネットワークファイルを添付いたします。
      実行時のpythonファイルは以下のとおりです。

      # py_source.py
      from harkpython import harkbasenode
      
      class HarkNode(harkbasenode.HarkBaseNode):
         def __init__(self):
             self.outputNames=("output",)  # one output terminal named "output"
             self.outputTypes=("prim_source",)  # the type is primitive float.
      
         def calculate(self):
             self.outputValues["output"] = self.input
             print("==========")
             print(self.input)
             print("==========")
             self.outputValues["output"] = self.input[0]

      出力されるエラーを一部抜粋します。

      RuntimeError: HARK-Middleware: HARK exception thrown at harkmw/src/node.cc:185 (Node_process): /home/user/scripts/packaging/HARK-System/hark-base/src/conversion.cc line 267: Failed to dispatch conversion between N4HARK6SourceE and N4HARK6VectorINS_5RCPtrINS_6ObjectEEEEE
      /home/user/scripts/packaging/HARK-System/hark-base/src/BufferedNode.cc line 98: Node DisplayLocalization (type 19DisplayLocalization) Exception caught in BufferedNode::getOutput

      なにかご存知でしたらご教授頂きたいです。
      以上、よろしくお願い致します。

      Attachments:
      #953

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

      DisplayLocalization ノード等へ入力されていますので、 PyCodeExecutor3 ノードの出力は Vector<Source> 型になっていなければなりません。全てのノードについて入出力の型が掲載されていますので、詳細はHARK-Documentのノードリファレンスをご参照ください。

      つまり、今回のケースは出力端子の型設定を
      self.outputTypes=("prime_source",)
      ではなく
      self.outputTypes=("vector_source",)
      と設定する必要が御座います。

      それに伴い
      self.outputValues["output"] = self.input[0]
      と書かれている行についても次のようにする必要が御座います。
      self.outputValues["output"] = [self.input[0]]
      更に、入力されたVectorサイズが0である(定位無しの)可能性が御座いますので、次のようにしていなければ実行中にクラッシュする可能性が御座います。
      self.outputValues["output"] = [] if len(self.input)<1 else [self.input[0]]

      また、余談ですが

      self.outputValues["output"] = self.input
      self.outputValues["output"] = self.input[0]

      のように同一出力端子に2度書き込みを行った場合、
      後で書き込まれた値のみが使われます。
      calculate() メソッドを抜ける時点で設定した型と
      最終的に書き込まれている型が不一致している場合には
      エラーが発生しますのでご注意ください。

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

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