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:
- Beberapa kalkulator dalam grafik tidak dapat mengimbangi datangnya paket dari aliran input realtime seperti kamera video.
- 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:
- Waktu antar {i>output<i} sesuai dengan waktu antara sedekat mungkin.
- 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
.