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:
- 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.
- 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:
- Le temps entre les sorties correspond à l'intervalle de temps entre les horodatages, tel que aussi près que possible.
- 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