トラブルシューティング

Python バイナリパスがない

エラー メッセージ:

ERROR: An error occurred during the fetch of repository 'local_execution_config_python':
  Traceback (most recent call last):
       File "/sandbox_path/external/org_tensorflow/third_party/py/python_configure.bzl", line 208
               get_python_bin(repository_ctx)
    ...
Repository command failed

通常、Bazel がローカルの Python バイナリを検出できなかったことを示します。解決する Python バイナリの場所を特定してから、 --action_env PYTHON_BIN_PATH=<path to python binary> を Bazel コマンドに追加します。対象 システムのデフォルトである python3 バイナリを使用するように切り替えるには、 次のコマンドを実行します。

bazel build -c opt \
  --define MEDIAPIPE_DISABLE_GPU=1 \
  --action_env PYTHON_BIN_PATH=$(which python3) \
  mediapipe/examples/desktop/hello_world

必要な Python パッケージがない

エラー メッセージ:

ImportError: No module named numpy
Is numpy installed?

通常は、特定の Python パッケージがインストールされていないことを示します。次を実行してください pip install または pip3 install(Python バイナリ バージョンに応じて) それらのパッケージをインストールします。

リモート依存関係リポジトリを取得できませんでした

エラー メッセージ:

ERROR: An error occurred during the fetch of repository 'org_tensorflow':
   java.io.IOException: Error downloading [https://mirror.bazel.build/github.com/tensorflow/tensorflow/archive/77e9ffb9b2bfb1a4f7056e62d84039626923e328.tar.gz, https://github.com/tensorflow/tensorflow/archive/77e9ffb9b2bfb1a4f7056e62d84039626923e328.tar.gz] to /sandbox_path/external/org_tensorflow/77e9ffb9b2bfb1a4f7056e62d84039626923e328.tar.gz: Tried to reconnect at offset 9,944,151 but server didn't support it

or

WARNING: Download from https://storage.googleapis.com/mirror.tensorflow.org/github.com/bazelbuild/rules_swift/releases/download/0.12.1/rules_swift.0.12.1.tar.gz failed: class java.net.ConnectException Connection timed out (Connection timed out)

通常、Bazel が必要な依存関係リポジトリのダウンロードに失敗したことを示します 対応できますMedaiPipe には複数の依存関係リポジトリがあり、 ホストされています。一部の地域では、ネットワーク プロキシの設定が必要になる場合があります または VPN を使用してそれらのリソースにアクセスすることもできます。必要に応じて --host_jvm_args "-DsocksProxyHost=<ip address> -DsocksProxyPort=<port number>" Bazel コマンドに追加します。詳しくは、 問題が修正されました をご覧ください。

ネットワークの問題ではないと思われる場合は、 リソースが一時的に利用できない可能性があります。bazel clean --expunge を実行してください 後で再試行してください。それでも問題が解決しない場合は、 詳細なエラー メッセージが表示されます。

MediaPipe OpenCV 構成が正しくない

エラー メッセージ:

error: undefined reference to 'cv::String::deallocate()'
error: undefined reference to 'cv::String::allocate(unsigned long)'
error: undefined reference to 'cv::VideoCapture::VideoCapture(cv::String const&)'
...
error: undefined reference to 'cv::putText(cv::InputOutputArray const&, cv::String const&, cv::Point, int, double, cv::Scalar, int, int, bool)'

通常は、OpenCV が MediaPipe 用に正しく設定されていないことを示します。恐れ入りますが、 「OpenCV と FFmpeg をインストールする」コースをセクション インストールでは、MediaPipe の WORKSPACE と ローカルの opencv 用の linux_opencv/macos_opencv/windows_opencv.BUILD ファイル 使用できます。この GitHub の問題は 役立つかもしれません。

Python pip のインストール エラー

エラー メッセージ:

ERROR: Could not find a version that satisfies the requirement mediapipe
ERROR: No matching distribution found for mediapipe

pip install mediapipe を実行した後、通常はシステムに修飾された MediaPipe Python がないことを示します。 MediaPipe Python PyPI は 64 ビットを正式にサポートしています。 Python 3.7 ~ 3.10(次の OS 上)

  • x86_64 Linux
  • x86_64 macOS 10.15 以降
  • AMD64 Windows

OS が現在サポートされているにもかかわらずこのエラーが表示される場合は、 Python と pip の両方のバイナリが Python 3.7 ~ 3.10 用であることを確認しました。それ以外の場合は 以下の手順に沿って、MediaPipe Python パッケージをローカルでビルドすることを検討してください。 手順はこちらをご覧ください。

Windows での Python DLL の読み込み失敗

エラー メッセージ:

ImportError: DLL load failed: The specified module could not be found

通常、ローカルの Windows システムに Visual C++ が存在しないことを示します。 再配布可能なパッケージや Visual C++ ランタイム DLL などです。この問題は、次の方法で解決できます。 公式のブラウザを vc_redist.x64.exe または「msvc-runtime」をインストール実行してパッケージ化し、

$ python -m pip install msvc-runtime

"msvc-runtime"Python パッケージはリリースまたはメンテナンスされていない 。

ネイティブ メソッドが見つからない

エラー メッセージ:

java.lang.UnsatisfiedLinkError: No implementation found for void com.google.wick.Wick.nativeWick

通常は、必要なネイティブ ライブラリ(/libwickjni.so など)に、 含まれていないか、アプリの依存関係に含まれていないか、 検出されました。なお、Java ではすべてのネイティブ ライブラリを System.loadLibrary 関数を使用して明示的に読み込みます。

登録済みの計算ツールが見つかりません

エラー メッセージ:

No registered object with name: OurNewCalculator; Unable to find Calculator "OurNewCalculator"

通常は OurNewCalculator が名前で参照されることを示します。 CalculatorGraphConfig ですが、OurNewCalculator のライブラリ ターゲットは アプリケーション バイナリにリンクされていません。新しい電卓が 計算ツールのビルド依存関係としてこの計算ツールも追加する必要があります。 計算ツールのグラフを使用します。

計算ツールのグラフは計算の実行結果を参照するため、このエラーは実行時に捕捉されます。 計算するには、CalculatorGraphConfig::Node:calculator フィールドを使用します。 計算ツールのライブラリがアプリケーション バイナリにリンクされている場合、 計算ツールは自動的に名前によって registration.h ライブラリを使用する REGISTER_CALCULATOR マクロ。注: REGISTER_CALCULATOR では、名前空間接頭辞を使用して計算ツールを登録できます。 C++ 名前空間と同じです。この場合、計算ツールのグラフにも 同じ名前空間の接頭辞を使用します。

メモリ不足エラー

メモリを使い切ると、内部に大量のパケットが蓄積していることを示している可能性があります。 MediaPipe グラフを実行します。これには、次のようなさまざまな理由が考えられます。

  1. グラフに表示される電卓の中には、単に リアルタイム入力ストリーム(ビデオカメラなど)から送信される
  2. 一部の計算ツールは、決して到着しないパケットを待機しています。

問題(1)については、古いパケットをパケットのドロップで 処理します。ヒントについては、以下をご覧ください。 How to process realtime input streams

問題(2)については、ある入力ストリームで、一部の入力ストリームでパケットが不足していることが できます。デバイスや計算機が正しく設定されていないか、パケットが生成される可能性があります 散発的に発生していますこれにより、下流の計算ツールが その結果、パケットが蓄積され、その結果、 いくつか見ていきましょう。MediaPipe は、 "timestamp bounds":ヒントについては、以下をご覧ください。 How to process realtime input streams

MediaPipe 設定 CalculatorGraphConfig::max_queue_size は、 エンキューされたパケット数を自動的にモニタリングできます。 表示されます。リアルタイムの入力ストリームの場合、入力でキューに追加されたパケット数 通常は 0 か 1 になります。そうでない場合、 次の警告メッセージが表示されます。

Resolved a deadlock by increasing max_queue_size of input stream

また、CalculatorGraphConfig::report_deadlock を設定すると、 失敗し、max_queue_size などの メモリ使用制限として機能します

グラフがハングする

多くのアプリケーションは、CalculatorGraph::CloseAllPacketSources を呼び出し、 MediaPipe の実行を終了または一時停止するための CalculatorGraph::WaitUntilDone 表示されます。ここでの目的は、保留中の計算ツールやパケットが グラフをシャットダウンしますうまくいけば、 グラフのストリームが Timestamp::Done になり、すべての計算ツールが CalculatorBase::Close に到達した後、CalculatorGraph::WaitUntilDone に到達する 正常に完了します。

一部の計算機やストリームが状態 Timestamp::Done に到達できない場合、または CalculatorBase::Close の場合、メソッド CalculatorGraph::Cancel は次のようになります。 保留中のすべての計算ツールを待たずにグラフの実行を終了するために呼び出されます。 完了するまでのパケット数などです

出力タイミングが不均一

リアルタイムの MediaPipe グラフによっては、動画として表示するための一連の動画フレームが生成される場合があります。 または動画診断に使用できます。場合によっては MediaPipe グラフから 出力フレームをクラスタ内で使用した場合、たとえば、複数の出力フレームが 同じ入力フレーム クラスタから推定します。もし出力が与えられたとしても、 出力フレームの一部はすぐに置き換えられます。 同じクラスタ内にあるため、結果の確認や評価が難しくなります。 説明します。このような場合は、出力の可視化を次の方法で改善できます。 フレームを等間隔でリアルタイムに表示します。

MediaPipe は、タイムスタンプをリアルタイムのポイントにマッピングすることで、このユースケースに対応します。 各タイムスタンプはマイクロ秒単位の時刻を示し、 LiveClockSyncCalculator は、パケットの出力を遅延させ、 あります。この種の計算機は、次のように出力のタイミングを調整します。

  1. 出力の間隔は、 できる限り忠実に再現します
  2. 最小限の遅延で出力が生成されます。

CalculatorGraph で入力が遅れる

多くのリアルタイムの MediaPipe グラフでは、低レイテンシが目標です。MediaPipe 「パイプライン」と並列処理を実行できるようにして、 必要があります。通常、レイテンシが最小になるのは、 「クリティカル パス」に沿って各計算ツールで必要となる合計時間連続する 計算ツールMediaPipe グラフのレイテンシが理想レベルより悪くなる可能性がある 遅延が遅延によって発生します(詳細は、 出力タイミングが不均一である

グラフ内の一部の計算ツールがリアルタイムの入力値に対応できない場合 レイテンシが増大し続けるため、 ドロップします。推奨される手法は、MediaPipe を使用することです。 専用の計算ツールが用意されています FlowLimiterCalculator: How to process realtime input streams