Fehlerbehebung

Fehlender Python-Binärpfad

Die Fehlermeldung:

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

weist in der Regel darauf hin, dass Bazel die lokale Python-Binärdatei nicht finden kann. Lösung suchen Sie zuerst, wo sich die Python-Binärdatei befindet, und fügen Sie --action_env PYTHON_BIN_PATH=<path to python binary> zum Bazel-Befehl. Für können Sie zur Verwendung der Standardbinärdatei 'Python3' wechseln, indem Sie die folgenden Befehl:

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

Erforderliche Python-Pakete fehlen

Die Fehlermeldung:

ImportError: No module named numpy
Is numpy installed?

zeigt normalerweise an, dass bestimmte Python-Pakete nicht installiert sind. Bitte ausführen pip install oder pip3 install, je nach Python-Binärversion, und installieren Sie diese Pakete.

Remote-Abhängigkeits-Repositories konnten nicht abgerufen werden

Die Fehlermeldung:

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)

weist in der Regel darauf hin, dass die erforderlichen Abhängigkeits-Repositories nicht heruntergeladen werden können. die MediaPipe benötigt. MedaiPipe verfügt über mehrere Abhängigkeits-Repositories, die von Google-Websites gehostet werden. In einigen Regionen müssen Sie möglicherweise einen Netzwerk-Proxy einrichten. oder über ein VPN auf diese Ressourcen zugreifen. Möglicherweise müssen Sie auch --host_jvm_args "-DsocksProxyHost=<ip address> -DsocksProxyPort=<port number>" mit dem Befehl „Baby“. Weitere Informationen finden Sie unter dieses GitHub-Problem .

Wenn du glaubst, dass es sich nicht um ein Netzwerkproblem handelt, könnte es auch passieren, Ressourcen könnten vorübergehend nicht verfügbar sein. Führen Sie bazel clean --expunge aus. und versuchen Sie es später noch einmal. Wenn er immer noch nicht funktioniert, melden Sie ein GitHub-Problem mit zur detaillierten Fehlermeldung.

Falsche MediaPipe-OpenCV-Konfiguration

Die Fehlermeldung:

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)'

zeigt in der Regel an, dass OpenCV für MediaPipe nicht richtig konfiguriert ist. Bitte finden Sie unter „OpenCV and FFmpeg“ Abschnitte in Installation, um zu sehen, wie der ARBEITSBEREICH von MediaPipe und linux_opencv/macos_opencv/windows_opencv.BUILD-Dateien für Ihre lokale Datei "opencv". Bibliotheken. Dieses GitHub-Problem könnte auch hilfreich sein.

Fehler bei der Installation von Python pip

Die Fehlermeldung:

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

nach der Ausführung von pip install mediapipe bedeutet in der Regel, dass für Ihr System keine geeignete MediaPipe-Python-Version vorhanden ist. Das Python-PyPI von MediaPipe unterstützt offiziell die 64-Bit- Version von Python 3.7 bis 3.10 auf dem folgenden Betriebssystem:

  • x86_64 Linux
  • x86_64 macOS 10.15 oder höher
  • amd64 Windows

Wenn das Betriebssystem derzeit unterstützt wird und dieser Fehler weiterhin angezeigt wird, gehen Sie so vor: dass sowohl die Python- als auch die pip-Binärdatei für Python 3.7 bis 3.10 gilt. Andernfalls erstellen Sie das Python-Paket für MediaPipe lokal, indem Sie der Anleitung.

Fehler beim Laden der Python-DLL unter Windows

Die Fehlermeldung:

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

weist in der Regel darauf hin, dass auf dem lokalen Windows-System Visual C++ und/oder Visual C++-Laufzeit-DLLs. Dieses Problem lässt sich lösen, entweder durch die Installation der offiziellen vc_redist.x64.exe oder „msvc-runtime“ installieren, Python-Paket durch Ausführen von

$ python -m pip install msvc-runtime

Der Parameter „msvc-runtime“ Python-Paket wird nicht freigegeben oder verwaltet von Microsoft entwickelt.

Native Methode nicht gefunden

Die Fehlermeldung:

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

bedeutet in der Regel, dass eine erforderliche native Bibliothek wie /libwickjni.so geladen wurden oder nicht in den Abhängigkeiten der App enthalten ist oder nicht gefunden wurden. Beachten Sie, dass bei Java jede native Bibliothek explizit mit der Funktion System.loadLibrary geladen werden.

Kein registrierter Rechner gefunden

Die Fehlermeldung:

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

gibt normalerweise an, dass OurNewCalculator mit dem Namen in einem CalculatorGraphConfig, aber das Bibliotheksziel für OurNewCalculator hat nicht mit dem Anwendungsbinärprogramm verknüpft. Wenn einem Gerät ein neuer Rechner hinzugefügt wird, Rechner oder Rechner als Build-Abhängigkeit von die Anwendungen mithilfe des Rechnerdiagramms.

Dieser Fehler wird während der Laufzeit erfasst, da Rechnergrafiken auf ihre Rechner nach Name über das Feld CalculatorGraphConfig::Node:calculator. Wenn die Bibliothek für einen Taschenrechner mit einem Anwendungsbinärprogramm verknüpft ist, wird der Rechner automatisch namentlich über die REGISTER_CALCULATOR-Makro mithilfe der registration.h-Bibliothek erstellen. Beachten Sie, dass REGISTER_CALCULATOR kann einen Rechner mit einem Namespace-Präfix registrieren. ist identisch mit seinem C++-Namespace. In diesem Fall muss der Rechner dasselbe Namespace-Präfix.

Fehler „Nicht genügend Arbeitsspeicher“

Ein überflüssiger Arbeitsspeicher kann ein Symptom dafür sein, dass sich zu viele Pakete in einem MediaPipe-Diagramm ausgeführt. Dies kann verschiedene Gründe haben, z. B.:

  1. Einige Rechner in der Grafik können einfach nicht mit dem Aufkommen von Pakete aus einem Realtime-Eingabestream wie einer Videokamera gesendet werden.
  2. Einige Rechner warten auf Pakete, die nie ankommen.

Bei Problem (1) müssen möglicherweise einige alte Pakete die neueren Pakete verarbeitet werden. Einige Tipps finden Sie hier: How to process realtime input streams

Bei Problem (2) könnten es sein, dass einem Eingabestream Pakete für einige Grund. Möglicherweise ist ein Gerät oder ein Rechner falsch konfiguriert oder es können Pakete erzeugt werden nur sporadisch. Dies kann dazu führen, dass nachgelagerte Rechner einige Zeit die nie ankommen, sodass sie sich auf dem einige ihrer Eingabestreams. MediaPipe löst diese Art von Problemen mithilfe von „timestamp bounds“ an. Einige Hinweise: How to process realtime input streams

Die MediaPipe-Einstellung CalculatorGraphConfig::max_queue_size schränkt Anzahl der Pakete in die Warteschlange eines beliebigen Eingabestreams durch Drosselung der Eingaben an den Diagramm. Bei Echtzeiteingabestreams die Anzahl der Pakete, die bei einer Eingabe in die Warteschlange gestellt werden Stream sollte fast immer null oder eins sein. Ist dies nicht der Fall, werden möglicherweise die folgende Warnmeldung angezeigt:

Resolved a deadlock by increasing max_queue_size of input stream

Außerdem kann mit der Einstellung CalculatorGraphConfig::report_deadlock Folgendes festgelegt werden: ausfallen und den Deadlock als Fehler ausgeben, sodass max_queue_size die als Beschränkung für die Arbeitsspeichernutzung dient.

Grafik hängt

Viele Anwendungen rufen CalculatorGraph::CloseAllPacketSources auf und CalculatorGraph::WaitUntilDone, um die Ausführung einer MediaPipe abzuschließen oder auszusetzen Diagramm. Damit sollen alle ausstehenden Rechner oder Pakete um die Verarbeitung abzuschließen, und das Diagramm herunterzufahren. Wenn alles gut läuft, werden alle Stream im Diagramm erreicht Timestamp::Done und jeder Rechner wird CalculatorBase::Close erreichen und dann CalculatorGraph::WaitUntilDone abgeschlossen wird.

Wenn einige Rechner oder Streams den Status Timestamp::Done oder CalculatorBase::Close enthält, kann die Methode CalculatorGraph::Cancel wie folgt aussehen: wird aufgerufen, um die Graphausführung zu beenden, ohne auf alle ausstehenden Rechner warten zu müssen und Pakete auszuführen.

Ausgabezeit ist ungleichmäßig

Einige MediaPipe-Echtzeitgrafiken erzeugen eine Reihe von Videoframes, die als oder als Videodiagnose nutzen. Manchmal liefert ein MediaPipe-Diagramm in Clustern, z. B. wenn mehrere Ausgabe-Frames die aus demselben Cluster von Eingabeframes extrapoliert werden. Wenn die Ergebnisse bei der Erstellung werden einige Ausgabe-Frames sofort durch spätere Frames im selben Cluster befinden. Dadurch sind die Ergebnisse schwer zu erkennen und auszuwerten. visuell dargestellt wird. In solchen Fällen kann die Ausgabevisualisierung verbessert werden, indem indem die Frames in gleichmäßigen Intervallen in Echtzeit präsentiert werden.

MediaPipe löst diesen Anwendungsfall durch die Zuordnung von Zeitstempeln zu Punkten in Echtzeit. Jeder Zeitstempel gibt eine Zeit in Mikrosekunden an und ein Rechner wie LiveClockSyncCalculator kann die Ausgabe von Paketen verzögern, um sie Zeitstempel. Mit dieser Art von Rechner wird das Timing der Ausgaben wie folgt angepasst:

  1. Die Zeit zwischen den Ausgaben entspricht der Zeit zwischen den Zeitstempeln: so genau wie möglich.
  2. Ausgaben werden mit der kleinstmöglichen Verzögerung erzeugt.

RechnerGraphen hinken Eingaben zurück

Bei vielen MediaPipe-Echtzeitdiagrammen ist eine niedrige Latenz ein Ziel. MediaPipe unterstützt „Pipeline“ Stil-Parallelverarbeitung zu starten, jedes Pakets so früh wie möglich. Normalerweise ist die geringstmögliche Latenz Gesamtzeit, die von jedem Rechner entlang eines „kritischen Pfads“ benötigt wird von aufeinanderfolgenden Rechnern. Die Latenz eines MediaPipe-Diagramms könnte schlechter als das Idealfall sein aufgrund von Verzögerungen bei der Anzeige von Frames in gleichmäßigen Intervallen, wie in Die Ausgabezeit ist ungleichmäßig.

Wenn einige der Rechner in der Grafik nicht mit den Echtzeiteingaben Schritt halten können wird die Latenz weiter zunehmen und es ist notwendig, werden einige Eingabepakete verworfen. Wir empfehlen die Verwendung von MediaPipe Rechner, die speziell für diesen Zweck entwickelt wurden, FlowLimiterCalculator wie beschrieben in How to process realtime input streams