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:
- Beberapa kalkulator dalam grafik tidak dapat mengimbangi kemunculan paket dari streaming input realtime seperti kamera video.
- 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:
- Waktu antar-output sesuai dengan waktu antar-stempel waktu sedekat mungkin.
- 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
.