Sorun giderme

Python ikili program 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. Bu sorunu çözmek için lütfen önce Python ikili programının yerini bulun ve ardından Bazel komutuna --action_env PYTHON_BIN_PATH=<path to python binary> ekleyin. Örneğin, aşağıdaki komutu kullanarak sistemdeki varsayılan python3 ikili programını kullanabilirsiniz:

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ı gösterir. Bu paketleri yüklemek için Python ikili programınıza bağlı olarak pip install veya pip3 install komutunu çalıştırın.

Uzaktan 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 MediaPipe'in ihtiyaç duyduğu gerekli bağımlılık depolarını indiremediğini gösterir. MedaiPipe, Google siteleri tarafından barındırılan çeşitli bağımlılık depolarına sahiptir. Bazı bölgelerde, bu kaynaklara erişmek için bir ağ proxy'si ayarlamanız veya VPN kullanmanız gerekebilir. Bazel komutuna --host_jvm_args "-DsocksProxyHost=<ip address> -DsocksProxyPort=<port number>" eklemeniz de gerekebilir. Daha fazla bilgi için bu GitHub sorununa göz atın.

Bunun bir ağ sorunu olmadığını düşünüyorsanız bir diğer olasılık da bazı kaynakların geçici olarak kullanılamamasıdır. Lütfen bazel clean --expunge'i çalıştırıp daha sonra tekrar deneyin. Hâlâ çalışmıyorsa ayrıntılı hata mesajıyla birlikte bir GitHub sorunu bildiriminde bulunun.

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

genellikle OpenCV'nin MediaPipe için düzgün bir şekilde yapılandırılmamış olduğunu gösterir. Yerel opencv kitaplıklarınızın MediaPipe WORKSPACE ve linux_opencv/macos_opencv/windows_opencv.BUILD dosyalarını nasıl değiştireceğinizi görmek için lütfen Yükleme bölümündeki "OpenCV ve FFmpeg dosyalarını yükleme" bölümlerine göz atın. Bu GitHub sorunu da 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

sonra çalıştırılması pip install mediapipe genellikle sisteminiz için nitelikli bir MediaPipe Python olmadığını gösterir. MediaPipe Python PyPI'nın aşağıdaki işletim sisteminde Python 3.7 ila 3.10'un 64 bit sürümünü resmi olarak desteklediğini lütfen unutmayın:

  • 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 dosyasının Python 3.7'den 3.10'a yönelik olduğundan emin olun. Aksi takdirde, buradaki talimatları uygulayarak MediaPipe Python paketini yerel olarak oluşturmayı düşünün.

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'lerinin eksik olduğunu gösterir. Bu sorun, resmi vc_redist.x64.exe dosyasını veya

$ python -m pip install msvc-runtime

"msvc-runtime" Python paketinin Microsoft tarafından yayınlanmadığını veya korunmadığını lütfen unutmayın.

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ığın yüklenmediğini veya uygulamanın bağımlılıklarına dahil edilmediğini ya da herhangi bir nedenle bulunamadığını gösterir. Java'nın her yerel kitaplığın System.loadLibrary işlevi kullanılarak açık bir şekilde yüklenmesini gerektirdiğini unutmayın.

Kayıtlı hesap makinesi bulunamadı

Hata mesajı:

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

genellikle OurNewCalculator öğesine bir CalculatorGraphConfig içinde adla başvurulduğunu, ancak OurNewCalculator kitaplık hedefinin uygulama ikili programına bağlanmadığını gösterir. Hesap makinesi grafiğine eklenen yeni hesap makinelerinin, hesap makinesi grafiği kullanılarak uygulamaların derleme bağımlılığı olarak da eklenmesi gerekir.

Bu hata, hesap makinesi grafikleri CalculatorGraphConfig::Node:calculator alanı üzerinden hesap makinelerine adlarıyla başvuruda bulundukları için çalışma zamanında yakalanır. Hesap makinesi kitaplığı, uygulama ikili programına bağlandığında hesap makinesi, registration.h kitaplığı kullanılarak REGISTER_CALCULATOR makrosu aracılığıyla otomatik olarak ada göre kaydedilir. REGISTER_CALCULATOR'in, hesap makinesini C++ ad alanıyla aynı olan ad alanı önekiyle kaydedebileceğini unutmayın. Bu durumda, hesap makinesi grafiğinin de aynı ad alanı önekini kullanması gerekir.

Yetersiz Bellek hatası

Belleğin tükenmesi, çalışan bir MediaPipe grafiğinde çok fazla paketin birikmesi olabilir. Bunun çeşitli nedenleri olabilir. Örneğin:

  1. Grafikteki bazı hesaplayıcılar, video kamera gibi gerçek zamanlı bir giriş akışından paketlerin gelmesine ayak uyduramaz.
  2. Bazı hesap makineleri hiçbir zaman gelmeyecek paketleri beklemektedir.

1. sorunda, daha yeni paketleri işlemek için eski paketlerin bırakılacağı eski paketler gerekebilir. Bazı ipuçları için aşağıdaki adresi inceleyin: How to process realtime input streams.

2. sorun ise bir giriş akışında herhangi bir nedenden dolayı paket eksikliği olabilir. Bir cihaz veya hesap makinesi yanlış yapılandırılmış olabilir veya nadiren paket oluşturabilir. Bu durum aşağı akış hesaplayıcılarının hiçbir zaman gelmeyecek çok sayıda paket beklemesine neden olabilir. Bunun sonucunda, paketlerin bazı giriş akışlarında birikmesine neden olur. MediaPipe bu tür sorunları "zaman damgası sınırlarını" kullanarak ele alır. Bazı ipuçları için şu sayfayı inceleyin: How to process realtime input streams.

MediaPipe ayarı CalculatorGraphConfig::max_queue_size, grafiğe girişleri kısıtlayarak herhangi bir giriş akışında sıraya alınan paket sayısını sınırlandırır. Gerçek zamanlı giriş akışlarında sıraya alınan paket sayısı 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örebilirsiniz:

Resolved a deadlock by increasing max_queue_size of input stream

Ayrıca CalculatorGraphConfig::report_deadlock ayarı, grafik çalıştırmanın başarısız olmasına ve kilitlenmenin bir hata olarak gösterilmesine neden olacak şekilde de ayarlanabilir. Yani max_queue_size, bellek kullanım sınırı görevi görür.

Grafikte takılı kalıyor

Birçok uygulama, bir MediaPipe grafiğinin yürütülmesini bitirmek veya askıya almak için CalculatorGraph::CloseAllPacketSources ve CalculatorGraph::WaitUntilDone çağrılarını çağırır. Buradaki amaç, beklemedeki hesaplayıcıların veya paketlerin işlemeyi tamamlamasına ve ardından grafiği kapatmasına olanak tanımaktır. Her şey yolunda giderse grafikteki her akış Timestamp::Done değerine ulaşır ve her hesap makinesi CalculatorBase::Close değerine ulaşır ve ardından CalculatorGraph::WaitUntilDone işlemi başarıyla tamamlanır.

Bazı hesaplayıcılar veya akışlar Timestamp::Done ya da CalculatorBase::Close durumuna erişemezse bekleyen tüm hesaplayıcıların ve paketlerin tamamlanmasını beklemeden grafik çalıştırmayı sonlandırmak için CalculatorGraph::Cancel yöntemi çağrılabilir.

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

Bazı gerçek zamanlı MediaPipe grafikleri, video efekti veya video teşhisi olarak görüntülenmek üzere bir dizi video karesi oluşturur. Bazen bir MediaPipe grafiği, bu kareleri kümeler halinde üretir. Örneğin, aynı giriş karesi kümesinden birkaç çıkış çerçevesi çıkarıldığında. Çıktılar üretildikleri gibi sunulursa bazı çıkış çerçeveleri hemen aynı kümedeki sonraki karelerle değiştirilir. Bu da sonuçların görsel olarak görülmesini ve değerlendirilmesini zorlaştırır. Bu gibi durumlarda, kareleri eşit aralıklarla gerçek zamanlı olarak sunarak çıktı görselleştirmesini iyileştirebilirsiniz.

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

  1. Çıkışlar arasındaki süre, zaman damgaları arasındaki mümkün olduğunca yakın zamana karşılık gelir.
  2. Çıkışlar, mümkün olan en kısa gecikmeyle üretilir.

Hesap Makinesi Grafiği girişlerin gerisinde kalıyor

Birçok gerçek zamanlı MediaPipe grafiği için düşük gecikme, hedeftir. MediaPipe, her paketin mümkün olduğunca erken işlenmesi için "ardışık düzen" tarzında paralel işlemeyi destekler. Normalde olası en düşük gecikme, ardışık hesap makinelerinden oluşan bir "kritik yol" boyunca her hesap makinesinin ihtiyaç duyduğu toplam süredir. Çıkış zamanlaması eşit değil bölümünde açıklandığı gibi, görüntüleme karelerine eşit aralıklarla kaynaklanan gecikmeler nedeniyle MediaPipe grafiğinin gecikmesi ideal değerden daha kötü olabilir.

Grafikteki hesaplayıcılardan bazıları gerçek zamanlı giriş akışlarına ayak uyduramazsa gecikme artmaya devam eder ve bazı giriş paketlerinin düşürülmesi gerekir. Önerilen teknik, How to process realtime input streams bölümünde açıklandığı gibi FlowLimiterCalculator gibi özel olarak bu amaç için tasarlanmış MediaPipe hesaplayıcılarını kullanmaktır.