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.:
- Einige Rechner in der Grafik können einfach nicht mit dem Aufkommen von Pakete aus einem Realtime-Eingabestream wie einer Videokamera gesendet werden.
- 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:
- Die Zeit zwischen den Ausgaben entspricht der Zeit zwischen den Zeitstempeln: so genau wie möglich.
- 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