समस्या निवारण

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

आम तौर पर, यह बताता है कि Basel को लोकल Python बाइनरी नहीं मिली. हल करने के लिए है, तो कृपया पहले यह पता लगाएं कि Python बाइनरी कहां है और फिर उसे जोड़ें --action_env PYTHON_BIN_PATH=<path to python binary> किया गया हो. इसके लिए उदाहरण के लिए, सिस्टम डिफ़ॉल्ट 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 के कुछ पैकेज इंस्टॉल नहीं हैं. कृपया चलाएं आपके Python बाइनरी वर्शन के आधार पर, pip install या pip3 install को उन पैकेज को इंस्टॉल करने के लिए किया जा सकता है.

रिमोट डिपेंडेंसी रिपॉज़िटरी फ़ेच नहीं की जा सकी

गड़बड़ी का मैसेज:

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)

आम तौर पर, इससे पता चलता है कि Baज़र, ज़रूरी डिपेंडेंसी डेटा स्टोर करने की जगहें डाउनलोड नहीं कर सका की ज़रूरत होती है. MedaiPipe में कई डिपेंडेंसी रिपॉज़िटरी हैं Google साइटों के ज़रिए होस्ट किया गया. कुछ इलाकों में, आपको नेटवर्क प्रॉक्सी सेट अप करने की ज़रूरत पड़ सकती है इसके अलावा, इन संसाधनों को ऐक्सेस करने के लिए वीपीएन का इस्तेमाल किया जा सकता है. आपको यह भी जोड़ना पड़ सकता है --host_jvm_args "-DsocksProxyHost=<ip address> -DsocksProxyPort=<port number>" अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है को ऐक्सेस करने का अनुरोध कर सकते हैं. यहां जाएं: 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 इंस्टॉल करें" पर एक नज़र डालें सेक्शन इंस्टॉलेशन, ताकि MediaPipe के वर्कस्पेस में बदलाव करने का तरीका और आपके डिवाइस में मौजूद Opencv के लिए linux_opencv/macos_opencv/Windows_opencv.BUILD फ़ाइलें लाइब्रेरी. GitHub से जुड़ी यह समस्या से भी मदद मिल सकती है.

Python पीआईपी इंस्टॉल नहीं किया जा सका

गड़बड़ी का मैसेज:

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 लिनक्स
  • x86_64 macOS 10.15 या इसके बाद के वर्शन
  • amd64 विंडो

अगर ओएस फ़िलहाल काम कर रहा है और आपको अब भी यह गड़बड़ी दिखती है, तो कृपया पक्का करें कि Python और पीआईपी बाइनरी, दोनों का इस्तेमाल Python 3.7 से 3.10 वर्शन के लिए किया जाता है. या फिर, कृपया MediaPipe Python पैकेज को स्थानीय तौर पर बनाने के बारे में सोचें. इसके लिए, निर्देश यहां पढ़ें.

Windows पर Python DLL को लोड नहीं किया जा सका

गड़बड़ी का मैसेज:

ImportError: DLL load failed: The specified module could not be found

आम तौर पर इससे पता चलता है कि लोकल Windows सिस्टम में Visual C++ ऐसे पैकेज और/या विज़ुअल C++ रनटाइम डीएलएल. यह समस्या इस तरह हल की जा सकती है या तो उन्हें इंस्टॉल करने से पहले vc_redist.x64.exe या "msvc-runtime" को इंस्टॉल करना Python पैकेज: रन करके

$ python -m pip install msvc-runtime

कृपया ध्यान दें कि "msvc-runtime" Python पैकेज रिलीज़ नहीं किया गया है और न ही रखरखाव किया जा रहा है से लिंक करें.

नेटिव तरीका नहीं मिला

गड़बड़ी का मैसेज:

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 लेकिन YourNewCalculator के लिए लाइब्रेरी में टारगेट किया गया है ऐप्लिकेशन बाइनरी से लिंक नहीं किया गया है. जब कैलकुलेटर ग्राफ़, उस कैलकुलेटर को इसकी बिल्ड डिपेंडेंसी के रूप में भी जोड़ा जाना चाहिए कैल्क्यूलेटर ग्राफ़ का इस्तेमाल करने वाले ऐप्लिकेशन.

यह गड़बड़ी रनटाइम के दौरान पकड़ी जाती है, क्योंकि कैलकुलेटर ग्राफ़ उनके CalculatorGraphConfig::Node:calculator फ़ील्ड के ज़रिए नाम से कैलकुलेटर. जब किसी कैलकुलेटर की लाइब्रेरी को किसी ऐप्लिकेशन बाइनरी से लिंक किया जाता है, तो कैल्क्यूलेटर का रजिस्ट्रेशन इसके ज़रिए किया जाता है: registration.h लाइब्रेरी का इस्तेमाल करके REGISTER_CALCULATOR मैक्रो. ध्यान दें कि REGISTER_CALCULATOR नेमस्पेस प्रीफ़िक्स का इस्तेमाल करके, कैलकुलेटर को रजिस्टर कर सकता है, यह इसके C++ नेमस्पेस से मेल खाता है. इस मामले में, कैल्क्यूलेटर ग्राफ़ को एक जैसा नेमस्पेस प्रीफ़िक्स है.

मेमोरी खत्म होने की गड़बड़ी

याददाश्त खत्म होना इसका एक लक्षण है. इसकी वजह यह है कि पैकेट के अंदर बहुत ज़्यादा पैकेट बन जाते हैं MediaPipe ग्राफ़ चला रहे हैं. ऐसा कई वजहों से हो सकता है, जैसे:

  1. ग्राफ़ में मौजूद कुछ कैलकुलेटर वीडियो कैमरा जैसी रीयल टाइम इनपुट स्ट्रीम के पैकेट.
  2. कुछ कैलकुलेटर ऐसे पैकेट का इंतज़ार करते हैं जो कभी नहीं मिलेंगे.

समस्या (1) के लिए, पुराने पैकेट को तो सबसे नए पैकेट प्रोसेस करें. कुछ संकेतों के लिए, यह देखें: How to process realtime input streams.

समस्या (2) के लिए, हो सकता है कि एक इनपुट स्ट्रीम में पैकेट न हों की वजह. ऐसा हो सकता है कि कोई डिवाइस या कैलकुलेटर गलत तरीके से कॉन्फ़िगर किया गया हो या उसकी वजह से पैकेट बने कभी-कभी ही. इस वजह से, डाउनस्ट्रीम कैलकुलेटर कई लेखों को ऐसे पैकेट जो कभी नहीं आते. इसकी वजह से पैकेट, कुछ इनपुट स्ट्रीम भी शामिल होती हैं. MediaPipe, "टाइमस्टैंप की सीमाएं". कुछ संकेतों के लिए देखें: How to process realtime input streams.

MediaPipe सेटिंग CalculatorGraphConfig::max_queue_size किसी भी इनपुट स्ट्रीम पर लाइन में लगाए गए पैकेट की संख्या. इसके लिए, ग्राफ़. रीयलटाइम इनपुट स्ट्रीम के लिए, इनपुट पर लाइन में लगाए गए पैकेट की संख्या स्ट्रीम हमेशा शून्य या एक होनी चाहिए. अगर ऐसा नहीं है, तो आपको नीचे दिया गया चेतावनी मैसेज:

Resolved a deadlock by increasing max_queue_size of input stream

इसके अलावा, CalculatorGraphConfig::report_deadlock सेटिंग को वजह ग्राफ़ चलाने पर गड़बड़ी का मैसेज दिखाया जाता है और डेडलॉक को किसी गड़बड़ी के तौर पर दिखाया जाता है, जैसे कि max_queue_size मेमोरी के इस्तेमाल की सीमा के तौर पर काम करता है.

ग्राफ़ हैंग हो गया है

कई ऐप्लिकेशन CalculatorGraph::CloseAllPacketSources पर कॉल करेंगे और MediaPipe के एक्ज़ीक्यूशन को पूरा करने या निलंबित करने के लिए CalculatorGraph::WaitUntilDone ग्राफ़. इसका मकसद उन कैलकुलेटर या पैकेट को मंज़ूरी देना है जिन्हें मंज़ूरी मिलना बाकी है प्रोसेस पूरी करें और फिर ग्राफ़ को बंद कर दें. अगर सब ठीक रहता है, तो हर ग्राफ़ में स्ट्रीम Timestamp::Done तक पहुंच जाएगी और हर कैलकुलेटर पहले CalculatorBase::Close और फिर CalculatorGraph::WaitUntilDone पर पहुंचें पूरा हो जाएगा.

अगर कुछ कैलकुलेटर या स्ट्रीम स्थिति Timestamp::Done तक नहीं पहुंच पाते या CalculatorBase::Close है, तो CalculatorGraph::Cancel तरीके से सभी बकाया कैल्क्यूलेटर की इंतज़ार किए बिना ग्राफ़ चलाना खत्म करने के लिए कॉल किया जाता है और कुछ पैकेट पूरे करें.

आउटपुट समय असमान है

कुछ रीयलटाइम MediaPipe ग्राफ़, वीडियो फ़्रेम की एक सीरीज़ तैयार करते हैं. ऐसा इसलिए किया जाता है, ताकि वीडियो इफ़ेक्ट या वीडियो डाइग्नोस्टिक्स के तौर पर शामिल किया जा सकता है. कभी-कभी, एक MediaPipe ग्राफ़ क्लस्टर में ये फ़्रेम, उदाहरण के लिए जब कई आउटपुट फ़्रेम इनपुट फ़्रेम के इसी क्लस्टर से अनुमान लगाया जाता है. अगर आउटपुट दिखाए जाते हैं, तो जैसे-जैसे वे बनाए जाते हैं, कुछ आउटपुट फ़्रेम तुरंत बदल जाते हैं एक ही क्लस्टर में फ़्रेम जाते हैं. इसकी वजह से नतीजों को देखना और उनका आकलन करना मुश्किल हो जाता है विज़ुअल तौर पर. ऐसे मामलों में, आउटपुट विज़ुअलाइज़ेशन को इन तरीकों से बेहतर बनाया जा सकता है: इससे फ़्रेम को रीयल टाइम में, एक जैसी इंटरवल पर प्रज़ेंट किया जा सकता है.

MediaPipe, इस्तेमाल के इस उदाहरण को रीयल टाइम में पॉइंट के साथ मैप करके हल करता है. हर टाइमस्टैंप, माइक्रोसेकंड में दिखाया गया समय दिखाता है. साथ ही, यहां एक कैलकुलेटर दिया जाता है, जैसे कि LiveClockSyncCalculator, पैकेट के आउटपुट में देरी कर सकता है, ताकि टाइमस्टैंप. इस तरह का कैलकुलेटर आउटपुट के समय को इस तरह से अडजस्ट करता है कि:

  1. आउटपुट के बीच का समय, टाइमस्टैंप के बीच के समय के हिसाब से है जितना संभव हो सके.
  2. आउटपुट सबसे कम समय में तैयार किए जाते हैं.

कैलकुलेटरग्राफ़, इनपुट से पीछे है

कई रीयलटाइम MediaPipe ग्राफ़ के लिए, कम इंतज़ार का समय एक उद्देश्य है. MediaPipe "पाइपलाइन" का समर्थन करता है शैली समानांतर प्रोसेसिंग, ताकि हर पैकेट को जल्द से जल्द उपलब्ध कराएं. आम तौर पर, सबसे कम संभावित इंतज़ार का समय "क्रिटिकल पाथ" पर हर कैलकुलेटर के लिए, कुल ज़रूरी समय क्रम से कैलकुलेटर. MediaPipe ग्राफ़ के इंतज़ार का समय, सबसे सही समय से ज़्यादा खराब हो सकता है फ़्रेम को सम अंतरालों में दिखाने में देरी हुई है, जैसा कि आउटपुट समय असमान है.

अगर ग्राफ़ में मौजूद कुछ कैलकुलेटर रीयल टाइम इनपुट के हिसाब से काम नहीं कर पाते हैं स्ट्रीम करती है, तो इंतज़ार का समय बढ़ता रहेगा. साथ ही, यह ज़रूरी हो जाता है कि तो कुछ इनपुट पैकेट डाल दें. सुझाई गई तकनीक MediaPipe का इस्तेमाल करना है कैलकुलेटर इस काम के लिए खास तौर पर डिज़ाइन किए गए हों, जैसे कि FlowLimiterCalculator जैसा कि इसमें बताया गया है How to process realtime input streams.