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

2 Likes

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

I have the same problem but cant get this to work. i dont know how to change this arguments

What problem have you faced?
Try this command:
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ā€ --clean

adding clean will start a new instance.

I still cant detect camera on edge impulse. I tried your command and i only get 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ā€ --clean
Edge Impulse Linux client v1.18.2
? What is your user name or e-mail address (edgeimpulse.com)? *******@g
mail.com
? What is your password? [hidden]

? To which project do you want to connect this device? (:mag: type to search) 82258
7
[SER] Using microphone hw:0,0
[GST] checking for /etc/os-release
Failed to initialize linux tool Capture process failed with code 1

Hi Matt,

Regarding gst-launch-args and in particular:

This seems like a fairly low resolution and I note that with some platforms a much higher res is configured. E.g. Advantech ICAM-540 configures for width=3840,height=2160. Presumably this is a question of what resolution the camera supports, and is needed for the application or optimal for the model perhaps?

The reason I ask is that I am using UNO Q with an attached camera for visual anomaly/defect detection with circuit boards, which have SMD parts and a lot of detail. Hence I’m wondering if a higher resolution is called for and would appreciate some guidance.

Thanks,

Andrew

@Leszek I didn’t see your post.
To get it working, you need to find your camera path. Please run this command:

gst-device-monitor-1.0

And look for the device similar to:

name  : /base/soc@0/usb@4ef8800/usb@4e00000-1.3:1.0-046d:0825
class : Source/Video
...
gst-launch-1.0 libcamerasrc camera-name="/base/soc\@0/usb\@4ef8800/usb\@4e00000-1.3:1.0-046d:0825" ! ...

Note that the name in your case will be different!

BR,
Mateusz

@9600
You can select any resolution for the camera, as long as:

  1. It is supported by the camera
  2. Is the same or higher than the model input resolution

From our experience, too high camera resolution (eg 3840x2160) when the model is medium resolution (eg 320x320) isn’t optimal as you are wasting a lot of time on transferring a huge image, downscaling it, etc.

BR,
Mateusz

Many thanks for the prompt reply! I’ll now set according to the maximum supported by the model.

@mateusz I now have the camera connecting and I can preview this in the studio, but it seems to periodically crash out and then I have to refresh the UI and select the camera again.

Camera info:


arduino@unoq1:~$ gst-device-monitor-1.0
Probing devices...

[0:21:33.825042864] [2405]  INFO Camera camera_manager.cpp:327 libcamera v0.4.0
[0:21:34.009788136] [2408]  WARN V4L2 v4l2_pixelformat.cpp:346 Unsupported V4L2 pixel format H264
[0:21:34.010752287] [2408] ERROR DmaBufAllocator dma_buf_allocator.cpp:119 Could not open any dma-buf provider

Device found:

	name  : /base/soc@0/usb@4ef8800/usb@4e00000-1.3:1.0-0ac8:3420
	class : Source/Video
	caps  : image/jpeg, width=320, height=240
	        image/jpeg, width=640, height=480
	        image/jpeg, width=1280, height=720
	        image/jpeg, width=1920, height=1080
	gst-launch-1.0 libcamerasrc camera-name="/base/soc\@0/usb\@4ef8800/usb\@4e00000-1.3:1.0-0ac8:3420" ! ...

Executing edge-impulse-linux (extract from this - error repeats):

arduino@unoq1:~$ edge-impulse-linux --gst-launch-args "libcamerasrc camera-name='/base/soc\@0/usb\@4ef8800/usb\@4e00000-1.3:1.0-0ac8:3420' ! image/jpeg,width=640,height=480"
Edge Impulse Linux client v1.18.2

[SER] Using microphone hw:0,0
[GST] checking for /etc/os-release
[SER] Connected to camera custom-gst-launch-command
[WS ] Connecting to wss://remote-mgmt.edgeimpulse.com
[WS ] Connected to wss://remote-mgmt.edgeimpulse.com
[WS ] Device "Camera" is now connected to project "PCB-inspection-1". To connect to another project, run `edge-impulse-linux --clean`.
[WS ] Go to https://studio.edgeimpulse.com/studio/819898/acquisition/training to build your machine learning model!
[WS ] Not received pong from server within six seconds, re-connecting
[WS ] Trying to connect in 1 second...
[WS ] Connecting to wss://remote-mgmt.edgeimpulse.com
Failed to handle snapshot Error: WebSocket is not open: readyState 0 (CONNECTING)
    at WebSocket.send (/usr/lib/node_modules/edge-impulse-linux/node_modules/ws/lib/websocket.js:394:13)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli-common/remote-mgmt-service.js:30:30
    at EventEmitter.emit (/usr/lib/node_modules/edge-impulse-linux/node_modules/tsee/lib/ee.js:26:23)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli/linux/linux-device.js:53:30
Failed to handle snapshot Error: WebSocket is not open: readyState 0 (CONNECTING)
    at WebSocket.send (/usr/lib/node_modules/edge-impulse-linux/node_modules/ws/lib/websocket.js:394:13)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli-common/remote-mgmt-service.js:30:30
    at EventEmitter.emit (/usr/lib/node_modules/edge-impulse-linux/node_modules/tsee/lib/ee.js:26:23)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli/linux/linux-device.js:53:30
Failed to handle snapshot Error: WebSocket is not open: readyState 0 (CONNECTING)
    at WebSocket.send (/usr/lib/node_modules/edge-impulse-linux/node_modules/ws/lib/websocket.js:394:13)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli-common/remote-mgmt-service.js:30:30
    at EventEmitter.emit (/usr/lib/node_modules/edge-impulse-linux/node_modules/tsee/lib/ee.js:26:23)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli/linux/linux-device.js:53:30
Failed to handle snapshot Error: WebSocket is not open: readyState 0 (CONNECTING)
    at WebSocket.send (/usr/lib/node_modules/edge-impulse-linux/node_modules/ws/lib/websocket.js:394:13)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli-common/remote-mgmt-service.js:30:30
    at EventEmitter.emit (/usr/lib/node_modules/edge-impulse-linux/node_modules/tsee/lib/ee.js:26:23)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli/linux/linux-device.js:53:30
[WS ] Connected to wss://remote-mgmt.edgeimpulse.com
[WS ] Device "Camera" is now connected to project "PCB-inspection-1". To connect to another project, run `edge-impulse-linux --clean`.
[WS ] Go to https://studio.edgeimpulse.com/studio/819898/acquisition/training to build your machine learning model!
[WS ] Not received pong from server within six seconds, re-connecting
[WS ] Trying to connect in 1 second...
[WS ] Connecting to wss://remote-mgmt.edgeimpulse.com
Failed to handle snapshot Error: WebSocket is not open: readyState 0 (CONNECTING)
    at WebSocket.send (/usr/lib/node_modules/edge-impulse-linux/node_modules/ws/lib/websocket.js:394:13)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli-common/remote-mgmt-service.js:30:30

I’m guessing maybe the gst pipeline needs tuning?

Hi @9600
As I see, it’s happening with the USB camera. We’ve seen a similar issue, but it’s hard to reproduce and looks strictly HW related (a combination of USB hub, camera, cables).
I know that restarting the pipeline usually helps.
BTW, I also see this error in your log:

[0:21:34.010752287] [2408] ERROR DmaBufAllocator dma_buf_allocator.cpp:119 Could not open any dma-buf provider

Try to add the arduino user to kvm group:

sudo usermod -a -G kvm arduino 

Maybe it will also help with the crashing issue?

BR,
Mateusz

Hi @mateusz, many thanks, adding my user to the kvm group fixed the DmaBufAllocator error, although sadly it’s still crashing out.

Failed to handle snapshot Error: WebSocket is not open: readyState 0 (CONNECTING)
    at WebSocket.send (/usr/lib/node_modules/edge-impulse-linux/node_modules/ws/lib/websocket.js:394:13)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli-common/remote-mgmt-service.js:30:30
    at EventEmitter.emit (/usr/lib/node_modules/edge-impulse-linux/node_modules/tsee/lib/ee.js:26:23)
    at /usr/lib/node_modules/edge-impulse-linux/build/cli/linux/linux-device.js:53:30

Since the error appears to be WebSocket related, is this not to do with sending data up to the platform, rather than getting it from the camera?

I ran a test pipeline just capturing 640x480 jpeg stills and this seemed to run fine, albeit each image was 3MB in size, so I wondering if the problem is bandwidth related? Certainly the ADSL service here wouldn’t sustain uploading a bunch of 3MB images/second.

Hi @9600
The WebSocket error may suggest issues with the network. Our CLI tools are using WebSockets to connect to the remote management service and stream snapshots from the camera to our Studio.
If you really have an issue with connection speed, try to capture the required images manually (using a GStreamer to record a series of images or record video with low FPS/lower resolution). Then upload the video separately using our Ingestion service.
BTW, for the snapshots we are sending the frames as JPEG images, so each frame is rather hundreds of kB. But still, collect data locally and then upload only the necessary data to the Studio.

Best regards,
Mateusz

Hi Mateusz,

Many thanks.

I don’t have this issue with a Logitech C920 camera, but that is providing raw video with jpegenc in the pipeline, whereas because this camera’s caps are image/jpeg, it doesn’t. So perhaps jpegenc defaults to much higher compression than jpeg coming straight off this camera. Not sure what the CLI tool does, though? From what you say it sounds as though it should be further compressing them anyway.

I might try experimenting with decoding and re-encoding at higher compression, and failing which just capture a bunch of stills and upload these manually.

Best,

Andrew

Hi @9600
Our CLI tool is starting the GStreamer process in the background that is collecting jpeg images in temp directory. Then we are consuming those files and run inference over them.
You can run the the edge-impulse-linux with --verbose argument to see the whole pipeline that we are starting.

BR,
Mateusz