Sorun giderme

Python ikili yolu eksik

Hata mesajı:

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

genellikle Bazel'in yerel Python ikili programını bulamadığını gösterir. Çözüm lütfen önce python ikili dosyasının nerede olduğunu bulun ve Bazel komutuna --action_env PYTHON_BIN_PATH=<path to python binary> ekleyin. Örneğin, Python'daki varsayılan python3 ikili programını şu komutu kullanın:

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

Gerekli Python paketleri eksik

Hata mesajı:

ImportError: No module named numpy
Is numpy installed?

genellikle belirli Python paketlerinin yüklü olmadığını belirtir. Lütfen Python ikili sürümünüze bağlı olarak pip install veya pip3 install yükler.

Uzak bağımlılık depoları getirilemedi

Hata mesajı:

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)

genellikle Bazel'ın gerekli bağımlılık depolarını indiremediğini gösterir bazı çözümler üretebiliriz. MedaiPipe'te kullanılan bazı bağımlılık depoları Google siteleri tarafından barındırılan. Bazı bölgelerde ağ proxy'si oluşturmanız gerekebilir veya VPN kullanarak bu kaynaklara erişebilirsiniz. Ayrıca --host_jvm_args "-DsocksProxyHost=<ip address> -DsocksProxyPort=<port number>". komutuna ekleyin. Görüntüleyin bu GitHub sorunu inceleyebilirsiniz.

Bunun bir ağ sorunu olmadığını düşünüyorsanız, başka bir olasılık da kaynaklar geçici olarak kullanılamıyor olabilir, lütfen bazel clean --expunge komutunu çalıştırın ve daha sonra tekrar deneyin. Hâlâ çalışmıyorsa lütfen hata mesajını görüyorsunuz.

Yanlış MediaPipe OpenCV yapılandırması

Hata mesajı:

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

OpenCV'nin MediaPipe için doğru şekilde yapılandırılmadığını gösterir. Lütfen "OpenCV ve FFmpeg'i yükleme" bölümüne göz atın. şuradaki bölümler: Yükleme özelliğini kullanarak MediaPipe'in WORKSPACE ve Yerel opencv'niz için linux_opencv/macos_opencv/windows_opencv.BUILD dosyaları kitaplıklar. Bu GitHub sorunu yardımcı olabilir.

Python pip yükleme hatası

Hata mesajı:

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

pip install mediapipe genellikle sisteminiz için uygun MediaPipe Python olmadığını gösterir. MediaPipe Python PyPI'nin 64 bit'i resmi olarak desteklediğini lütfen unutmayın Python 3.7'den 3.10'a kadar olan sürümlerde kullanılabilir:

  • x86_64 Linux
  • x86_64 macOS 10.15 veya sonraki sürümler
  • amd64 Windows

İşletim sistemi şu anda destekleniyorsa ve bu hatayı görmeye devam ediyorsanız lütfen hem Python hem de pip ikili programının Python 3.7 ila 3.10 için olduğunu unutmayın. Aksi halde Lütfen MediaPipe Python paketini yerel olarak oluşturmak için talimatları burada bulabilirsiniz.

Windows'da Python DLL yükleme hatası

Hata mesajı:

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

genellikle yerel Windows sisteminde Visual C++ yeniden dağıtılabilir paketler ve/veya Visual C++ çalışma zamanı DLL'leri içerebilir. Bu sorun, projenin başarısı için ya da uygulamayı yükleme vc_redist.x64.exe veya "msvc-runtime" eklentisini yükleme aşağıdaki komutu çalıştırarak Python paketi

$ python -m pip install msvc-runtime

"msvc-çalışma zamanı" değerinin Python paketi yayınlanmadı veya yönetilmedi satın alabilirsiniz.

Yerel yöntem bulunamadı

Hata mesajı:

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

genellikle /libwickjni.so gibi gerekli bir yerel kitaplıkta Yüklenmiş veya uygulamanın bağımlılıklarına dahil edilmemiş ya da bir neden olabilir. Java'nın her yerel kitaplığın System.loadLibrary işlevi kullanılarak açıkça yüklenir.

Kayıtlı hesap makinesi bulunamadı

Hata mesajı:

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

genellikle OurNewCalculator öğesinin bir CalculatorGraphConfig ancak OurNewCalculator için kitaplık hedefinde daha fazla uygulama ikili programına bağlanmamıştır. Yeni bir hesap makinesi hesap makinesi grafiğinde, bu hesap makinesinin ve hesap makinesi grafiğini kullanarak uygulamaya başlayabilirsiniz.

Bu hata, hesap makinesi grafiklerinin çalışma zamanında hesap makinelerini CalculatorGraphConfig::Node:calculator alanına girin. Hesap makinesinin kitaplığı bir uygulama ikili programına bağlandığında, hesap makinesi otomatik olarak registration.h kitaplığını kullanan REGISTER_CALCULATOR makrosu. Lütfen REGISTER_CALCULATOR, hesap makinesini ad alanı önekiyle kaydettirebilir. ile aynıdır. Bu durumda, hesap makinesi grafiğinde aynı zamanda gerekir.

Yetersiz Bellek hatası

Bellekin tükenmesi, paketin içinde biriken çok fazla paketin nasıl performans göstereceğim. Bu durum, aşağıdakiler gibi çeşitli nedenlerden kaynaklanabilir:

  1. Grafikteki bazı hesaplayıcılar, paketleri içeren bir pakettir.
  2. Bazı hesap makineleri, asla ulaşmayacak paketleri bekliyor.

(1. sorun için), daha eski bazı paketleri daha yeni paket işleme alınır. Bazı ipuçları için aşağıdaki konulara bakın: How to process realtime input streams.

(2. sorun) bazı sorunlar için bir giriş akışında paket eksik olabilir. bir neden sunmalısınız. Bir cihaz veya hesap makinesi yanlış yapılandırılmış olabilir veya paketler üretebilir yalnızca belirli aralıklarla. Bu, aşağı akış hesaplayıcılarının birkaç işlem hiçbir zaman ulaşmayacak olan bir pakettir. Bu durumda paketlerin ve giriş akışlarından bazılarına katkıda bulunurlar. MediaPipe, bu tür sorunları "zaman damgası sınırları". Bazı ipuçları için: How to process realtime input streams.

MediaPipe ayarı CalculatorGraphConfig::max_queue_size akışı kısıtlayarak herhangi bir giriş akışında sıraya alınan paket sayısını grafiğe dönüştürülebilir. Gerçek zamanlı giriş akışları için bir girişte sıraya alınan paket sayısı akış neredeyse her zaman sıfır veya bir olmalıdır. Böyle bir durum söz konusu değilse şu uyarı mesajını görürsünüz:

Resolved a deadlock by increasing max_queue_size of input stream

Ayrıca CalculatorGraphConfig::report_deadlock ayarı, başarısız olmak üzere çalıştırılan grafik, kilitlenmeyi hata olarak ortaya çıkarır (ör. max_queue_size) görevi görebilir.

Grafik takılı kalıyor

Birçok uygulama CalculatorGraph::CloseAllPacketSources ve Bir MediaPipe'in yürütülmesini tamamlamak veya askıya almak için CalculatorGraph::WaitUntilDone grafiğe dönüştürülebilir. Buradaki amaç, beklemede olan hesaplayıcıların veya paketlerin ve ardından grafiği kapatmaktır. Her şey yolunda giderse grafikteki akış Timestamp::Done değerine ulaşacak ve her hesap makinesi CalculatorBase::Close erişim düzeyine ulaşın ve ardından CalculatorGraph::WaitUntilDone başarıyla tamamlanacaktır.

Bazı hesap makineleri veya yayınlar Timestamp::Done durumuna ulaşamazsa veya CalculatorBase::Close ise CalculatorGraph::Cancel yöntemi şöyle olabilir: beklemedeki tüm hesap makinelerini beklemeden grafik çalışmasını sonlandırmak için çağrılır. paket olması da mümkündür.

Çıkış zamanlaması eşit değil

Bazı gerçek zamanlı MediaPipe grafikleri, bir dizi video karesi oluşturarak video efekti olarak veya video teşhisi olarak kullanılabilir. Bazen bir MediaPipe grafiği, kümeler halinde oluşturabilirsiniz. Örneğin, birkaç çıkış aynı giriş çerçeveleri kümesinden çıkarım yapılır. Çıkışlar üretildikçe, bazı çıkış çerçeveleri hemen sonraki Aynı kümede çerçeveler kullanır ve bu da sonuçların görülmesini ve değerlendirilmesini zorlaştırır. yardımcı olur. Bu gibi durumlarda çıktı görselleştirme, proje yöneticiliği pozisyonu Kareleri eşit aralıklarla gerçek zamanlı olarak sunmak için kullanılır.

MediaPipe, bu kullanım alanını, zaman damgalarını gerçek zamanlı olarak noktalara eşleyerek ele alır. Her bir zaman damgası, bir zamanı mikrosaniye cinsinden belirtir ve bir hesap makinesinde olduğu gibi: LiveClockSyncCalculator, paketlerin çıkışını kendi ayarlarıyla eşleşecek şekilde geciktirebilir ekleyebilirsiniz. Bu tür hesap makinesi, çıktıların zamanlamasını şu şekilde ayarlar:

  1. Çıkışlar arasındaki süre, yakından incelemeniz gerekiyor.
  2. Çıkışlar, mümkün olan en kısa gecikmeyle üretilir.

HesaplayıcıGraph girişlerin gerisinde kalıyor

Birçok gerçek zamanlı MediaPipe grafiğinde düşük gecikme hedeflerinden biridir. MediaPipe "ardışık düzen"i destekler ve paralel işleme yöntemini kullanarak mümkün olduğunca erken gönderin. Normalde olası en düşük gecikme "kritik yol" boyunca her hesap makinesinin ihtiyaç duyduğu toplam süre art arda hesap makineleri. MediaPipe grafiğinin gecikmesi, ideal olandan daha kötü olabilir Bunun nedeni, aşağıdaki adımları uygulayarak görüntüleme çerçevelerine Çıkış zamanlaması eşit değil.

Grafikteki hesap makinelerinden bazıları gerçek zamanlı girdilere ayak uyduramazsa akışlar devam ederse gecikme artmaya devam eder ve birkaç giriş paketi bırakın. Önerilen teknik, özel olarak bu amaç için tasarlanmış hesap makineleri, Şu şekilde FlowLimiterCalculator: How to process realtime input streams.