Dépannage

Chemin d'accès binaire Python manquant

Le message d'erreur:

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

indique généralement que Bazel ne parvient pas à trouver le binaire Python local. Pour résoudre recherchez d'abord l'emplacement du binaire Python, puis ajoutez --action_env PYTHON_BIN_PATH=<path to python binary> à la commande Bazel. Pour Par exemple, vous pouvez utiliser le binaire Python 3 par défaut la commande suivante:

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

Packages Python nécessaires manquants

Le message d'erreur:

ImportError: No module named numpy
Is numpy installed?

indique généralement que certains packages Python ne sont pas installés. Veuillez exécuter pip install ou pip3 install selon la version du binaire Python que vous utilisez installer ces packages.

Échec de la récupération des dépôts de dépendances distants

Le message d'erreur:

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)

indique généralement que Bazel ne parvient pas à télécharger les dépôts de dépendances nécessaires dont MediaPipe a besoin. MedaiPipe dispose de plusieurs dépôts de dépendances hébergés par des sites Google. Dans certaines régions, vous devrez peut-être configurer un proxy réseau ou utiliser un VPN pour accéder à ces ressources. Vous devrez peut-être aussi ajouter --host_jvm_args "-DsocksProxyHost=<ip address> -DsocksProxyPort=<port number>" à la commande Bazel. Voir ce problème GitHub pour en savoir plus.

Si vous pensez qu'il ne s'agit pas d'un problème de réseau, il est également possible que certains les ressources sont peut-être temporairement indisponibles, veuillez exécuter bazel clean --expunge et réessayez plus tard. Si cela ne fonctionne toujours pas, veuillez signaler un problème GitHub avec le message d'erreur détaillé.

Configuration OpenCV de MediaPipe incorrecte

Le message d'erreur:

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

indique généralement qu'OpenCV n'est pas correctement configuré pour MediaPipe. Veuillez consultez le dossier "Install OpenCV and FFmpeg" (Installer OpenCV et FFmpeg) dans Installation pour voir comment modifier les espaces de travail de MediaPipe et linux_opencv/macos_opencv/windows_opencv.Build pour votre fichier opencv local bibliothèques. Ce problème GitHub peut également vous aider.

Échec de l'installation de la commande Python pip

Le message d'erreur:

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

après l'exécution de pip install mediapipe indique généralement qu'il n'y a pas de Python MediaPipe qualifié pour votre système. Notez que MediaPipe Python PyPI est officiellement compatible avec la version 64 bits Python 3.7 à 3.10 sur les systèmes d'exploitation suivants:

  • x86_64 Linux
  • x86_64 macOS 10.15 et versions ultérieures
  • Windows amd64

Si l'OS est actuellement pris en charge et que cette erreur s'affiche toujours, assurez-vous que que le binaire Python et le binaire pip sont pour Python 3.7 à 3.10. Sinon, envisagez de créer le package Python MediaPipe en local en suivant la consultez ces instructions.

Échec du chargement de la DLL Python sous Windows

Le message d'erreur:

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

indique généralement que le système Windows local ne dispose pas de Visual C++ packages redistribuables et/ou DLL d’exécution Visual C++. Pour résoudre ce problème, soit en installant la version officielle vc_redist.x64.exe ou l'installation de la commande "msvc-runtime" un package Python en exécutant

$ python -m pip install msvc-runtime

Notez que la commande "msvc-runtime" Le package Python n'est ni publié, ni géré par Microsoft.

Méthode native introuvable

Le message d'erreur:

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

indique généralement qu'une bibliothèque native nécessaire, telle que /libwickjni.so, n'a pas ont été chargées, n'ont pas été incluses dans les dépendances de l'application ou ne peuvent pas être trouvé pour une raison quelconque. Notez que Java exige que chaque bibliothèque native explicitement chargé à l'aide de la fonction System.loadLibrary.

Aucune calculatrice enregistrée trouvée

Le message d'erreur:

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

indique généralement que OurNewCalculator est référencé par son nom dans un CalculatorGraphConfig, mais que la cible de la bibliothèque pour OurNewCalculator a n'a pas été associé au binaire de l'application. Lorsqu'une nouvelle calculatrice est ajoutée graphique de la calculatrice, cette calculatrice doit également être ajoutée en tant que dépendance de compilation de les applications à l'aide du graphique du calculateur.

Cette erreur est détectée au moment de l'exécution, car les graphiques du calculateur référencent leurs calculatrices par nom via le champ CalculatorGraphConfig::Node:calculator. Lorsque la bibliothèque d'une calculatrice est liée à un binaire d'application, la calculatrice est automatiquement enregistrée à l'aide de son nom REGISTER_CALCULATOR à l'aide de la bibliothèque registration.h. Notez que REGISTER_CALCULATOR peut enregistrer une calculatrice avec un préfixe d'espace de noms, identique à son espace de noms C++. Dans ce cas, le graphique de la calculatrice doit également utiliser le même préfixe d'espace de noms.

Erreur "Mémoire insuffisante"

L'épuisement de la mémoire peut être le symptôme d'un trop grand nombre de paquets qui s'accumulent à l'intérieur d'une pour l'exécution du graphique MediaPipe. Plusieurs raisons peuvent expliquer cette situation:

  1. Certaines calculatrices du graphique ne peuvent tout simplement pas suivre le rythme des paquets provenant d'un flux d'entrée en temps réel tel qu'une caméra.
  2. Certains calculateurs attendent des paquets qui n'arriveront jamais.

Pour le problème (1), il peut être nécessaire de supprimer les anciens paquets traiter les paquets les plus récents. Pour obtenir des conseils, consultez les pages suivantes: How to process realtime input streams

Pour le problème (2), il se peut qu'un flux d'entrée manque de paquets ou motif. Un appareil ou une calculatrice sont peut-être mal configurés ou peuvent générer des paquets que sporadiquement. Les calculateurs en aval peuvent donc attendre un grand nombre des paquets qui n'arriveront jamais, ce qui a pour conséquence l'accumulation de paquets sur certains de leurs flux d'entrée. MediaPipe résout ce type de problème en utilisant "limites du code temporel". Voici quelques conseils: How to process realtime input streams

Le paramètre MediaPipe CalculatorGraphConfig::max_queue_size limite le nombre de paquets mis en file d'attente sur un flux d'entrée en limitant les entrées graphique. Pour les flux d'entrée en temps réel, nombre de paquets mis en file d'attente au niveau d'une entrée le flux devrait presque toujours être zéro ou un. Si ce n'est pas le cas, vous pouvez voir le message d'avertissement suivant:

Resolved a deadlock by increasing max_queue_size of input stream

De plus, le paramètre CalculatorGraphConfig::report_deadlock peut être défini pour que l'exécution du graphique échoue et signale l'interblocage en tant qu'erreur, de sorte que max_queue_size sert de limite d'utilisation de la mémoire.

Le graphique est bloqué

De nombreuses applications appellent CalculatorGraph::CloseAllPacketSources et CalculatorGraph::WaitUntilDone pour terminer ou suspendre l'exécution d'un MediaPipe graphique. L'objectif ici est de permettre à tous les calculateurs ou paquets en attente terminer le traitement, puis arrêter le graphe. Si tout se passe bien, tous les flux dans le graphique atteindra Timestamp::Done, et chaque calculateur couverture CalculatorBase::Close, puis CalculatorGraph::WaitUntilDone s'exécutera correctement.

Si certains calculateurs ou flux ne peuvent pas atteindre l'état Timestamp::Done ou CalculatorBase::Close, la méthode CalculatorGraph::Cancel peut être appelé pour arrêter l'exécution du graphe sans attendre tous les calculateurs en attente et les paquets à terminer.

La durée de sortie est irrégulière

Certains graphiques MediaPipe en temps réel produisent une série d'images vidéo à visionner sous forme ou de diagnostic vidéo. Parfois, un graphique MediaPipe génère ces trames en clusters, par exemple lorsque plusieurs trames de sortie sont extrapolées à partir d'un même cluster de trames d'entrée. Si les résultats sont présentés à mesure qu'elles sont produites, certaines trames de sortie sont immédiatement remplacées par frames dans le même cluster, ce qui rend les résultats difficiles à visualiser et à évaluer visuellement. Dans de tels cas, la visualisation de la sortie peut être améliorée en présentant les images à intervalles réguliers en temps réel.

MediaPipe résout ce cas d'utilisation en mappant les codes temporels à des points en temps réel. Chaque code temporel indique une heure en microsecondes, et un calculateur tel que LiveClockSyncCalculator peut retarder la sortie des paquets pour faire correspondre leur codes temporels. Ce type de calculateur ajuste la durée des sorties de la manière suivante:

  1. Le temps entre les sorties correspond à l'intervalle de temps entre les horodatages, tel que aussi près que possible.
  2. Les résultats sont générés avec le délai le plus court possible.

CalculatorGraph prend du retard sur les entrées

Pour de nombreux graphiques MediaPipe en temps réel, la faible latence est un objectif. MediaPipe prend en charge "pipelined" "Traitement parallèle" pour commencer à traiter chaque paquet dès que possible. Normalement, la latence la plus faible possible temps total requis par chaque calculateur le long d'un « chemin critique » de valeurs successives calculatrices. La latence d'un graphique MediaPipe pourrait être inférieure à la latence idéale en raison des retards introduits pour afficher les images à intervalles réguliers, comme décrit dans La durée de sortie est inégale.

Si certains calculateurs du graphique ne peuvent pas suivre le rythme des données en temps réel la latence continue à augmenter et il devient nécessaire de certains paquets d'entrée. La technique recommandée consiste à utiliser MediaPipe spécialement conçues à cet effet, telles que FlowLimiterCalculator, comme décrit dans How to process realtime input streams