2025, Oct 31 21:17
Как запустить labelme в Windows: обход ошибок onnxruntime и NumPy
Разбираем, почему labelme падает в Windows из‑за onnxruntime и несовместимости NumPy (ImportError, DLL load failed), и показываем рабочий способ запуска GUI.
После установки labelme и попытки запустить его в Windows приложение может вылетать ещё до появления интерфейса. Часто это выражается в ImportError из onnxruntime или сообщении об ABI-несовместимости NumPy. Ниже — воспроизводимый сценарий ошибки и способ, который позволяет открыть графический интерфейс.
Воспроизведение проблемы
После установки стандартного набора пакетов в среде Windows запуск labelme из терминала завершается сбоем.
pip install labelme opencv-python tensorflow matplotlib albumentations
labelme
Выполнение прекращается с трассировкой, указывающей на onnxruntime.
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, затем ещё один импортный сбой.
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
Что происходит
Трассировка показывает, что labelme подключает путь автоматизации, который импортирует onnxruntime через osam. Сбой возникает при загрузке скомпилированного расширения onnxruntime: в одном случае сообщается об ошибке инициализации DLL. В другом случае вывод явно указывает, что модуль, собранный под NumPy 1.x, не может выполняться на NumPy 2.1.3, после чего выбрасывается AttributeError — это снова намекает на проблемы при импорте внутри скомпилированных биндингов onnxruntime.
Попытки переустановить пакеты, перезагрузиться, сменить версию Python или создать новое venv из встроенного терминала VS Code часто не дают результата.
Рабочее решение
Создайте чистое окружение через обычный Windows PowerShell и заставьте onnxruntime импортироваться до инициализации GUI в labelme — это решает проблему запуска.
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. Интерфейс должен открыться.
Почему это важно
Инструменты разметки часто представляют собой тонкую оболочку над смесью чистого Python, скомпилированных расширений и опциональных ML-рантаймов. Когда цепочка импортов доходит до компонентов вроде onnxruntime, окружение должно быть достаточно согласованным, чтобы загрузить эти нативные части. Текст ошибки здесь прямо упоминает несовместимость между NumPy 1.x и 2.x для некоторых собранных модулей и сбой инициализации DLL для биндинга onnxruntime — это объясняет, почему приложение падало ещё до появления окна.
Выводы
Если labelme не запускается в Windows с ошибками, связанными с onnxruntime, начните с чистого виртуального окружения, созданного через обычный Windows PowerShell, и устанавливайте только необходимое. Один раз запустите labelme, чтобы проверить входную точку, а затем вставьте import onnxruntime в начало файла __init__.py пакета labelme — это может заставить GUI загрузиться. Если вы видите сообщение NumPy о том, что модули 1.x не работают на NumPy 2, сам этот вывод описывает возможные варианты, но в данном случае связка PowerShell плюс явный импорт оказалась достаточной, чтобы labelme заработал.