Arduino UNO Q: Issues with running edge-impulse-linux

I am trying to setup my arduino UNO Q with edge impulse using the documention:

So my UNO Q is up and running connected to wifi and succesfully installed edge impulse too,
but when i run:
edge-impulse-linux, i get:
sudo edge-impulse-linux
[sudo] password for arduino:
Edge Impulse Linux client v1.18.1
? What is your user name or e-mail address (edgeimpulse.com)? myusername
? What is your password? [hidden]

? Select a microphone USB-Audio - USB Device 0x46d:0x825
[SER] Using microphone hw:1,0
[GST] checking for /etc/os-release
Failed to initialize linux tool Error: Cannot find any webcams
at initCamera (/usr/lib/node_modules/edge-impulse-linux/build/library/sensors/sensors-helper.js:73:15)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async /usr/lib/node_modules/edge-impulse-linux/build/cli/linux/linux.js:152:22

The webcam im using: Logitech c270
The camera is detected by cheese and gstreamer too.
ANd finally it doesnt appear in devices section of edge impulse too.

Hi @ventorono
Could you run the following command and send me back the result (I suggest adding it as a file, because it may be wuite long).

gst-device-monitor-1.0

BR,
Matt

2 Likes

Thank you for the response, as suggested , heres the output for the gstreamer command
(wasnt able to attach the file so heres the text copy pasted)

Probing devices…

[0:04:17.701406191] [1908] INFO Camera camera_manager.cpp:327 libcamera v0.4.0

Device found:

name  : /base/soc@0/usb@4ef8800/usb@4e00000-1.3:1.0-046d:0825
class : Source/Video
caps  : image/jpeg, width=160, height=120
        image/jpeg, width=176, height=144
        image/jpeg, width=320, height=176
        image/jpeg, width=320, height=240
        image/jpeg, width=352, height=288
        image/jpeg, width=432, height=240
        image/jpeg, width=544, height=288
        image/jpeg, width=640, height=360
        image/jpeg, width=640, height=480
        image/jpeg, width=752, height=416
        image/jpeg, width=800, height=448
        image/jpeg, width=864, height=480
        image/jpeg, width=800, height=600
        image/jpeg, width=960, height=544
        image/jpeg, width=1024, height=576
        image/jpeg, width=960, height=720
        image/jpeg, width=1184, height=656
        image/jpeg, width=1280, height=720
        image/jpeg, width=1280, height=960
        video/x-raw, format=YUY2, width=160, height=120
        video/x-raw, format=YUY2, width=176, height=144
        video/x-raw, format=YUY2, width=320, height=176
        video/x-raw, format=YUY2, width=320, height=240
        video/x-raw, format=YUY2, width=352, height=288
        video/x-raw, format=YUY2, width=432, height=240
        video/x-raw, format=YUY2, width=544, height=288
        video/x-raw, format=YUY2, width=640, height=360
        video/x-raw, format=YUY2, width=640, height=480
        video/x-raw, format=YUY2, width=752, height=416
        video/x-raw, format=YUY2, width=800, height=448
        video/x-raw, format=YUY2, width=864, height=480
        video/x-raw, format=YUY2, width=800, height=600
        video/x-raw, format=YUY2, width=960, height=544
        video/x-raw, format=YUY2, width=1024, height=576
        video/x-raw, format=YUY2, width=960, height=720
        video/x-raw, format=YUY2, width=1184, height=656
        video/x-raw, format=YUY2, width=1280, height=720
        video/x-raw, format=YUY2, width=1280, height=960
gst-launch-1.0 libcamerasrc camera-name="/base/soc\@0/usb\@4ef8800/usb\@4e00000-1.3:1.0-046d:0825" ! ...

Device found:

name  : Monitor of Dummy Output
class : Audio/Source
caps  : audio/x-raw, format={ (string)S16LE, (string)S16BE, (string)F32LE, (string)F32BE, (string)S32LE, (string)S32BE, (string)S24LE, (string)S24BE, (string)S24_32LE, (string)S24_32BE, (string)U8 }, layout=interleaved, rate=[ 1, 768000 ], channels=[ 1, 32 ]
        audio/x-alaw, rate=[ 1, 768000 ], channels=[ 1, 32 ]
        audio/x-mulaw, rate=[ 1, 768000 ], channels=[ 1, 32 ]
properties:
	node.name = auto_null
	device.description = Dummy Output
	audio.rate = 48000
	audio.channels = 2
	audio.position = FL,FR
	media.class = Audio/Sink
	factory.name = support.null-audio-sink
	node.virtual = true
	monitor.channel-volumes = true
	factory.id = 19
	clock.quantum-limit = 8192
	client.id = 33
	node.driver = true
	port.group = stream.0
	node.loop.name = data-loop.0
	library.name = audioconvert/libspa-audioconvert
	object.id = 35
	object.serial = 35
	device.class = monitor
	is-default = false
gst-launch-1.0 pulsesrc device=auto_null.monitor ! ...

Device found:

name  : Webcam C270 Mono
class : Audio/Source
caps  : audio/x-raw, format={ (string)S16LE, (string)S16BE, (string)F32LE, (string)F32BE, (string)S32LE, (string)S32BE, (string)S24LE, (string)S24BE, (string)S24_32LE, (string)S24_32BE, (string)U8 }, layout=interleaved, rate=[ 1, 768000 ], channels=[ 1, 32 ]
        audio/x-alaw, rate=[ 1, 768000 ], channels=[ 1, 32 ]
        audio/x-mulaw, rate=[ 1, 768000 ], channels=[ 1, 32 ]
properties:
	alsa.card = 0
	alsa.card_name = USB Device 0x46d:0x825
	alsa.class = generic
	alsa.components = USB046d:0825
	alsa.device = 0
	alsa.driver_name = snd_usb_audio
	alsa.id = USB Audio
	alsa.long_card_name = USB Device 0x46d:0x825 at usb-xhci-hcd.2.auto-1.3, high speed
	alsa.mixer_name = USB Mixer
	alsa.name = USB Audio
	alsa.resolution_bits = 16
	alsa.subclass = generic-mix
	alsa.subdevice = 0
	alsa.subdevice_name = subdevice #0
	alsa.sync.id = 00000000:00000000:00000000:00000000
	api.alsa.card.longname = USB Device 0x46d:0x825 at usb-xhci-hcd.2.auto-1.3, high speed
	api.alsa.card.name = USB Device 0x46d:0x825
	api.alsa.path = hw:0
	api.alsa.pcm.card = 0
	api.alsa.pcm.stream = capture
	audio.channels = 1
	audio.position = MONO
	card.profile.device = 1
	device.api = alsa
	device.class = sound
	device.icon_name = audio-card-analog
	device.id = 59
	device.profile.description = Mono
	device.profile.name = mono-fallback
	device.routes = 1
	factory.name = api.alsa.pcm.source
	media.class = Audio/Source
	device.description = Webcam C270
	node.name = alsa_input.usb-046d_0825_404948D0-02.mono-fallback
	node.nick = USB Device 0x46d 0x825
	node.pause-on-idle = false
	object.path = alsa:acp:U0x46d0x825:1:capture
	port.group = capture
	priority.driver = 2000
	priority.session = 2000
	factory.id = 19
	clock.quantum-limit = 8192
	client.id = 47
	node.driver = true
	node.loop.name = data-loop.0
	library.name = audioconvert/libspa-audioconvert
	object.id = 53
	object.serial = 65
	api.acp.auto-port = false
	api.acp.auto-profile = false
	api.alsa.card = 0
	api.alsa.split-enable = true
	api.alsa.use-acp = true
	api.dbus.ReserveDevice1 = Audio0
	api.dbus.ReserveDevice1.Priority = -20
	device.bus = usb
	device.bus-id = usb-046d_0825_404948D0-02
	device.bus_path = platform-xhci-hcd.2.auto-usb-0:1.3:1.2
	device.enum.api = udev
	device.form_factor = webcam
	device.name = alsa_card.usb-046d_0825_404948D0-02
	device.nick = USB Device 0x46d:0x825
	device.plugged.usec = 117075077
	device.product.id = 0x0825
	device.product.name = Webcam C270
	device.serial = 046d_0825_404948D0
	device.subsystem = sound
	sysfs.path = /devices/platform/soc@0/4ef8800.usb/4e00000.usb/xhci-hcd.2.auto/usb1/1-1/1-1.3/1-1.3:1.2/sound/card0
	device.vendor.id = 0x046d
	device.vendor.name = Logitech, Inc.
	spa.object.id = 2
	device.string = 0
	is-default = true
gst-launch-1.0 pulsesrc device=alsa_input.usb-046d_0825_404948D0-02.mono-fallback ! ...

Device found:

name  : Dummy Output
class : Audio/Sink
caps  : audio/x-raw, format={ (string)S16LE, (string)S16BE, (string)F32LE, (string)F32BE, (string)S32LE, (string)S32BE, (string)S24LE, (string)S24BE, (string)S24_32LE, (string)S24_32BE, (string)U8 }, layout=interleaved, rate=[ 1, 768000 ], channels=[ 1, 32 ]
        audio/x-alaw, rate=[ 1, 768000 ], channels=[ 1, 32 ]
        audio/x-mulaw, rate=[ 1, 768000 ], channels=[ 1, 32 ]
properties:
	node.name = auto_null
	device.description = Dummy Output
	audio.rate = 48000
	audio.channels = 2
	audio.position = FL,FR
	media.class = Audio/Sink
	factory.name = support.null-audio-sink
	node.virtual = true
	monitor.channel-volumes = true
	factory.id = 19
	clock.quantum-limit = 8192
	client.id = 33
	node.driver = true
	port.group = stream.0
	node.loop.name = data-loop.0
	library.name = audioconvert/libspa-audioconvert
	object.id = 35
	object.serial = 35
	is-default = true
gst-launch-1.0 ... ! pulsesink device=auto_null

Device found:

name  : llvmpipe (LLVM 19.1.7, 128 bits)
class : Video/Sink
caps  : video/x-raw(memory:VulkanImage)
properties:
	vulkan.name = llvmpipe (LLVM 19.1.7, 128 bits)
	vulkan.type = CPU
	vulkan.api.version = 1.4.318
	vulkan.api.version.major = 1 (0x00000001)
	vulkan.api.version.minor = 4 (0x00000004)
	vulkan.api.version.patch = 318 (0x0000013e)
	vulkan.driver.version = 25.2.3
	vulkan.driver.version.major = 25 (0x00000019)
	vulkan.driver.version.minor = 2 (0x00000002)
	vulkan.driver.version.patch = 3 (0x00000003)
	vulkan.vendor.id = 65541 (0x00010005)
	vulkan.device.id = 0 (0x00000000)
	vulkan.memory.n_heaps = 1 (0x00000001)
	vulkan.memory.heaps.0.size = 1825193984
	vulkan.memory.heaps.0.flags = 1 (0x00000001)
	vulkan.memory.heaps.0.flags.str = device-local
	vulkan.memory.n_types = 1 (0x00000001)
	vulkan.memory.types.0.heap = 0 (0x00000000)
	vulkan.memory.types.0.flags = 15 (0x0000000f)
	vulkan.memory.types.0.flags.str = device-local|host-visible|host-coherent|host-cached
	vulkan.n_queue_families = 1 (0x00000001)
	vulkan.queue_family.0.n_queues = 1 (0x00000001)
	vulkan.queue_family.0.flags = 15 (0x0000000f)
	vulkan.queue_family.0.flags.str = graphics|compute|transfer|sparse-binding
	vulkan.queue_family.0.timestamp_resolution = 64 (0x00000040)
	vulkan.queue_family.0.min_image_transfer_granuality.width = 1 (0x00000001)
	vulkan.queue_family.0.min_image_transfer_granuality.height = 1 (0x00000001)
	vulkan.queue_family.0.min_image_transfer_granuality.depth = 1 (0x00000001)
	is-default = false
gst-launch-1.0 ... ! vulkansink

Device found:

name  : Turnip Adreno (TM) 702
class : Video/Sink
caps  : video/x-raw(memory:VulkanImage)
properties:
	vulkan.name = Turnip Adreno (TM) 702
	vulkan.type = integrated
	vulkan.api.version = 1.0.318
	vulkan.api.version.major = 1 (0x00000001)
	vulkan.api.version.minor = 0 (0x00000000)
	vulkan.api.version.patch = 318 (0x0000013e)
	vulkan.driver.version = 25.2.3
	vulkan.driver.version.major = 25 (0x00000019)
	vulkan.driver.version.minor = 2 (0x00000002)
	vulkan.driver.version.patch = 3 (0x00000003)
	vulkan.vendor.id = 20803 (0x00005143)
	vulkan.device.id = 117441024 (0x07000200)
	vulkan.memory.n_heaps = 1 (0x00000001)
	vulkan.memory.heaps.0.size = 912596992
	vulkan.memory.heaps.0.flags = 1 (0x00000001)
	vulkan.memory.heaps.0.flags.str = device-local
	vulkan.memory.n_types = 2 (0x00000002)
	vulkan.memory.types.0.heap = 0 (0x00000000)
	vulkan.memory.types.0.flags = 7 (0x00000007)
	vulkan.memory.types.0.flags.str = device-local|host-visible|host-coherent
	vulkan.memory.types.1.heap = 0 (0x00000000)
	vulkan.memory.types.1.flags = 11 (0x0000000b)
	vulkan.memory.types.1.flags.str = device-local|host-visible|host-cached
	vulkan.n_queue_families = 1 (0x00000001)
	vulkan.queue_family.0.n_queues = 1 (0x00000001)
	vulkan.queue_family.0.flags = 7 (0x00000007)
	vulkan.queue_family.0.flags.str = graphics|compute|transfer
	vulkan.queue_family.0.timestamp_resolution = 48 (0x00000030)
	vulkan.queue_family.0.min_image_transfer_granuality.width = 1 (0x00000001)
	vulkan.queue_family.0.min_image_transfer_granuality.height = 1 (0x00000001)
	vulkan.queue_family.0.min_image_transfer_granuality.depth = 1 (0x00000001)
	is-default = true
gst-launch-1.0 ... ! vulkansink

Thank you for the input. So yes, I did try with sudo and added to the group too, but I still face the error, nonetheless i will try again.

Hi @ventorono
As I see your camera is being handled by the libcamera plugin. Our CLI will support this option soon, but as a workaround, please specify the gst-launch-1.0 arguments manually like this:

edge-impulse-linux --gst-launch-args "libcamerasrc camera-name='/base/soc\@0/usb\@4ef8800/usb\@4e00000-1.3:1.0-046d:0825' ! video/x-raw,width=640,height=480 ! videoconvert ! jpegenc"

BR,
Matt

1 Like

Thank you for the quick response!
It works now, thank you.
Looking forward for more developments.