Percorso binario Python mancante
Il messaggio di errore:
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
di solito indica che Bazel non riesce a trovare il file binario Python locale. Per risolvere
per questo problema, cerca prima dov'è il file binario Python, quindi aggiungi
--action_env PYTHON_BIN_PATH=<path to python binary>
al comando Bazel. Per
Ad esempio, puoi passare a utilizzare il file binario python3 predefinito di sistema
seguente comando:
bazel build -c opt \
--define MEDIAPIPE_DISABLE_GPU=1 \
--action_env PYTHON_BIN_PATH=$(which python3) \
mediapipe/examples/desktop/hello_world
Pacchetti Python necessari mancanti
Il messaggio di errore:
ImportError: No module named numpy
Is numpy installed?
indica in genere che alcuni pacchetti Python non sono installati. Esegui
pip install
o pip3 install
, a seconda della versione binaria di Python
installare i pacchetti.
Impossibile recuperare i repository di dipendenze remote
Il messaggio di errore:
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)
di solito indica che Bazel non riesce a scaricare i repository di dipendenze necessari
di cui ha bisogno MediaPipe. MedaiPipe ha diversi repository di dipendenze
ospitati da siti Google. In alcune regioni, potrebbe essere necessario configurare un proxy di rete
o utilizzare una VPN per accedere a queste risorse. Potresti anche dover aggiungere
--host_jvm_args "-DsocksProxyHost=<ip address> -DsocksProxyPort=<port number>"
al comando Bazel. Consulta
questo problema su GitHub
per ulteriori informazioni.
Se ritieni che non si tratti di un problema di rete, un'altra possibilità è che
le risorse potrebbero non essere al momento disponibili. Esegui bazel clean --expunge
e riprova più tardi. Se il problema persiste, invia una segnalazione su GitHub a
il messaggio di errore dettagliato.
Configurazione OpenCV MediaPipe non corretta
Il messaggio di errore:
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)'
di solito indica che OpenCV non è configurato correttamente per MediaPipe. Non dimenticare di apporre dai un'occhiata al link "Installa OpenCV e FFmpeg" sezioni in Installazione per scoprire come modificare WORKSPACE e linux_opencv/macos_opencv/windows_opencv.BUILD per il file cv aperto locale librerie. Questo problema di GitHub può essere utile.
Errore di installazione di Python pip
Il messaggio di errore:
ERROR: Could not find a version that satisfies the requirement mediapipe
ERROR: No matching distribution found for mediapipe
dopo aver eseguito pip install mediapipe
solitamente indica che non esiste un Python MediaPipe qualificato per il tuo sistema.
Tieni presente che Python PyPI di MediaPipe supporta ufficialmente il protocollo a 64 bit
di Python dalla 3.7 alla 3.10 sul seguente sistema operativo:
- Linux x86_64
- x86_64 macOS 10.15 e versioni successive
- Windows amd64
Se il sistema operativo è attualmente supportato, ma continui a visualizzare questo errore, assicurati che sia il binario Python che pip sono per Python dalla 3.7 alla 3.10. Altrimenti, considera la creazione del pacchetto Python MediaPipe in locale seguendo le istruzioni riportate in istruzioni qui.
Errore di caricamento della DLL Python su Windows
Il messaggio di errore:
ImportError: DLL load failed: The specified module could not be found
di solito indica che nel sistema Windows locale manca Visual C++ pacchetti ridistribuibili e/o DLL di runtime Visual C++. Questo può essere risolto installando l'app vc_redist.x64.exe o installando "msvc-runtime" per il pacchetto Python eseguendo
$ python -m pip install msvc-runtime
Tieni presente che il valore di "msvc-runtime" Il pacchetto Python non è stato rilasciato o mantenuto Microsoft.
Metodo nativo non trovato
Il messaggio di errore:
java.lang.UnsatisfiedLinkError: No implementation found for void com.google.wick.Wick.nativeWick
indica di solito che la libreria nativa necessaria, come /libwickjni.so
, non ha
caricato o non è stato incluso nelle dipendenze dell'app o non può essere
trovato per qualche motivo. Tieni presente che Java richiede che ogni libreria nativa
caricato esplicitamente tramite la funzione System.loadLibrary
.
Nessuna calcolatrice registrata trovata
Il messaggio di errore:
No registered object with name: OurNewCalculator; Unable to find Calculator "OurNewCalculator"
di solito indica che a OurNewCalculator
viene fatto riferimento tramite il nome in una
CalculatorGraphConfig
ma che il target della libreria per OurNewCalculator ha
non è stato collegato al file binario dell'applicazione. Quando una nuova calcolatrice viene aggiunta a un
una calcolatrice, la quale deve essere aggiunta anche come dipendenza dalla build
utilizzando il grafico della calcolatrice.
Questo errore viene rilevato in fase di esecuzione perché i grafici della calcolatrice fanno riferimento ai relativi
calcolatrici per nome nel campo CalculatorGraphConfig::Node:calculator
.
Quando la libreria di una calcolatrice è collegata al file binario di un'applicazione,
Calcolatrice viene registrata automaticamente per nome tramite
REGISTER_CALCULATOR
utilizzando la libreria registration.h
. Tieni presente che
REGISTER_CALCULATOR
può registrare una calcolatrice con il prefisso di uno spazio dei nomi,
identico allo spazio dei nomi C++. In questo caso, il grafico della calcolatrice deve utilizzare anche
lo stesso prefisso dello spazio dei nomi.
Errore memoria esaurita
L'esaurimento della memoria può essere un sintomo dell'accumulo di troppi pacchetti all'interno di un sul grafico MediaPipe. I motivi possono essere diversi, tra cui:
- Alcuni calcolatori nel grafico semplicemente non sono in grado di tenere il passo con l'arrivo di di pacchetti da un flusso di input in tempo reale, come una videocamera.
- Alcuni calcolatori sono in attesa di pacchetti che non arriveranno mai.
Per il problema (1), potrebbe essere necessario rilasciare alcuni vecchi pacchetti nei vecchi pacchetti
per elaborare i pacchetti più recenti. Per alcuni suggerimenti, consulta:
How to process realtime input streams
Per il problema (2), è possibile che in un flusso di input manchino pacchetti per alcune
perché. Un dispositivo o una calcolatrice potrebbero non essere configurati correttamente o potrebbero produrre pacchetti
solo sporadicamente. Questo può portare i calcolatori downstream ad attendere
che non arrivano mai e che, a loro volta, ne causano l'accumulo
alcuni dei loro flussi di input. MediaPipe risolve questo tipo di problema utilizzando
"limiti timestamp". Per alcuni suggerimenti, vedi:
How to process realtime input streams
L'impostazione di MediaPipe CalculatorGraphConfig::max_queue_size
limita le
di pacchetti in coda in un flusso di input limitando gli input nella
grafico. Per i flussi di input in tempo reale, il numero di pacchetti in coda in un input
dovrebbe essere quasi sempre pari a zero o uno. In caso contrario, potresti notare
il seguente messaggio di avviso:
Resolved a deadlock by increasing max_queue_size of input stream
Inoltre, è possibile configurare l'impostazione CalculatorGraphConfig::report_deadlock
per causare
l'esecuzione del grafico non riesce e restituisce il deadlock come errore, ad esempio max_queue_size
come limite di utilizzo della memoria.
Il grafico si blocca
Molte applicazioni chiameranno CalculatorGraph::CloseAllPacketSources
e
CalculatorGraph::WaitUntilDone
per terminare o sospendere l'esecuzione di un MediaPipe
grafico. L'obiettivo è consentire a qualsiasi calcolatore o pacchetto in sospeso
completare l'elaborazione e chiudere il grafico. Se tutto va bene, ogni
flusso nel grafico raggiungerà Timestamp::Done
e ogni calcolatore
raggiungi CalculatorBase::Close
e poi CalculatorGraph::WaitUntilDone
verrà completata correttamente.
Se alcuni calcolatori o stream non riescono a raggiungere lo stato Timestamp::Done
oppure
CalculatorBase::Close
, il metodo CalculatorGraph::Cancel
può essere
per terminare l'esecuzione del grafico senza attendere tutte le calcolatrici in sospeso
e pacchetti da completare.
La tempistica di output è irregolare
Alcuni grafici MediaPipe in tempo reale producono una serie di fotogrammi video per la visualizzazione effetto video o come videodiagnostica. A volte, un grafico MediaPipe restituisce questi frame in cluster, ad esempio quando vengono visualizzati più frame di output estrapolati dallo stesso cluster di frame di input. Se gli output vengono presentati man mano che vengono prodotti, alcuni frame di output vengono immediatamente sostituiti nello stesso cluster, il che rende i risultati difficili da visualizzare e valutare visivamente. In casi come questo, la visualizzazione dell'output può essere migliorata e presentare i frame a intervalli regolari in tempo reale.
MediaPipe affronta questo caso d'uso mappando i timestamp a punti in tempo reale.
Ogni timestamp indica l'ora in microsecondi e una calcolatrice come
LiveClockSyncCalculator
può ritardare l'output dei pacchetti perché corrisponda al rispettivo
i timestamp. Questo tipo di calcolatore regola la tempistica degli output in modo che:
- Il tempo tra gli output corrisponde al tempo tra i timestamp come il più vicino possibile.
- Gli output vengono prodotti con il minor ritardo possibile.
Il grafico di Calcolatrice è in ritardo rispetto agli input
Per molti grafici MediaPipe in tempo reale, la bassa latenza è un obiettivo. MediaPipe supporta "pipelining" elaborazione parallela degli stili per iniziare il prima possibile. Di solito, la latenza più bassa possibile è tempo totale richiesto da ogni calcolatore lungo un "percorso critico" delle successive calcolatrici. La latenza di un grafico MediaPipe potrebbe essere inferiore all'ideale a causa di ritardi introdotti nei frame di visualizzazione a intervalli uniforme, come descritto I tempi di output non sono uniformi.
Se alcune calcolatrici nel grafico non sono in grado di tenere il passo con l'input in tempo reale
gli stream, la latenza continuerà ad aumentare e diventa necessario
alcuni pacchetti di input. La tecnica consigliata è quella di utilizzare MediaPipe
calcolatrici progettate specificatamente per questo scopo, ad esempio
FlowLimiterCalculator
come descritto in
How to process realtime input streams
.