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 lokasi biner python, lalu tambahkan --action_env PYTHON_BIN_PATH=<path to python binary> ke perintah Bazel. Misalnya, Anda dapat beralih menggunakan biner python3 default sistem 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. Jalankan pip install atau pip3 install, bergantung pada versi biner Python Anda untuk menginstal 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 dihosting oleh situs Google. Di beberapa region, Anda mungkin perlu menyiapkan proxy jaringan atau menggunakan VPN untuk mengakses resource tersebut. Anda mungkin juga perlu menambahkan --host_jvm_args "-DsocksProxyHost=<ip address> -DsocksProxyPort=<port number>" ke perintah Bazel. Lihat masalah GitHub ini untuk mengetahui detail selengkapnya.

Jika Anda yakin bahwa ini bukan masalah jaringan, kemungkinan lainnya adalah beberapa resource mungkin tidak tersedia untuk sementara. Jalankan bazel clean --expunge dan coba lagi nanti. Jika masih tidak berfungsi, laporkan masalah GitHub dengan menyertakan pesan error mendetail.

Konfigurasi MediaPipe OpenCV 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. Lihat bagian "Instal OpenCV dan FFmpeg" di Installation untuk melihat cara memodifikasi file WORKSPACE dan linux_opencv/macos_opencv/windows_opencv.BUILD MediaPipe untuk library opencv lokal Anda. 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 Python 3.7 hingga 3.10 versi 64-bit di OS berikut:

  • x86_64 Linux
  • x86_64 macOS 10.15+
  • Windows amd64

Jika OS saat ini didukung dan Anda masih melihat error ini, pastikan bahwa biner Python dan pip adalah untuk Python 3.7 hingga 3.10. Jika tidak, sebaiknya buat paket MediaPipe Python 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 menunjukkan bahwa sistem Windows lokal tidak memiliki paket yang dapat didistribusikan Visual C++ dan/atau DLL runtime Visual C++. Hal ini dapat diatasi dengan menginstal vc_redist.x64.exe resmi atau menginstal paket Python "msvc-runtime" dengan menjalankan

$ python -m pip install msvc-runtime

Perlu diketahui bahwa paket Python "msvc-runtime" 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 belum ditautkan ke biner aplikasi. Saat kalkulator baru ditambahkan ke grafik kalkulator, kalkulator tersebut juga harus ditambahkan sebagai dependensi build aplikasi menggunakan grafik kalkulator.

Error ini tertangkap saat runtime karena grafik kalkulator mereferensikan kalkulator mereka berdasarkan nama melalui kolom CalculatorGraphConfig::Node:calculator. Saat library untuk kalkulator ditautkan ke biner aplikasi, kalkulator akan otomatis didaftarkan menurut nama melalui makro REGISTER_CALCULATOR menggunakan library registration.h. Perhatikan bahwa REGISTER_CALCULATOR dapat mendaftarkan kalkulator dengan awalan namespace, yang identik dengan namespace C++-nya. Dalam hal ini, grafik kalkulator juga harus menggunakan awalan namespace yang sama.

Error Out Of Memory

Kehabisan memori dapat menjadi gejala dari terlalu banyak paket yang terakumulasi di dalam grafik MediaPipe yang berjalan. Hal ini dapat terjadi karena beberapa alasan, seperti:

  1. Beberapa kalkulator dalam grafik tidak dapat mengimbangi kemunculan paket dari streaming input realtime seperti kamera video.
  2. Beberapa kalkulator menunggu paket yang tidak akan pernah datang.

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

Untuk masalah (2), bisa jadi satu aliran input tidak memiliki paket karena suatu alasan. Perangkat atau kalkulator mungkin salah dikonfigurasi atau hanya dapat menghasilkan paket secara sporadis. Hal ini dapat menyebabkan kalkulator downstream menunggu banyak paket yang tidak akan pernah tiba, yang kemudian menyebabkan paket terakumulasi di beberapa aliran inputnya. MediaPipe mengatasi masalah semacam ini menggunakan "batas stempel waktu". Untuk mengetahui 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 throttling input ke grafik. Untuk aliran input real time, jumlah paket yang diantrekan pada aliran input hampir selalu selalu 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 gagal dijalankan dan menampilkan deadlock sebagai error, sehingga max_queue_size berfungsi sebagai batas penggunaan memori.

Hang grafik

Banyak aplikasi akan memanggil CalculatorGraph::CloseAllPacketSources dan CalculatorGraph::WaitUntilDone untuk menyelesaikan atau menangguhkan eksekusi grafik MediaPipe. Tujuannya di sini adalah untuk memungkinkan kalkulator atau paket yang tertunda menyelesaikan pemrosesan, lalu mematikan grafik. Jika semuanya berjalan lancar, setiap aliran dalam grafik akan mencapai Timestamp::Done, dan setiap kalkulator akan mencapai CalculatorBase::Close, lalu CalculatorGraph::WaitUntilDone akan berhasil diselesaikan.

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

Waktu output tidak merata

Beberapa grafik MediaPipe real time menghasilkan serangkaian frame video untuk ditonton sebagai efek video atau sebagai diagnostik video. Terkadang, grafik MediaPipe akan menghasilkan frame ini dalam cluster, misalnya saat beberapa frame output diekstrapolasi dari cluster frame input yang sama. Jika output ditampilkan saat dihasilkan, beberapa frame output langsung diganti dengan frame berikutnya di cluster yang sama, sehingga sulit dilihat dan dievaluasi secara visual. Dalam kasus seperti ini, visualisasi output dapat ditingkatkan dengan menampilkan frame pada interval yang sama secara real time.

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 cocok dengan stempel waktu. Kalkulator semacam ini menyesuaikan waktu output sehingga:

  1. Waktu antar-output sesuai dengan waktu antar-stempel waktu sedekat mungkin.
  2. Output dihasilkan dengan penundaan sekecil mungkin.

CalculatorGraph tertinggal dari input

Bagi banyak grafik MediaPipe realtime, latensi rendah menjadi faktor yang penting. MediaPipe mendukung pemrosesan paralel gaya "pipelined" untuk memulai pemrosesan setiap paket secepat mungkin. Biasanya latensi serendah mungkin adalah total waktu yang diperlukan oleh setiap kalkulator di sepanjang "jalur penting" kalkulator berurutan. Latensi grafik MediaPipe dapat lebih buruk daripada yang ideal karena penundaan yang terjadi untuk menampilkan frame dengan interval genap seperti yang dijelaskan dalam Waktu output tidak merata.

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