缺少 Python 二進位檔路徑
錯誤訊息:
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
通常表示 Bazel 找不到本機 Python 二進位檔。解題
請先找出 Python 二進位檔的位置,然後
--action_env PYTHON_BIN_PATH=<path to python binary>
傳送給 Bazel 指令。適用對象
例如,您可以改用
以下指令:
bazel build -c opt \
--define MEDIAPIPE_DISABLE_GPU=1 \
--action_env PYTHON_BIN_PATH=$(which python3) \
mediapipe/examples/desktop/hello_world
缺少必要的 Python 套件
錯誤訊息:
ImportError: No module named numpy
Is numpy installed?
通常表示系統未安裝特定 Python 套件。請使用
pip install
或 pip3 install
,視您的 Python 二進位檔版本而定
安裝這些套件
無法擷取遠端依附元件存放區
錯誤訊息:
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)
通常表示 Bazel 無法下載必要的依附元件存放區
所需資料MedaiPipe 有多個依附元件存放區
由 Google 網站代管。在某些區域,您可能需要設定網路 Proxy
或是使用 VPN 來存取這些資源您可能也需要將
--host_jvm_args "-DsocksProxyHost=<ip address> -DsocksProxyPort=<port number>"
套用至 Bazel 指令詳情請見
這個 GitHub 問題
,掌握更多詳細資訊。
如果您認為這不是網路問題,
部分資源可能暫時無法使用,請執行 bazel clean --expunge
並稍後再試。如果問題仍未解決,請透過下列工具提交 GitHub 問題:
詳細錯誤訊息
MediaPipe OpenCV 設定不正確
錯誤訊息:
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)'
通常表示 MediaPipe 未正確設定 OpenCV。請 查看「安裝 OpenCV 和 FFmpeg」中的 個區段 安裝,瞭解如何修改 MediaPipe 的 WORKSPACE 和 本機 opencv 的 linux_opencv/macos_opencv/windows_opencv.BUILD 檔案 程式庫這個 GitHub 問題 或許也會有幫助
Python pip 安裝失敗
錯誤訊息:
ERROR: Could not find a version that satisfies the requirement mediapipe
ERROR: No matching distribution found for mediapipe
執行 pip install mediapipe
之後,通常表示系統沒有合適的 MediaPipe Python。
請注意,MediaPipe Python PyPI 已正式支援 64 位元。
新版 Python 3.7 至 3.10,並搭載以下作業系統:
- x86_64 Linux
- x86_64 macOS 10.15 以上版本
- amd64 Windows
如果作業系統目前支援且仍出現這個錯誤,請確定 Python 和 pip 二進位檔都適用於 Python 3.7 至 3.10。否則 請考慮按照下列步驟在本機建構 MediaPipe Python 套件: 如需操作說明,請參閱這篇文章。
Windows 上的 Python DLL 載入失敗
錯誤訊息:
ImportError: DLL load failed: The specified module could not be found
通常表示本機 Windows 系統缺少 Visual C++ 可轉散發套件和/或 Visual C++ 執行階段 DLL。在這之前 請安裝 vc_redist.x64.exe 或是安裝「msvc-runtime」將 Python 套件
$ python -m pip install msvc-runtime
請注意,「msvc-runtime」Python 套件尚未發布或維護 由 Microsoft 提供。
找不到原生廣告方法
錯誤訊息:
java.lang.UnsatisfiedLinkError: No implementation found for void com.google.wick.Wick.nativeWick
通常表示所需的原生資料庫,例如 /libwickjni.so
並未
或未包含在應用程式的依附元件中,或是無法
。請注意,Java 要求每個原生資料庫都必須
使用 System.loadLibrary
函式明確載入。
找不到已註冊的計算機
錯誤訊息:
No registered object with name: OurNewCalculator; Unable to find Calculator "OurNewCalculator"
通常表示OurNewCalculator
CalculatorGraphConfig
,但 OurNewCalculator 的程式庫目標有
並未連結至應用程式二進位檔當
計算機圖表,必須同時將計算機新增為
自訂應用程式與應用程式
這個錯誤會在執行階段發生,因為計算機圖形會參考
按名稱含 CalculatorGraphConfig::Node:calculator
欄位的計算機。
當計算機的程式庫連結至應用程式二進位檔時,
系統會透過
使用 registration.h
程式庫的 REGISTER_CALCULATOR
巨集。請注意,
REGISTER_CALCULATOR
可以註冊含有命名空間前置字元的計算機。
與 C++ 命名空間相同在這種情況下,計算機圖也必須使用
使用相同的命名空間
「記憶體不足」錯誤
記憶體耗盡會形成 執行 MediaPipe 圖表可能原因很多,例如:
- 圖形中的一些計算機功能無法趕上出現 從即時輸入串流 (例如攝影機) 擷取的封包。
- 有些計算機正在等候從未送達的封包。
以問題來說 (1),您可能必須將舊的封包
處理較近期的封包如需提示,請參閱:
How to process realtime input streams
。
問題 (2) 可能是因為某個輸入串流缺少某些應用程式的封包
原因。裝置或計算機可能設定錯誤或產生封包
偶爾這會導致下游計算機等待許多
永遠不會送達的封包, 進而導致封包從
某些輸入串流MediaPipe 使用
「timestamp bounds」(時間戳記範圍)。如需提示,請參閱:
How to process realtime input streams
。
MediaPipe 設定 CalculatorGraphConfig::max_queue_size
可限制
藉由限制輸入資料流,
圖表。針對即時輸入串流,這是指輸入資料排入佇列的封包數量
串流通常應該是 0 或 1如果不是這樣,您可能會看到
以下警告訊息:
Resolved a deadlock by increasing max_queue_size of input stream
此外,您可以將「CalculatorGraphConfig::report_deadlock
」設定設為原因
圖表執行失敗,並將死結顯示為錯誤,例如 max_queue_size
做為記憶體用量限制
圖表停止運作
許多應用程式都會呼叫 CalculatorGraph::CloseAllPacketSources
並
CalculatorGraph::WaitUntilDone
可結束或暫停 MediaPipe 的執行
圖表。這個步驟的目標是讓所有待處理計算機或封包
完成處理作業,然後關閉圖表。如果一切順利
達到 Timestamp::Done
,而且每個計算機都會
觸及 CalculatorBase::Close
,然後CalculatorGraph::WaitUntilDone
才能順利完成
部分計算機或串流無法達到狀態 Timestamp::Done
或
CalculatorBase::Close
,接著CalculatorGraph::Cancel
方法的可
會呼叫 來終止圖表執行作業,不必等待所有待處理的計算機
要完成的封包和封包
輸出時間不均
有些即時 MediaPipe 圖表會產生一系列影片影格,方便觀眾 影片特效或影片診斷工具。有時候,MediaPipe 圖形會產生 例如在多個輸出影格中 從同一輸入影格叢集推斷。如果輸出內容 部分輸出影格會在產生時立即取代 導致使用者難以查看和評估結果 視覺效果在這種情況下,我們可以用下列方式改善輸出圖表: 以平均間隔即時顯示影格
MediaPipe 將時間戳記對應至即時點,藉此處理這個使用情境。
每個時間戳記都代表以微秒為單位的時間,且計算器 (例如
LiveClockSyncCalculator
可以將封包的輸出延遲至與其相符
時間戳記。這種計算機可調整輸出時間,以:
- 輸出之間的時間相當於時間戳記的
- 輸出結果會以最短的延遲時間產生。
輸入後方的計算機圖形延遲
對許多即時 MediaPipe 圖表來說,低延遲是目標。MediaPipe 支援「pipelined」以便開始處理 及早下載每個封包在正常情況下,最低延遲時間為 每個計算工具在「關鍵路徑」上花費的總時間連續的 計算機。MediaPipe 圖表的延遲時間可能不如理想 也是因為上述的 ANR 事件發生時間延遲 輸出時間不均。
如果圖表中的部分計算工具無法跟上即時輸入的速度
延遲時間也會持續增加
捨棄一些輸入封包建議的技巧是使用 MediaPipe
專門針對這類用途設計的計算機,例如
FlowLimiterCalculator
,如
How to process realtime input streams
。