depthai: [BUG] DepthAI does not work with OAK-D in LXD containers
Description of the bug
Running the DepthAI demo with python3 depthai_demo.py
using a USB-C OAK-D in an LXD container fails to find the device after booting. Instead it gives the following errors:
$ python3 depthai_demo.py
Using depthai module from: /home/geoff/.local/lib/python3.8/site-packages/depthai.cpython-38-x86_64-linux-gnu.so
Depthai version installed: 2.8.0.0
Available devices:
[0] 14442C1061F95ED700 [X_LINK_UNBOOTED]
Traceback (most recent call last):
File "depthai_demo.py", line 132, in <module>
with dai.Device(pm.p.getOpenVINOVersion(), device_info, usb2Mode=conf.args.usb_speed == "usb2") as device:
RuntimeError: Failed to find device after booting, error message: X_LINK_DEVICE_NOT_FOUND
This is the dmesg
output from plugging in the USB cable until the demonstration application terminates with an error.
[2528003.223803] usb 3-2: new high-speed USB device number 38 using xhci_hcd
[2528003.434236] usb 3-2: New USB device found, idVendor=03e7, idProduct=2485, bcdDevice= 0.01
[2528003.434239] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[2528003.434240] usb 3-2: Product: Movidius MyriadX
[2528003.434242] usb 3-2: Manufacturer: Movidius Ltd.
[2528003.434242] usb 3-2: SerialNumber: 03e72485
[2528007.911720] usb 3-2: USB disconnect, device number 38
[2528008.424018] usb 4-2: new SuperSpeed Gen 1 USB device number 19 using xhci_hcd
[2528008.448490] usb 4-2: New USB device found, idVendor=03e7, idProduct=f63b, bcdDevice= 1.00
[2528008.448494] usb 4-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[2528008.448496] usb 4-2: Product: Luxonis Device
[2528008.448497] usb 4-2: Manufacturer: Intel Corporation
[2528008.448498] usb 4-2: SerialNumber: 14442C1061F95ED700
[2528016.490494] usb 3-2: new high-speed USB device number 39 using xhci_hcd
[2528016.697634] usb 3-2: New USB device found, idVendor=03e7, idProduct=2485, bcdDevice= 0.01
[2528016.697637] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[2528016.697638] usb 3-2: Product: Movidius MyriadX
[2528016.697639] usb 3-2: Manufacturer: Movidius Ltd.
[2528016.697640] usb 3-2: SerialNumber: 03e72485
[2528016.937216] usb 4-2: USB disconnect, device number 19
Running it again after this fails to even find the device in bootloader mode:
$ python3 depthai_demo.py
Using depthai module from: /home/geoff/.local/lib/python3.8/site-packages/depthai.cpython-38-x86_64-linux-gnu.so
Depthai version installed: 2.8.0.0
Available devices:
[0] <error> [X_LINK_UNBOOTED]
Traceback (most recent call last):
File "depthai_demo.py", line 132, in <module>
with dai.Device(pm.p.getOpenVINOVersion(), device_info, usb2Mode=conf.args.usb_speed == "usb2") as device:
RuntimeError: Failed to find device (ma2480), error message: X_LINK_DEVICE_NOT_FOUND
There is no dmesg
output while running the application this second time.
Reconnecting the USB cable and running the demonstration application again gives the first result above, where the device is at first found, then lost.
Launching the same application in the host OS works fine. The camera image and disparity map are displayed correctly until Ctrl-C
is pressed.
$ python depthai_demo.py
Using depthai module from: /home/geoff/.local/lib/python3.9/site-packages/depthai.cpython-39-x86_64-linux-gnu.so
Depthai version installed: 2.8.0.0
Available devices:
[0] 14442C1061F95ED700 [X_LINK_UNBOOTED]
^CTraceback (most recent call last):
File "/home/geoff/src/depthai/depthai_demo.py", line 297, in <module>
key = cv2.waitKey(1)
KeyboardInterrupt
This is the dmesg
output for when the application runs correctly on the host OS, from connecting the USB cable through to pressing Ctrl-C
:
[2527911.859755] usb 3-2: new high-speed USB device number 35 using xhci_hcd
[2527912.066882] usb 3-2: New USB device found, idVendor=03e7, idProduct=2485, bcdDevice= 0.01
[2527912.066885] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[2527912.066887] usb 3-2: Product: Movidius MyriadX
[2527912.066888] usb 3-2: Manufacturer: Movidius Ltd.
[2527912.066888] usb 3-2: SerialNumber: 03e72485
[2527921.597178] usb 3-2: USB disconnect, device number 35
[2527922.106617] usb 4-2: new SuperSpeed Gen 1 USB device number 17 using xhci_hcd
[2527922.131113] usb 4-2: New USB device found, idVendor=03e7, idProduct=f63b, bcdDevice= 1.00
[2527922.131117] usb 4-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[2527922.131120] usb 4-2: Product: Luxonis Device
[2527922.131121] usb 4-2: Manufacturer: Intel Corporation
[2527922.131123] usb 4-2: SerialNumber: 14442C1061F95ED700
[2527926.566500] usb 3-2: new high-speed USB device number 36 using xhci_hcd
[2527926.773672] usb 3-2: New USB device found, idVendor=03e7, idProduct=2485, bcdDevice= 0.01
[2527926.773675] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[2527926.773677] usb 3-2: Product: Movidius MyriadX
[2527926.773678] usb 3-2: Manufacturer: Movidius Ltd.
[2527926.773679] usb 3-2: SerialNumber: 03e72485
[2527926.939837] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.940000] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.940157] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.940313] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.940469] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.940624] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.940780] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.940940] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.941101] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.941261] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.941418] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.941574] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.941731] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.941888] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.942043] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.942200] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.942357] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.942577] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.942738] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.942895] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.943051] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.943222] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.943380] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.943537] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.943696] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.943853] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.944011] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.944167] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.944324] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.944482] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.944638] usb 4-2: usbfs: usb_submit_urb returned -19
[2527926.944795] usb 4-2: usbfs: usb_submit_urb returned -19
[2527927.006460] usb 4-2: USB disconnect, device number 17
To Reproduce
Steps to reproduce the behavior:
- Create an LXD container with Ubuntu 20.04
lxc launch ubuntu:20.04 my_container
- Enter the container
lxc exec my_container --user 1000 --group 1000 -- bash --login
- In the container, set up the udev rule for DepthAI
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666"' | sudo tee /etc/udev/rules.d/80-movidius.rules sudo udevadm control --reload-rules && sudo udevadm trigger
- Plug in the OAK-D
- On the host, add the USB device to the container:
lxc config device add my_container oakd usb vendorid=03e7
- In the container, execute the
depthai_demo.py
demonstration application - Observe that the application finds the OAK-D in its bootloader mode, but fails to find the device after it reboots.
Expected behavior
The demonstration application launches in an LXD container, opens the OAK-D device and displays the camera image and the disparity map.
Attach system log
Output of log_system_information.py:
{
"architecture": "64bit ELF",
"machine": "x86_64",
"platform": "Linux-5.12.15-arch1-1-x86_64-with-glibc2.33",
"processor": "",
"python_build": "default Jun 30 2021 10:22:16",
"python_compiler": "GCC 11.1.0",
"python_implementation": "CPython",
"python_version": "3.9.6",
"release": "5.12.15-arch1-1",
"system": "Linux",
"version": "#1 SMP PREEMPT Wed, 07 Jul 2021 23:35:29 +0000",
"win32_ver": "",
"uname": "Linux atlas 5.12.15-arch1-1 #1 SMP PREEMPT Wed, 07 Jul 2021 23:35:29 +0000 x86_64",
"packages": [
"alabaster==0.7.12",
"appdirs==1.4.4",
"apsw==3.35.4.post1",
"argcomplete==1.12.1",
"asn1crypto==1.4.0",
"astroid==2.4.2",
"autopep8==1.5.5",
"Babel==2.9.1",
"backcall==0.2.0",
"beautifulsoup4==4.9.3",
"blobconverter==1.0.0",
"boto3==1.18.18",
"botocore==1.21.18",
"breathe==4.30.0",
"bs4==0.0.1",
"btrfsutil==5.12.1",
"CacheControl==0.12.6",
"cchardet==2.1.7",
"certifi==2020.12.5",
"cffi==1.14.6",
"chardet==3.0.4",
"colorama==0.4.4",
"contextlib2==0.6.0.post1",
"cryptography==3.4.7",
"css-parser==1.0.6",
"cssselect==1.1.0",
"decorator==5.0.9",
"depthai==2.8.0.0",
"distlib==0.3.2",
"distro==1.5.0",
"dnspython==1.16.0",
"docopt==0.6.2",
"docutils==0.17.1",
"entrypoints==0.3",
"exhale==0.2.3",
"feedparser==5.2.1",
"ffmpy3==0.2.4",
"flake8==3.9.2",
"greenlet==1.1.0",
"html2text==2020.1.16",
"html5-parser==0.4.9",
"html5lib==1.1",
"idna==2.10",
"ifaddr==0.1.7",
"imagesize==1.2.0",
"importlib-metadata==4.6.0",
"ipython==7.25.0",
"ipython_genutils==0.2.0",
"isc==2.0",
"isort==5.7.0",
"jedi==0.17.2",
"jeepney==0.6.0",
"Jinja2==3.0.1",
"jmespath==0.10.0",
"keyring==23.0.1",
"keyutils==0.6",
"lazy-object-proxy==1.4.3",
"lensfun==0.3.95",
"louis==3.18.0",
"lxml==4.6.3",
"Markdown==3.3.4",
"MarkupSafe==2.0.1",
"matplotlib-inline==0.1.2",
"mccabe==0.6.1",
"mechanize==0.4.5",
"more-itertools==8.7.0",
"msgpack==1.0.2",
"mutagen==1.45.1",
"mypy==0.800",
"mypy-extensions==0.4.3",
"netifaces==0.11.0",
"netsnmp-python==1.0a1",
"networkx==2.5.1",
"nftables==0.1",
"npyscreen==4.10.5",
"numpy==1.20.3",
"opencv-contrib-python==4.5.1.48",
"opencv-python==4.5.1.48",
"ordered-set==4.0.2",
"packaging==20.9",
"parso==0.7.1",
"pcp==5.0",
"pep517==0.10.0",
"pexpect==4.8.0",
"pickleshare==0.7.5",
"Pillow==8.3.1",
"pip==21.2.3",
"pluggy==0.13.1",
"ply==3.11",
"progress==1.5",
"prompt-toolkit==3.0.19",
"psutil==5.8.0",
"ptyprocess==0.7.0",
"pwquality==1.4.4",
"py7zr==0.11.3",
"pychm==0.8.6",
"pycodestyle==2.7.0",
"pycparser==2.20",
"pycryptodome==3.10.1",
"pydocstyle==6.1.1",
"pyflakes==2.3.1",
"Pygments==2.9.0",
"PyGObject==3.40.1",
"pylama==7.7.1",
"pylint==2.6.0",
"pyls-isort==0.2.0",
"pyls-mypy==0.1.8",
"pynvim==0.4.3",
"pyOpenSSL==20.0.1",
"pyparsing==2.4.7",
"PyQt5==5.15.4",
"PyQt5-sip==12.9.0",
"PyQtWebEngine==5.15.4",
"pyserial==3.5",
"python-dateutil==2.8.1",
"python-jsonrpc-server==0.4.0",
"python-language-server==0.36.2",
"pytube==10.8.5",
"pytz==2021.1",
"pyusb==1.2.1",
"PyYAML==5.4.1",
"regex==2021.7.6",
"requests==2.24.0",
"requests-cache==0.5.2",
"resolvelib==0.5.5",
"retrying==1.3.3",
"rope==0.18.0",
"s3transfer==0.5.0",
"scipy==1.7.0",
"SecretStorage==3.3.1",
"setuptools==57.1.0",
"Shapely==1.7.1",
"sip==4.19.25",
"six==1.16.0",
"slip==0.6.5",
"slip.dbus==0.6.5",
"snowballstemmer==2.1.0",
"soupsieve==2.2.1",
"Sphinx==4.1.0",
"sphinx-multiversion==0.2.4",
"sphinx-rtd-theme==0.5.2",
"sphinx-tabs==3.0.0",
"sphinxcontrib-applehelp==1.0.2",
"sphinxcontrib-devhelp==1.0.2",
"sphinxcontrib-htmlhelp==2.0.0",
"sphinxcontrib-jsmath==1.0.1",
"sphinxcontrib-qthelp==1.0.3",
"sphinxcontrib-serializinghtml==1.1.5",
"team==1.0",
"texttable==1.6.3",
"toml==0.10.2",
"traitlets==5.0.5",
"trimesh==3.9.20",
"tvdb-api==3.1.0",
"typed-ast==1.4.2",
"typing-extensions==3.7.4.3",
"udiskie==2.3.3",
"ujson==4.0.2",
"unrardll==0.1.4",
"urllib3==1.25.11",
"urwid==2.1.2",
"vcstool==0.2.15",
"wcwidth==0.2.5",
"webencodings==0.5.1",
"wrapt==1.12.1",
"yapf==0.30.0",
"youtube-dl==2021.6.6",
"zeroconf==0.29.0",
"zipp==3.5.0"
],
"usb": [
{
"port": 0,
"vendor_id": "0x1d6b",
"product_id": "0x0003",
"speed": "SuperPlus"
},
{
"port": 2,
"vendor_id": "0x03e7",
"product_id": "0x2485",
"speed": "High"
},
{
"port": 0,
"vendor_id": "0x1d6b",
"product_id": "0x0002",
"speed": "High"
},
{
"port": 0,
"vendor_id": "0x1d6b",
"product_id": "0x0003",
"speed": "Super"
},
{
"port": 9,
"vendor_id": "0x3297",
"product_id": "0x1969",
"speed": "Full"
},
{
"port": 8,
"vendor_id": "0x047d",
"product_id": "0x2041",
"speed": "Low"
},
{
"port": 7,
"vendor_id": "0x0764",
"product_id": "0x0501",
"speed": "Full"
},
{
"port": 4,
"vendor_id": "0x05e3",
"product_id": "0x0715",
"speed": "High"
},
{
"port": 3,
"vendor_id": "0x14cd",
"product_id": "0x1212",
"speed": "High"
},
{
"port": 4,
"vendor_id": "0x0bda",
"product_id": "0x5411",
"speed": "High"
},
{
"port": 10,
"vendor_id": "0x0451",
"product_id": "0x8142",
"speed": "High"
},
{
"port": 0,
"vendor_id": "0x1d6b",
"product_id": "0x0002",
"speed": "High"
}
]
}
About this issue
- Original URL
- State: open
- Created 3 years ago
- Comments: 27 (3 by maintainers)
I edited
rgb_video.cpp
to force USB2 mode and ran it, but it gives the same behaviour, except that the running-mode device shows up on the USB2 bus now instead of the USB3 bus (confirmed indmesg
).I agree, it’s very odd that it consistently misses just that message. I haven’t found any further information for LXD hotplugging other than “it just works”; which it does seem to mostly. It’s just that one event…
Adding a device with a vendor ID only makes the product ID a wildcard match, apparently. Just to be sure, though, I added devices for both product IDs specifically. It made no difference.
@gbiggs One extra thing worth checking out: Use environment variable
LIBUSB_DEBUG=4
inside the container when running a depthai application to get more debug information of libusb. Check if the following message is printed out:If so, there is a file
libusb/os/linux_netlink.c
with the following contents:Remove the if statement check, recompile the libusb and depthai and retest.
If the above is not apparent, feel free to skim through libusb debug logs and try spotting anything unordinary. You may also diff compare it with a disabled udev libusb on host (otherwise messages won’t be the same most likely)
I had same problem.
https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/NCS2-in-docker-container-on-RPI-results-in-RuntimeError-Can-not/m-p/1191905/highlight/true#M19803
this solution solves it. Thanks
@gbiggs I’d suggest you taking a look at this. https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/NCS2-in-docker-container-on-RPI-results-in-RuntimeError-Can-not/m-p/1191905/highlight/true#M19803
It boils down to 2 steps:
And a third one which stems from first point - linking with newly built libusb.
This can be achieved in two ways:
Python wheels: Using LD_PRELOAD or specifying LD_LIBRARY_PATH to the folder where libusb without udev resides. When working with prebuilt Python wheels, care must be taken as it packs the libusb library along side it, but it also mangles the library name. Example,
depthai-2.9.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
->depthai.libs/libusb-1-150b88da.0.so.0.1.0
. This means that freshly build libusb library has to be renamed accordingly as well.Building from source (Python/C++): Other option is building the from source (check depthai-python/depthai-core for instructions) and pointing
PATH
to bothinclude
andlib
directories of libusb (or just install the built library). This will pickup the new libusb library. Checkdepthai-python/ci/Dockerfile
for reference.Hopefully this maps to LXD neatly and helps you resolve the issue. If you’ll have any additional information, feel free to tag and ask me:)