Pemecahan masalah

Jalur biner Python tidak ada

Pesan error:

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

biasanya menunjukkan bahwa Bazel gagal menemukan biner Python lokal. Untuk mengatasi masalah ini, pertama-tama temukan di mana biner python itu dan kemudian tambahkan --action_env PYTHON_BIN_PATH=<path to python binary> ke perintah Bazel. Sebagai contoh, Anda dapat beralih untuk menggunakan sistem biner python3 {i>default<i} dengan perintah berikut:

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

Paket Python yang diperlukan tidak ada

Pesan error:

ImportError: No module named numpy
Is numpy installed?

biasanya menunjukkan bahwa paket Python tertentu tidak diinstal. Harap jalankan pip install atau pip3 install bergantung pada versi biner Python Anda untuk menginstal paket-paket tersebut.

Gagal mengambil repositori dependensi jarak jauh

Pesan error:

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)

biasanya menunjukkan bahwa Bazel gagal mendownload repositori dependensi yang diperlukan yang dibutuhkan MediaPipe. MedaiPipe memiliki beberapa repositori dependensi yang yang dihosting oleh situs Google. Di beberapa wilayah, Anda mungkin perlu menyiapkan proxy jaringan atau menggunakan VPN untuk mengakses sumber daya tersebut. Anda mungkin juga perlu menambahkan --host_jvm_args "-DsocksProxyHost=<ip address> -DsocksProxyPort=<port number>" dengan perintah Bazel. Lihat masalah GitHub ini untuk mengetahui detail selengkapnya.

Jika Anda yakin bahwa itu bukan masalah jaringan, kemungkinan lain adalah sumber daya mungkin tidak tersedia untuk sementara, jalankan bazel clean --expunge dan mencobanya lagi nanti. Jika masih belum berhasil, ajukan masalah GitHub dengan pesan error yang mendetail.

Konfigurasi OpenCV MediaPipe salah

Pesan error:

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

biasanya menunjukkan bahwa OpenCV tidak dikonfigurasi dengan benar untuk MediaPipe. Memohon lihat file "Menginstal OpenCV dan FFmpeg" bagian di Penginstalan untuk melihat cara memodifikasi WORKSPACE MediaPipe dan File linux_opencv/macos_opencv/windows_opencv.BUILD untuk opencv lokal Anda library. Masalah GitHub ini juga dapat membantu.

Kegagalan penginstalan pip python

Pesan error:

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

setelah menjalankan pip install mediapipe biasanya menunjukkan bahwa tidak ada MediaPipe Python yang memenuhi syarat untuk sistem Anda. Perlu diketahui bahwa MediaPipe Python PyPI secara resmi mendukung 64-bit versi Python 3.7 hingga 3.10 pada OS berikut:

  • Linux x86_64
  • x86_64 macOS 10.15+
  • Windows amd64

Jika OS saat ini didukung dan Anda masih melihat pesan {i>error<i} ini, pastikan bahwa Python dan biner pip adalah untuk Python 3.7 hingga 3.10. Jika tidak, pertimbangkan untuk membangun paket Python MediaPipe secara lokal dengan mengikuti petunjuk di sini.

Kegagalan pemuatan DLL Python di Windows

Pesan error:

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

biasanya mengindikasikan bahwa sistem Windows lokal tidak memiliki Visual C++ paket yang dapat didistribusikan ulang dan/atau DLL runtime Visual C++. Hal ini dapat diatasi dengan baik menginstal paket vc_redist.x64.exe atau menginstal perintah "msvc-runtime" paket Python dengan menjalankan

$ python -m pip install msvc-runtime

Perhatikan bahwa pesan "msvc-runtime" Paket Python tidak dirilis atau dikelola oleh Microsoft.

Metode native tidak ditemukan

Pesan error:

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

biasanya menunjukkan bahwa library native yang diperlukan, seperti /libwickjni.so belum dimuat atau belum disertakan dalam dependensi aplikasi atau tidak dapat ditemukan karena beberapa alasan. Perhatikan bahwa Java mengharuskan setiap library native dimuat secara eksplisit menggunakan fungsi System.loadLibrary.

Tidak ditemukan kalkulator terdaftar

Pesan error:

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

biasanya menunjukkan bahwa OurNewCalculator direferensikan dengan nama dalam CalculatorGraphConfig, tetapi target library untuk OurNewCalculator memiliki belum ditautkan ke biner aplikasi. Ketika kalkulator baru ditambahkan ke kalkulator itu, kalkulator itu juga harus ditambahkan sebagai dependensi build dari aplikasi-aplikasi ini menggunakan grafik kalkulator.

Error ini terdeteksi saat runtime karena grafik kalkulator mereferensikan kalkulator berdasarkan nama melalui kolom CalculatorGraphConfig::Node:calculator. Ketika pustaka untuk kalkulator ditautkan ke biner aplikasi, kalkulator secara otomatis didaftarkan dengan nama melalui Makro REGISTER_CALCULATOR menggunakan library registration.h. Perlu diketahui bahwa REGISTER_CALCULATOR dapat mendaftarkan kalkulator dengan awalan namespace, identik dengan namespace C++-nya. Dalam hal ini, grafik kalkulator juga harus menggunakan awalan namespace yang sama.

Error Kehabisan Memori

Memori yang habis dapat menjadi gejala terlalu banyak paket yang terakumulasi di dalam menjalankan grafik MediaPipe. Error ini dapat terjadi karena beberapa alasan, seperti:

  1. Beberapa kalkulator dalam grafik tidak dapat mengimbangi datangnya paket dari aliran input realtime seperti kamera video.
  2. Beberapa kalkulator menunggu paket yang tidak akan pernah tiba.

Untuk masalah (1), mungkin perlu untuk menjatuhkan beberapa paket lama ke memproses paket yang lebih baru. Untuk beberapa petunjuk, lihat: How to process realtime input streams

Untuk masalah (2), bisa jadi satu aliran input tidak memiliki paket untuk beberapa alasan. Perangkat atau kalkulator mungkin salah dikonfigurasi atau mungkin menghasilkan paket hanya secara sporadis. Hal ini dapat menyebabkan kalkulator downstream menunggu banyak paket yang tidak akan pernah tiba, yang pada gilirannya menyebabkan paket terakumulasi pada beberapa aliran input. MediaPipe mengatasi masalah seperti ini dengan menggunakan "batas stempel waktu". Untuk beberapa petunjuk, lihat: How to process realtime input streams

Setelan MediaPipe CalculatorGraphConfig::max_queue_size membatasi jumlah paket yang diantrekan pada aliran input apa pun dengan input throttling ke grafik. Untuk streaming input real-time, jumlah paket yang diantrekan pada input {i>stream <i}seharusnya hampir selalu bernilai nol atau satu. Jika tidak, Anda mungkin melihat pesan peringatan berikut:

Resolved a deadlock by increasing max_queue_size of input stream

Selain itu, setelan CalculatorGraphConfig::report_deadlock dapat ditetapkan untuk menyebabkan grafik berjalan untuk gagal dan menampilkan deadlock sebagai error, sehingga max_queue_size sebagai batas penggunaan memori.

Grafik hang

Banyak aplikasi akan memanggil CalculatorGraph::CloseAllPacketSources dan CalculatorGraph::WaitUntilDone untuk menyelesaikan atau menangguhkan eksekusi MediaPipe grafik. Tujuannya di sini adalah untuk memungkinkan kalkulator atau paket yang tertunda menyelesaikan pemrosesan, lalu menghentikan grafiknya. Jika semua berjalan lancar, setiap aliran data dalam grafik akan mencapai Timestamp::Done, dan setiap kalkulator akan hubungi CalculatorBase::Close, lalu CalculatorGraph::WaitUntilDone dapat diselesaikan dengan sukses.

Jika beberapa kalkulator atau aliran data tidak dapat mencapai status Timestamp::Done atau CalculatorBase::Close, metode CalculatorGraph::Cancel dapat berupa dipanggil untuk menghentikan grafik berjalan tanpa menunggu semua kalkulator yang tertunda dan paket untuk diselesaikan.

Waktu output tidak merata

Beberapa grafik MediaPipe realtime menghasilkan serangkaian {i>frame<i} video untuk dilihat sebagai efek video atau sebagai diagnostik video. Terkadang, grafik MediaPipe akan menghasilkan frame ini dalam cluster, misalnya saat beberapa frame output diekstrapolasi dari cluster {i> frame<i} input yang sama. Jika output-nya disajikan saat dihasilkan, beberapa {i>frame<i} {i>output<i} segera diganti dengan frame di klaster yang sama, yang membuat hasil sulit dilihat dan dievaluasi secara visual. Dalam kasus seperti ini, visualisasi {i>output<i} dapat ditingkatkan dengan menyajikan {i>frame<i} pada interval waktu yang sama secara {i>real time<i}.

MediaPipe mengatasi kasus penggunaan ini dengan memetakan stempel waktu ke titik secara real time. Setiap stempel waktu menunjukkan waktu dalam mikrodetik, dan kalkulator seperti LiveClockSyncCalculator dapat menunda output paket agar sesuai dengan stempel waktu. Kalkulator semacam ini menyesuaikan pengaturan waktu {i>output<i} sehingga:

  1. Waktu antar {i>output<i} sesuai dengan waktu antara sedekat mungkin.
  2. Output dihasilkan dengan penundaan sekecil mungkin.

CalculatorGraph mengalami keterlambatan input

Untuk banyak grafik MediaPipe realtime, latensi rendah menjadi tujuannya. MediaPipe mendukung "pipelined" gaya pemrosesan paralel untuk memulai pemrosesan setiap paket sedini mungkin. Biasanya latensi terendah adalah total waktu yang dibutuhkan oleh setiap kalkulator di sepanjang “jalur kritis” berturut-turut kalkulator. Latensi grafik MediaPipe bisa lebih buruk daripada yang ideal karena penundaan yang diperkenalkan untuk menampilkan frame interval yang merata seperti yang dijelaskan dalam Waktu output tidak merata.

Jika beberapa kalkulator dalam grafik tidak dapat mengimbangi input realtime stream, maka latensi akan terus meningkat, dan Anda harus melepaskan beberapa paket input. Teknik yang direkomendasikan adalah menggunakan MediaPipe kalkulator yang dirancang khusus untuk tujuan ini seperti FlowLimiterCalculator seperti yang dijelaskan dalam How to process realtime input streams.