メインコンテンツまでスキップ

エラーコードカタログ

Neatは、NeatErrorPullErrorを通じて、型エラーなどの問題を報告します。各エラーには、安定したエラーコード、人間が読めるメッセージ、および利用可能な場合は、構造化されたコンテキストを含むGraphReportが含まれます。

エラーコードをプログラムによるトリアージに使用します。メッセージを開発者に表示します。すべての公開定数は、pipeline/ErrorCodes.hに定義されています。

動作に関する破壊的な変更と移行

診断分類では、特定の GStreamer の根本原因が保持されるようになりました。パブリックメソッドのシグネチャは変更されていませんが、正確なエラー文字列を比較するコードは、変更が必要になる場合があります。

前回のマッチより詳細なコードが返されるようになりました移行
misconfig.caps ランタイム向けに GStreamer 交渉エラーmisconfig.media_capsまたは misconfig.media_format 形式が互換性がない場合に限るメディアコードを処理します。保持します。 misconfig.caps これは、キャップのオーバーライドと隣接するノードのコントラクトに関するフレームワークの検証にのみ使用されます。
gst_parse_launchの失敗に対して、build.parse_launchを処理します。プラグインが見つからない、プロパティが無効、またはパイプラインの構文エラーなど、build.plugin_missingbuild.property_invalid、またはbuild.pipeline_syntaxなどの具体的なエラーコードを処理します。分類されていないパーサーの失敗の場合は、build.parse_launchをフォールバックとして使用します。
伝播されたバス障害に対するruntime.pull根本原因コード(例:misconfig.media_capsio.rtsp_connection_failed、またはresource.output_pool_exhausted根本原因コードを処理し、デフォルトのブランチを維持します。runtime.pullは、特定の原因がないローカルのプル障害に対するフォールバックとして残ります。

文字列リテラルを繰り返し使用する代わりに、C++またはPythonの定数を使用してください。常に、新しいバージョンのNeat Libraryで導入されたコードに対して、デフォルトのパスを保持するようにしてください。

パブリック定数

両方の言語 API で同じ値が利用できます。

エラーコードC++Python
misconfig.pipeline_shapeerror_codes::kPipelineShapepyneat.ERROR_PIPELINE_SHAPE
misconfig.capserror_codes::kCapspyneat.ERROR_CAPS
misconfig.input_shapeerror_codes::kInputShapepyneat.ERROR_INPUT_SHAPE
misconfig.runtime_abi_mismatcherror_codes::kRuntimeAbiMismatchpyneat.ERROR_RUNTIME_ABI_MISMATCH
misconfig.graph_element_nameerror_codes::kGraphElementNamepyneat.ERROR_GRAPH_ELEMENT_NAME
misconfig.media_capserror_codes::kMediaCapspyneat.ERROR_MEDIA_CAPS
misconfig.media_formaterror_codes::kMediaFormatpyneat.ERROR_MEDIA_FORMAT
misconfig.input_capacityerror_codes::kInputCapacitypyneat.ERROR_INPUT_CAPACITY
misconfig.tensor_dtype_missingerror_codes::kTensorDtypeMissingpyneat.ERROR_TENSOR_DTYPE_MISSING
misconfig.option_out_of_rangeerror_codes::kOptionOutOfRangepyneat.ERROR_OPTION_OUT_OF_RANGE
build.parse_launcherror_codes::kParseLaunchpyneat.ERROR_PARSE_LAUNCH
build.pipeline_syntaxerror_codes::kPipelineSyntaxpyneat.ERROR_PIPELINE_SYNTAX
build.plugin_missingerror_codes::kPluginMissingpyneat.ERROR_PLUGIN_MISSING
build.property_invaliderror_codes::kPropertyInvalidpyneat.ERROR_PROPERTY_INVALID
runtime.pullerror_codes::kRuntimePullpyneat.ERROR_RUNTIME_PULL
runtime.element_failederror_codes::kRuntimeElementFailedpyneat.ERROR_RUNTIME_ELEMENT_FAILED
runtime.output_timeouterror_codes::kOutputTimeoutpyneat.ERROR_OUTPUT_TIMEOUT
runtime.unexpected_eoserror_codes::kUnexpectedEospyneat.ERROR_UNEXPECTED_EOS
io.parseerror_codes::kIoParsepyneat.ERROR_IO_PARSE
io.openerror_codes::kIoOpenpyneat.ERROR_IO_OPEN
io.file_not_founderror_codes::kFileNotFoundpyneat.ERROR_FILE_NOT_FOUND
io.permission_deniederror_codes::kPermissionDeniedpyneat.ERROR_PERMISSION_DENIED
io.rtsp_connection_failederror_codes::kRtspConnectionFailedpyneat.ERROR_RTSP_CONNECTION_FAILED
io.camera_not_founderror_codes::kCameraNotFoundpyneat.ERROR_CAMERA_NOT_FOUND
io.model_not_founderror_codes::kModelNotFoundpyneat.ERROR_MODEL_NOT_FOUND
io.source_endederror_codes::kSourceEndedpyneat.ERROR_SOURCE_ENDED
codec.invalid_h264_streamerror_codes::kInvalidH264Streampyneat.ERROR_INVALID_H264_STREAM
codec.decode_failederror_codes::kDecodeFailedpyneat.ERROR_DECODE_FAILED
codec.encode_failederror_codes::kEncodeFailedpyneat.ERROR_ENCODE_FAILED
resource.memory_allocation_failederror_codes::kMemoryAllocationFailedpyneat.ERROR_MEMORY_ALLOCATION_FAILED
resource.device_memory_exhaustederror_codes::kDeviceMemoryExhaustedpyneat.ERROR_DEVICE_MEMORY_EXHAUSTED
resource.output_pool_exhaustederror_codes::kOutputPoolExhaustedpyneat.ERROR_OUTPUT_POOL_EXHAUSTED
resource.buffer_too_smallerror_codes::kBufferTooSmallpyneat.ERROR_BUFFER_TOO_SMALL
resource.disk_fullerror_codes::kDiskFullpyneat.ERROR_DISK_FULL
infra.dispatcher_unavailableerror_codes::kDispatcherUnavailablepyneat.ERROR_DISPATCHER_UNAVAILABLE
infra.accelerator_execution_failederror_codes::kAcceleratorExecutionFailedpyneat.ERROR_ACCELERATOR_EXECUTION_FAILED
DispatcherUnavailable(レガシー)error_codes::kDispatcherUnavailableLegacypyneat.ERROR_DISPATCHER_UNAVAILABLE_LEGACY
internal.plugin_failureerror_codes::kInternalPluginFailurepyneat.ERROR_INTERNAL_PLUGIN_FAILURE

設定ミス

コード発生時対処法
misconfig.pipeline_shapeグラフのトポロジーが無効であるか、入力/出力境界がありません。グラフの接続を修正し、必要なInputまたはOutputノードを追加してください。
misconfig.capsフレームワークの検証中に、キャプチャオーバーライドまたは隣接するノードとの契約が競合しています。宣言されたフォーマット、寸法、レート、および隣接するノードとの契約を調整してください。
misconfig.input_shape入力テンソルが、想定される形状またはデータ型と一致しません。想定される入力を提供するか、モデルオプションを通じてモデルの前処理を設定してください。
misconfig.runtime_abi_mismatchNeatとインストールされたランタイムプラグインが互換性のないABIを使用しています。互換性のあるNeat Libraryとランタイムプラグインのビルドをインストールしてください。
misconfig.graph_element_nameカスタムフラグメントに、安定したノード名を割り当てることができない要素が含まれています。カスタム要素には、安定した一意の名前を付けてください。
misconfig.media_caps接続されている GStreamer ステージは、互換性のないメディア機能を持っています。ステージを調整するか、必要な変換、スケーリング、またはレート変換ノードを挿入してください。
misconfig.media_format接続されているステージで互換性のないメディア形式が使用されています。共通の形式を設定するか、明示的な形式変換を追加してください。
misconfig.input_capacity入力された画像が、設定された前処理の入力容量を超えています。input_max_widthinput_max_heightの値を大きくするか、モデル処理の前に画像のサイズを調整してください。
misconfig.tensor_dtype_missingテンソルのデータ型または形式が指定されていません。上流のテンソルコントラクトで、サポートされているデータ型を宣言してください。
misconfig.option_out_of_range現在の入力契約に対して、オプションが無効です。診断で示された範囲内の値にオプションを設定してください。

ビルドの失敗

コード発生時対処法
build.parse_launchGStreamer が生成されたパイプラインを構築できません。カスタムフラグメント、要素のプロパティ、およびプラグインの可用性を確認してください。
build.pipeline_syntaxカスタムの GStreamer パイプラインのフラグメントに、構文エラーがあります。フラグメントを修正し、gst-launch-1.0 を使用して検証してください。
build.plugin_missing必要な GStreamer 要素またはコーデックプラグインが利用できません。コンポーネントをインストールまたは置き換え、その後 gst-inspect-1.0 を使用して、それが正しく機能することを確認してください。
build.property_invalid要素のプロパティ名または値が無効です。以下のプロパティを確認してください。 gst-inspect-1.0 <element>.

ランタイム時のエラー

コード発生時対処法
runtime.pullより具体的なコードがない場合、プル操作は失敗します。添付されているレポートと、最初に発生した上流のエラーを確認してください。
runtime.element_failedより具体的な分類がない場合、パイプラインのステージは停止します。報告されたステージ構成と、その上流からの入力について修正してください。
runtime.output_timeout設定された待機時間が経過するまでに、出力は生成されません。ソースのフローとバックプレッシャーを確認するか、待機時間が予想される場合はタイムアウトを調整してください。
runtime.unexpected_eosパイプラインが、必要な出力を生成する前にEOS(End of Stream)に到達しました。入力にEOSが早期に発生していないか確認し、十分な量の入力が供給されていることを確認してください。

I/Oエラー

コード発生時対処法
io.parseNeat JSON、モデルコントラクト、またはステージ構成を解析できません。構成の構文、スキーマ、および必須フィールドを検証します。
io.openNeat は、ファイル、デバイス、またはリモートリソースを開けませんでした。パスまたはアドレス、アクセス許可、およびリソースの可用性を確認してください。
io.file_not_found入力ファイルが存在しません。パスを修正し、ファイルがDevKit上に存在することを確認してください。
io.permission_denied必要なアクセス権限でファイルまたはデバイスを開けません。対象のリソースに対する適切な所有権またはアクセス許可を確認してください。
RTSPソースへの接続に失敗しました。io.rtsp_connection_failedNeat がRTSPソースに接続できません。URL、サーバー、ネットワーク接続、および認証情報を確認してください。
io.camera_not_found要求されたカメラは利用できません。利用可能なカメラを選択するか、デフォルトのカメラを使用してください。
io.model_not_found要求されたモデルアーカイブが見つかりません。モデルのパスを修正し、モデルアーカイブがインストールされていることを確認してください。
io.source_ended入力ソースが通常終了に達しました。そのソースの読み込みを停止するか、アプリケーションがより多くのデータを必要とする場合は、追加の入力を提供してください。

パイプラインの実行失敗

コード発生時対処法
misconfig.pipeline_shapeパイプラインの構成が無効であるか、GStreamer の構築後に、最終要素の名前が重複している、曖昧である、または欠落しています。各明示的な要素に、それが存在するセグメント内で一意の短い名前を付けてください。name= の宣言と名前付きパッドへの参照を同期させてください。
build.parse_launchGStreamer は、構文、プラグイン、またはプロパティが無効であるため、最終的な起動文字列を解析または構築できません。GraphReport::pipeline_string を調べてください。gst-launch-1.0 を使用してフラグメントを、gst-inspect-1.0 を使用してプラグインを検証してください。

これらのチェックは、Graph::build() の実行中に自動的に行われます。入力に依存する接続されたセグメントの場合、最初の入力によってセグメントが生成されると、同じコードと GraphReport が表示されることがあります。

コーデックのエラー

コード発生時対処法
codec.invalid_h264_stream入力に有効なH.264フレームが含まれていません。完全なH.264ストリームを供給し、設定されているコーデックを確認してください。
codec.decode_failedデコーダーが受信したストリームをデコードできません。コーデックを確認し、エンコードされた入力が完全で破損していないことを確認してください。
codec.encode_failedエンコーダーが入力されたフレームをエンコードできません。入力形式、解像度、およびエンコーダー設定を確認してください。

リソースの障害

コード発生時対処法
resource.memory_allocation_failedデバイス固有の理由がないにもかかわらず、必要なメモリの割り当てに失敗しました。ストリーム数、解像度、またはバッファリングを減らし、他のワークロードで使用されているメモリを解放してください。
resource.device_memory_exhaustedデバイスの連続したDMA/CMAメモリが不足しています。同時ストリーム数、入力解像度、またはバッファの深さを減らしてください。
resource.output_pool_exhaustedすべての出力バッファが使用中です。ゼロコピー出力は速やかに解放するか、所有権のあるコピーを使用してください。
resource.buffer_too_smallバッファーのサイズが、宣言されたフレームまたはテンソルのペイロードよりも小さい。上流の次元とストライドを修正するか、必要なバイト数を割り当てる。
resource.disk_full書き込みに失敗しました。これは、宛先に十分な空き容量がないために発生しました。空き容量を増やすか、別の宛先を選択してください。

インフラの故障

コード発生時対処法
infra.dispatcher_unavailableNeat がアクセラレータのランタイムを取得できません。DevKit との互換性を確認し、アクセラレータを専有しているワークロードを停止してください。
infra.accelerator_execution_failedアクセラレータはモデルのステージを実行できません。パイプラインを再起動し、同時実行されるアクセラレータのワークロードを削減します。

内部エラー

コード発生時対処法
internal.plugin_failureユーザーが対応できるような分類なしに、Neatプラグインがエラーを起こしました。添付のGraphReportをキャプチャし、エラーをサポートに報告してください。

DispatcherUnavailable は、互換性のために受け入れられている古い形式のスペルです。新しいアプリケーションでは、infra.dispatcher_unavailableerror_codes::kDispatcherUnavailable 定数を使用してください。

プログラムでエラーを処理する。

#include "pipeline/ErrorCodes.h"
#include "pipeline/NeatError.h"

try {
auto run = graph.build();
// Push and pull application data.
} catch (const simaai::neat::NeatError& error) {
if (error.report().error_code == simaai::neat::error_codes::kInputShape) {
handle_input_contract_error(error.report());
} else {
throw;
}
}

PullError.code は、同じ定数を使用します。what() を解析したり、人間が読めるテキストと照合したりしないでください。

関連資料