2025, Oct 31 21:32
Windows पर labelme GUI नहीं खुल रही? onnxruntime और NumPy त्रुटियों का व्यावहारिक समाधान
Windows पर labelme में onnxruntime DLL और NumPy ABI त्रुटि से क्रैश? कारण जानें और समाधान पाएं: नया venv, PowerShell, और import onnxruntime से GUI खुलती है.
Windows पर labelme स्थापित करने के बाद जैसे ही आप इसे चलाने की कोशिश करते हैं, ऐप कभी‑कभी GUI खुलने से पहले ही क्रैश हो जाता है। यह समस्या अक्सर onnxruntime से आने वाले ImportError के रूप में या NumPy ABI से जुड़े संदेश की तरह दिखती है। नीचे त्रुटि को पुन: उत्पन्न करने के चरण और एक ऐसा समाधान दिया है, जिससे GUI खुल जाता है।
समस्या को पुन: उत्पन्न करना
Windows वातावरण में सामान्य पैकेज स्थापित करने के बाद, टर्मिनल से labelme चलाना विफल हो जाता है।
pip install labelme opencv-python tensorflow matplotlib albumentations
labelme
रन onnxruntime पर केंद्रित एक traceback के साथ रुक जाता है।
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Scripts\labelme.exe\__main__.py", line 4, in <module>
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\labelme\__main__.py", line 17, in <module>
from labelme.app import MainWindow
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\labelme\app.py", line 21, in <module>
from labelme._automation import bbox_from_text
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\labelme\_automation\bbox_from_text.py", line 6, in <module>
import osam
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\osam\__init__.py", line 5, in <module>
from . import apis # noqa: F401
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\osam\apis.py", line 5, in <module>
import onnxruntime
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\onnxruntime\__init__.py", line 61, in <module>
raise import_capi_exception
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\onnxruntime\__init__.py", line 24, in <module>
from onnxruntime.capi._pybind_state import (
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\onnxruntime\capi\_pybind_state.py", line 32, in <module>
from .onnxruntime_pybind11_state import * # noqa
ImportError: DLL load failed while importing onnxruntime_pybind11_state: A dynamic link library (DLL) initialization routine failed.
शेल से onnx की जाँच करने की कोशिश भी असफल हो सकती है:
onnx --help
onnx : The term 'onnx' is not recognized as the name of a cmdlet, function, script file, or operable program.
onnxruntime-directml स्थापित करके दोबारा चलाने पर विफलता NumPy/ABI त्रुटि में बदल सकती है, और उसके बाद एक और import त्रुटि आ सकती है.
A module that was compiled using NumPy 1.x cannot be run in
NumPy 2.1.3 as it may crash. To support both 1.x and 2.x
versions of NumPy, modules must be compiled with NumPy 2.0.
Some module may need to rebuild instead e.g. with 'pybind11>=2.12'.
If you are a user of the module, the easiest solution will be to
downgrade to 'numpy<2' or try to upgrade the affected module.
We expect that some modules will need time to support NumPy 2.
Traceback (most recent call last): File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Scripts\labelme.exe\__main__.py", line 4, in <module>
from labelme.__main__ import main
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\labelme\__main__.py", line 17, in <module>
from labelme.app import MainWindow
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\labelme\app.py", line 21, in <module>
from labelme._automation import bbox_from_text
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\labelme\_automation\bbox_from_text.py", line 6, in <module>
import osam
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\osam\__init__.py", line 5, in <module>
from . import apis # noqa: F401
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\osam\apis.py", line 5, in <module>
import onnxruntime
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\onnxruntime\__init__.py", line 23, in <module>
from onnxruntime.capi._pybind_state import ExecutionMode # noqa: F401
File "C:\Users\Otaku\AppData\Local\Programs\Python\Python312\Lib\site-packages\onnxruntime\capi\_pybind_state.py", line 32, in <module>
from .onnxruntime_pybind11_state import * # noqa
AttributeError: _ARRAY_API not found
... later ...
ImportError
क्या हो रहा है
Traceback से पता चलता है कि labelme अपनी automation पाथ लोड करता है, जो osam के माध्यम से onnxruntime इम्पोर्ट करता है। विफलता onnxruntime के संकलित एक्सटेंशन को इम्पोर्ट करते वक्त सामने आती है—एक स्थिति में DLL initialization error रिपोर्ट होती है। दूसरी स्थिति में आउटपुट साफ बताता है कि NumPy 1.x के साथ संकलित मॉड्यूल NumPy 2.1.3 पर नहीं चल सकता, और इसके बाद AttributeError उठती है, जो फिर से onnxruntime के संकलित बाइंडिंग के इम्पोर्ट‑टाइम मुद्दों की ओर इशारा करती है।
पैकेज दोबारा स्थापित करना, रीस्टार्ट करना, Python संस्करण बदलना, या VS Code के इंटीग्रेटेड टर्मिनल से नया venv बनाना—ऐसी कोशिशें नतीजे को बदलने में सफल नहीं भी हो सकतीं।
कारगर उपाय
सामान्य Windows PowerShell से एक नया वातावरण बनाकर, और labelme की GUI लोडिंग से पहले onnxruntime को इम्पोर्ट करवाकर, लॉन्च की समस्या दूर हो जाती है।
mkdir tmp; cd tmp; python -m venv venv; . venv/Scripts/Activate.ps1; pip install labelme; labelme --help
फिर उसी PowerShell सत्र से अपने एडिटर में labelme के पैकेज के एंट्री फ़ाइल को खोलें।
code venv/Lib/site-packages/labelme/__init__.py
सबसे ऊपर एक पंक्ति जोड़ें:
import onnxruntime
फ़ाइल सहेजें, उसी PowerShell विंडो पर लौटें, और labelme चलाएँ। GUI खुल जाना चाहिए।
यह क्यों मायने रखता है
लेबलिंग टूल अक्सर शुद्ध Python, संकलित एक्सटेंशन और वैकल्पिक ML रनटाइम का मिश्रण होते हैं, जिन पर हल्का-सा रैपर चढ़ा होता है। जब इम्पोर्ट‑चेन onnxruntime जैसे घटकों तक पहुँचती है, तो वातावरण इतना संगत होना चाहिए कि वे नैटिव हिस्से लोड हो सकें। यहाँ की त्रुटि संदेश साफ बताते हैं कि कुछ संकलित मॉड्यूल के लिए NumPy 1.x बनाम 2.x असंगतता है और onnxruntime बाइंडिंग में DLL initialization विफलता मिल रही है—यही वजह है कि ऐप विंडो बन पाने से पहले ही क्रैश हो रहा था।
निष्कर्ष
यदि Windows पर labelme onnxruntime से जुड़ी त्रुटियों के साथ शुरू नहीं होता, तो सामान्य Windows PowerShell से एक साफ वर्चुअल वातावरण बनाकर केवल ज़रूरी पैकेज स्थापित करें। एंट्री पॉइंट जाँचने के लिए labelme को एक बार चलाएँ, और फिर labelme के __init__.py की शुरुआत में import onnxruntime जोड़ने से GUI लोड हो सकती है। यदि आपको NumPy वाला संदेश भी मिले कि 1.x पर संकलित मॉड्यूल NumPy 2 पर नहीं चलेंगे, तो वही आउटपुट संभावित रास्ते बता देता है; इस मामले में, PowerShell के इस वर्कफ़्लो और स्पष्ट import से labelme चल पड़ा।