ไม่มีเส้นทางไบนารีของ 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 สำหรับ
ตัวอย่างเช่น คุณสามารถเปลี่ยนไปใช้ไบนารี python3 เริ่มต้นของระบบได้
คำสั่งต่อไปนี้
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 ของคุณ
ติดตั้งแพ็กเกจเหล่านั้น
ดึงข้อมูลที่เก็บทรัพยากร Dependency ระยะไกลไม่สำเร็จ
ข้อความแสดงข้อผิดพลาด:
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 ดาวน์โหลดที่เก็บทรัพยากร Dependency ไม่สำเร็จ
ที่ MediaPipe ต้องการ MedaiPipe มีที่เก็บทรัพยากร Dependency หลายรายการ
ที่โฮสต์โดยเว็บไซต์ Google ในบางภูมิภาค คุณอาจต้องตั้งค่าพร็อกซีเครือข่าย
หรือใช้ 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)'
มักจะระบุว่า OpenCV ไม่ได้รับการกำหนดค่าอย่างถูกต้องสำหรับ MediaPipe โปรด โปรดดูที่ "ติดตั้ง OpenCV และ FFmpeg" ส่วนต่างๆ ใน การติดตั้ง เพื่อดูวิธีแก้ไข WORKSPACE และ ไฟล์ linux_opencv/macos_opencv/windows_opencv.BUILD สำหรับ opencv ในเครื่อง ห้องสมุด ปัญหาเกี่ยวกับ 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 ขึ้นไป
- Windows สำหรับ amd64
หากระบบรองรับระบบปฏิบัติการในปัจจุบันแต่คุณยังคงเห็นข้อผิดพลาดนี้อยู่ โปรดตรวจสอบว่า ที่ทั้งไบนารี Python และ PIP ใช้สำหรับ Python 3.7 ถึง 3.10 หรือไม่เช่นนั้น โปรดลองสร้างแพ็กเกจ MediaPipe Python ในเครื่องโดยทำตาม วิธีการที่นี่
โหลด Python DLL ไม่สำเร็จใน Windows
ข้อความแสดงข้อผิดพลาด:
ImportError: DLL load failed: The specified module could not be found
มักจะแสดงว่าระบบ Windows ในเครื่องไม่มี Visual C++ แพ็กเกจที่กระจายซ้ำได้และ/หรือ DLL รันไทม์ของ Visual C++ ปัญหานี้สามารถแก้ไขได้โดย การติดตั้ง 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
ไม่ได้
โหลดแล้วหรือไม่รวมอยู่ในทรัพยากร Dependency ของแอปหรือไม่สามารถ
พบด้วยเหตุผลบางอย่าง โปรดทราบว่า Java กำหนดให้ไลบรารีเนทีฟทั้งหมด
โหลดอย่างชัดเจนโดยใช้ฟังก์ชัน System.loadLibrary
ไม่พบเครื่องคำนวณที่ลงทะเบียนไว้
ข้อความแสดงข้อผิดพลาด:
No registered object with name: OurNewCalculator; Unable to find Calculator "OurNewCalculator"
มักจะระบุว่ามีการอ้างอิง OurNewCalculator
ตามชื่อใน
CalculatorGraphConfig
แต่เป้าหมายไลบรารีสำหรับ OurNewCalculator มี
ไม่ได้ลิงก์กับไบนารีของแอปพลิเคชัน เมื่อมีการเพิ่มเครื่องคิดเลขใหม่ลงใน
กราฟเครื่องคิดเลข เครื่องคำนวณนั้นต้องถูกเพิ่มเป็นทรัพยากร Dependency ของบิลด์
โดยใช้กราฟเครื่องคิดเลข
พบข้อผิดพลาดนี้ขณะรันไทม์ เนื่องจากกราฟเครื่องคำนวณอ้างอิง
เครื่องคำนวณตามชื่อผ่านฟิลด์ CalculatorGraphConfig::Node:calculator
เมื่อไลบรารีสำหรับเครื่องคิดเลขเชื่อมโยงอยู่กับไบนารีของแอปพลิเคชัน
มีการลงทะเบียนเครื่องคิดเลขโดยอัตโนมัติ ด้วยชื่อผ่านทาง
REGISTER_CALCULATOR
โดยใช้ไลบรารี registration.h
โปรดทราบว่า
REGISTER_CALCULATOR
ลงทะเบียนเครื่องคิดเลขที่มีเนมสเปซนำหน้าได้
เหมือนกับเนมสเปซของ C++ ในกรณีนี้ กราฟเครื่องคิดเลขต้องใช้
คำนำหน้าเนมสเปซเดียวกัน
ข้อผิดพลาด "หน่วยความจำเต็ม"
หน่วยความจำที่หมดอาจเนื่องมาจากมีแพ็กเก็ตสะสมมากเกินไปใน ที่กำลังเรียกใช้กราฟ MediaPipe เกิดได้จากหลายสาเหตุ เช่น
- เครื่องคิดเลขบางอย่างในกราฟไม่สามารถก้าวทันเวลามาถึงของ แพ็กเก็ตจากสตรีมอินพุตแบบเรียลไทม์ เช่น กล้องวิดีโอ
- เครื่องคิดเลขบางเครื่องกำลังรอรับแพ็กเก็ตที่จะไม่มาถึง
สำหรับปัญหา (1) คุณอาจจำเป็นต้องทิ้งแพ็กเก็ตเก่าในเวอร์ชันเก่าเพื่อ
ประมวลผลแพ็กเก็ตที่ใหม่กว่า โปรดดูเคล็ดลับต่อไปนี้
How to process realtime input streams
ปัญหา (2) อาจเป็นไปได้ว่าสตรีมอินพุต 1 รายการขาดแพ็กเก็ตสำหรับบางรายการ
เหตุผล อุปกรณ์หรือเครื่องคิดเลขอาจมีการกำหนดค่าที่ไม่ถูกต้องหรืออาจสร้างแพ็กเก็ต
เป็นครั้งคราวเท่านั้น ซึ่งอาจทำให้เครื่องคำนวณดาวน์สตรีมต้องรอ
แพ็กเก็ตที่จะไม่มาถึง ซึ่งส่งผลให้แพ็กเก็ตเกิดการสะสม
สตรีมอินพุตบางรายการของพวกเขา MediaPipe จัดการกับปัญหาประเภทนี้โดยใช้
"การประทับเวลา 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 จะจัดการ Use Case นี้โดยการแมปการประทับเวลากับ Point แบบเรียลไทม์
การประทับเวลาแต่ละรายการจะระบุเวลาเป็นไมโครวินาทีและเครื่องคิดเลข เช่น
LiveClockSyncCalculator
สามารถหน่วงเวลาเอาต์พุตของแพ็กเก็ตในการจับคู่
ของคุณ เครื่องคิดเลขประเภทนี้จะปรับเวลาของเอาต์พุต ดังนี้
- เวลาระหว่างเอาต์พุตสอดคล้องกับเวลาระหว่างการประทับเวลาเป็น อย่างใกล้ชิดที่สุดเท่าที่จะเป็นไปได้
- เอาต์พุตจะเกิดขึ้นโดยมีความล่าช้าน้อยที่สุดที่เป็นไปได้
CalculatorGraph ช้ากว่าอินพุต
สำหรับกราฟ MediaPipe แบบเรียลไทม์จำนวนมาก เวลาในการตอบสนองที่ต่ำเป็นจุดประสงค์อย่างหนึ่ง MediaPipe สนับสนุน "ไปป์แนวตั้ง" การประมวลผลแบบคู่ขนาน แต่ละแพ็คเก็ตให้เร็วที่สุดเท่าที่จะทำได้ โดยปกติแล้ว เวลาในการตอบสนองต่ำสุดที่เป็นไปได้คือ เวลาทั้งหมดที่เครื่องคำนวณแต่ละเครื่องต้องการตาม "เส้นทางสำคัญ" จากช่วง เครื่องคิดเลข เวลาในการตอบสนองของกราฟ MediaPipe อาจแย่กว่าที่ควรจะเป็น เนื่องจากความล่าช้าที่เกิดขึ้นกับเฟรมการแสดงผลเป็นช่วงเวลาสม่ำเสมอตามที่อธิบายไว้ใน เวลาเอาต์พุตไม่สม่ำเสมอ
หากเครื่องคิดเลขบางตัวในกราฟไม่สามารถก้าวทันการป้อนข้อมูลแบบเรียลไทม์
เวลาในการตอบสนองจะเพิ่มขึ้นอย่างต่อเนื่อง และจำเป็นต้อง
ปล่อยแพ็กเก็ตอินพุตบางส่วน เทคนิคที่แนะนำคือการใช้ MediaPipe
เครื่องคำนวณที่ออกแบบมาเพื่อวัตถุประสงค์นี้โดยเฉพาะ เช่น
FlowLimiterCalculator
ตามที่อธิบายไว้ใน
How to process realtime input streams