CSI IMX219 camera to work with BeagleY-AI

Hello,

I am trying to make the Sony IMX219-based camera (RPi Camera Module 2 NoIR) work with BeagleY-AI board.

After adding the overlay reference in the /boot/firmware/extlinux/extlinux.conf file as

label microSD (default)
    kernel /Image
    append console=ttyS2,115200n8 root=/dev/mmcblk1p3 ro rootfstype=ext4 resume=/dev/mmcblk1p2 rootwait net.ifnames=0 quiet
    fdtdir /
    fdt /ti/k3-am67a-beagley-ai.dtb
    fdtoverlays /overlays/k3-am67a-beagley-ai-csi0-imx219.dtbo
    #initrd /initrd.img

rebooting, and running sudo beagle-camera-setup, the camera is detected

$ sudo beagle-camera-setup
IMX219 Camera 0 detected
    device = /dev/video-imx219-cam0
    name = imx219
    format = [fmt:SRGGB8_1X8/1920x1080]
    subdev_id = /dev/v4l-imx219-subdev0
    isp_required = yes

and appears in /dev/

$ ls -l /dev/ | grep video
...
crw-rw---- 1 root video    81,  11 Feb 18 22:43 v4l-subdev2
lrwxrwxrwx 1 root root          11 Feb 18 22:50 video-imx219-cam0 -> /dev/video3
crw-rw---- 1 root video    81,   0 Feb 18 22:43 video0
crw-rw---- 1 root video    81,   1 Feb 18 22:43 video1
crw-rw---- 1 root video    81,   2 Feb 18 22:43 video2
crw-rw---- 1 root video    81,   3 Feb 18 22:43 video3
...

However, when I run a simple test

v4l2-ctl --device /dev/video-imx219-cam0 \
         --set-fmt-video=width=1920,height=1080,pixelformat=YUYV \
         --stream-mmap --stream-count=50 \
         --stream-to=out.yuv

the command hangs indefinitely, and the output file out.yuv is empty.
(The same result is with --device /dev/video3).

Similarly, GStreamer hangs:

gst-launch-1.0 \
  v4l2src device=/dev/video-imx219-cam0 num-buffers=100 ! \
  videoconvert ! \
  x264enc tune=zerolatency bitrate=500 speed-preset=superfast ! \
  mp4mux ! \
  filesink location=output.mp4

…

The dmesg | grep imx219 command produces:

[    6.685482] imx219 5-0010: supply VANA not found, using dummy regulator
[    6.716700] imx219 5-0010: supply VDIG not found, using dummy regulator
[    6.721153] imx219 5-0010: supply VDDL not found, using dummy regulator
[    9.613736] imx219 5-0010: Consider updating driver imx219 to match on endpoints
[   11.768522] Modules linked in: ... imx219 ...
[   11.769904] Modules linked in: ... imx219 ...

I’ve tried editing the k3-am67a-beagley-ai-csi0-imx219-new.dts file (decompiled from and recompiled to the corresponding .dtbo), but no success so far. Any ideas of how to proceed from there?

1 Like

Ok, I have actually managed to make it work with these two commands:

media-ctl -V '"imx219 5-0010":0 [fmt:YU12/1920x1080 field:none]'

gst-launch-1.0 -v v4l2src num-buffers=5 device=/dev/video3 io-mode=dmabuf ! \
video/x-bayer, width=1920, height=1080, framerate=30/1, format=rggb ! \
multifilesink location="imx219-image-%d.raw"

The upper command setups the camera ( "imx219 5-0010":0 probably means IMX219 sensor at I2C address 0x10 on bus 5, its first output pad 0), the lower - produces some .raw images.

The format in media-ctl command should apparently be from the outputs of the v4l2-ctl --list-formats-ext. Solution sources: 1, 2.

Additionally, this command works and produces some .yuv video:

v4l2-ctl --device /dev/video3 \
		--set-fmt-video=width=320,height=240,pixelformat=RGGB \
		--stream-mmap \
		--stream-count=50 \
		--stream-to=out.yuv

@lorforlinux Not sure if I address the right person, but should perhaps the “Configuring CSI camera” tutorial be updated?

2 Likes

I’m going to make an assumption that you might like to capture to a MP4 file. I recently found that the beagley-ai has a H264 hardware encoder that can be connected to by gstream by using the component v4l2h264enc.

v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=digital_gain=2048
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=analogue_gain=230
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=exposure=1750
media-ctl -V '"imx219 5-0010":0[fmt:SRGGB8_1X8/640x480 field:none]'
gst-launch-1.0 v4l2src num-buffers=100 device=/dev/video3 io-mode=dmabuf ! \
video/x-bayer, width=640, height=480, format=rggb,depth=8 ! queue !\
bayer2rgb ! queue ! \
videoconvert ! video/x-raw,format=NV12 ! queue ! \
v4l2h264enc ! queue !\
h264parse ! \
mp4mux ! \
filesink location=imx219.mp4

This manages 30fps but it is low resolution.

Hope that helps

3 Likes

I thought it would be useful to add instructions for creating a virtual camera that outputs to standard formats that may be expected in downstream applications (ex. Chromium, OBS, VLC, etc.).

Full code demos can be found here.

Creating a Virtual Camera

In order to run this command, you must install v4l2loopback which enables a kernel
module that can create virtual cameras. This requires:

  1. Installing the Linux Headers for your current kernel. See this article for more information about modifying the kernel.
sudo apt install linux-headers-`uname -r`
  1. Install v4l2loopback-dkms (Dynamic Kernel Module Support). This allows you to add kernel modules without modifying the entire kernel.
sudo apt-get install v4l2loopback-dkms
  1. You may need to reload kernel module dependencies with
sudo depmod -a
  1. Load the newly installed kernel module
sudo modprobe v4l2loopback
  1. Now you can start the virtual camera! This process must be running for the virtual camera to work. You can move the process to the background with your preferred method (ex. screen, ctrl+z, &).
gst-launch-1.0   v4l2src device=/dev/video3 io-mode=dmabuf ! \
    video/x-bayer, width=640, height=480, framerate=30/1, format=rggb,depth=8 ! \
    bayer2rgb ! videoconvert ! video/x-raw, format=NV12 ! \
    v4l2sink device=/dev/video9

This will create a virtual camera on /dev/video9 or index 9 that can be recognized
by downstream applications.

1 Like

Amm… So does the ISP working with the IMX219 on BeagleY-AI? I mean can you control white balance, exposure, etc.? Or is it still just a raw sensor data?

1 Like

IMO as many people from the community must try these instructions.

Unfortunately, this methods didn’t work for the two IMX219 sensor camera modules I have:

Waveshare IMX219-160 and Arducam IMX219 8MP Fixed-focus (Arducam product number: B0390).

Thank you for your efforts.

1 Like

IMX219 is supported by TI Edge AI SDK for BeagleY-AI here

Connect to CSI0, and update boot partition uEnv.txt to:

name_overlays=ti/k3-am67a-beagley-ai-edgeai-apps.dtbo ti/k3-am67a-beagley-ai-csi0-imx219.dtbo

I tried using my waveshare imx219 cam with the arago image, including the uEnv.txt and am having no success. The Camera is listed on the UI, I can select it but no camera video is shown.

Similar no success with the debian image :confused:. The camera is detected by the system:

IMX219 Camera 0 detected
    device = /dev/video-imx219-cam0
    name = imx219
    format = [fmt:SRGGB8_1X8/1920x1080]
    subdev_id = /dev/v4l-imx219-subdev0
    isp_required = yes

But all of the commands listed above do not result in any successful saved image or video.

I tried on Debian with libcamera. Output of cam -l shows this:

=> no “Available camera” listed.

I conclude there is no low level issue with the camera, just the connection to the app or v4l has a problem :frowning: .

1 Like

I have seen here: 3.7. Multimedia Video Codec — Processor SDK Linux for AM67A Documentation that the official PSDK docu reports:

Compliance test for wave5-dec device /dev/video0:

Driver Info:
   Driver name      : wave5-dec
   Card type        : wave5-dec
   Bus info         : platform:4210000.video-codec
   Driver version   : 6.6.44
   Capabilities     : 0x84204000
...
Total for wave5-dec device /dev/video0: 46, Succeeded: 46, Failed: 0, Warnings: 2

And my debian system reports:

Compliance test for wave5-dec device /dev/video0:

Driver Info: 
        Driver name      : wave5-dec
        Card type        : wave5-dec
        Bus info         : platform:wave5-dec
        Driver version   : 6.1.83
        Capabilities     : 0x84204000
...
Total for wave5-dec device /dev/video0: 45, Succeeded: 40, Failed: 5, Warnings: 0

No idea if this v4l compliance test has influence on the CSI camera, but shall we wait or use a BeagleY-AI debian image using the 6.6.y kernel because there the v4l compliance tests indicate that the kernel drivers are more compliant?

I got one step further: In fact using the latest beagley-ai OS image with kernel 6.6.y BeagleY-AI Debian 12.11 2025-06-30 XFCE (v6.6.x-ti) - BeagleBoard lets at least show up the camera using cam:

 cam -l
[0:41:35.847181688] [3955] ERROR IPAModule ipa_module.cpp:172 Symbol ipaModuleInfo not found
[0:41:35.847344574] [3955] ERROR IPAModule ipa_module.cpp:292 v4l2-compat.so: IPA module has no valid info
[0:41:35.847583550] [3955]  INFO Camera camera_manager.cpp:313 libcamera v0.3.0
[0:41:35.879024180] [3958]  WARN CameraSensor camera_sensor.cpp:259 'imx219 5-0010': Recommended V4L2 control 0x009a0922 not supported
[0:41:35.879165821] [3958]  WARN CameraSensor camera_sensor.cpp:331 'imx219 5-0010': The sensor kernel driver needs to be fixed
[0:41:35.879230186] [3958]  WARN CameraSensor camera_sensor.cpp:333 'imx219 5-0010': See Documentation/sensor_driver_requirements.rst in the libcamera sources for more information
[0:41:35.880862363] [3958]  WARN CameraSensor camera_sensor.cpp:479 'imx219 5-0010': Failed to retrieve the camera location
[0:41:35.880977494] [3958]  WARN CameraSensor camera_sensor.cpp:501 'imx219 5-0010': Rotation control not available, default to 0 degrees
Available cameras:
1: 'imx219' (/base/bus@f0000/i2c@20020000/sensor@10)

Unfortunately, this OS image has no devictree-overlay for the imx219 readily lying around. This is how I generated it:

cd /opt/source/dtb-6.6-Beagle
cp ../dtb-6.1-Beagle/src/arm64/overlays/k3-am67a-beagley-ai-csi0-imx219.dts src/arm64/overlays/
./build_n_install.sh
cp src/arm64/overlays/k3-am67a-beagley-ai-csi0-imx219.dtb /boot/firmware/overlays/k3-am67a-beagley-ai-csi0-imx219.dtbo

and then add it to the /boot/firmware/extlinux/extlinux.conf:

    fdtoverlays  /overlays/k3-am67a-beagley-ai-csi0-imx219.dtbo

But still no success in streaming image files from it!

1 Like

On the Edge AI SDK image you tesed, do the Edge AI demos work? Connect a display and mouse and try the camera tests.

The IMX219 Camera 0 detected message is a good sign. Also look at dmesg | grep imx219 output.

Yes the demos do work with the Edge AI demo image. Images + Video classification is working.

I additionally attached the USB serial adapter and got a serial console. Then I killed the /usr/bin/edgeai-gui-app -platform linuxfb process and restarted it from the console to get some output on stdout/stderr. Then I

  • first started a Video classification from “Custom” menu → Video and face recognition was visible
  • closed it by clicking on “Custom”
  • started a Camera classification with “IMX219 Camera 0” (same model) → nothing showed up, the “Custom” window closed
  • closed it by clicking on “Custom”.

This is what I got on the serial line:

root@j722s-evm:/opt/edgeai-gst-apps# /usr/bin/edgeai-gui-app -platform linuxfb
Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
Qt depends on a UTF-8 locale, and has switched to "C.UTF-8" instead.
If this causes problems, reconfigure your locale. See the locale(1) manual
for more information.
Input Type = Video;
Input File = /opt/edgeai-test-data/videos/oob-gui-video8.h264;
Model = /opt/model_zoo/ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640
[   67.468722] vdec 30210000.video-codec: wave5_vpu_firmware_command_queue_error_check: result not ready: 0x800
[   67.478601] vdec 30210000.video-codec: wave5_vpu_dec_finish_decode: could not get output info.
[   67.478660] vdec 30210000.video-codec: wave5_vpu_firmware_command_queue_error_check: result not ready: 0x800
[   67.497042] vdec 30210000.video-codec: wave5_vpu_firmware_command_queue_error_check: result not ready: 0x800
[   67.506888] vdec 30210000.video-codec: wave5_vpu_dec_finish_decode: could not get output info.
Custom Pipeline: 
 multifilesrc location=/opt/edgeai-test-data/videos/oob-gui-video8.h264 loop=true stop-index=-1 ! h264parse ! v4l2h264dec capture-io-mode=5 ! tiovxmemalloc pool-size=12 ! video/x-raw, format=NV12 ! tiovxmultiscaler name=split_01 src_0::roi-startx=0 src_0::roi-starty=0 src_0::roi-width=1280 src_0::roi-height=768 target=0 split_01. ! queue ! video/x-raw, width=640, height=640 ! tiovxdlpreproc model=/opt/model_zoo/ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640  out-pool-size=4 ! application/x-tensor-tiovx ! tidlinferer target=1  model=/opt/model_zoo/ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640 ! post_0.tensor split_01. ! queue ! video/x-raw, width=1280, height=768 ! post_0.sink tidlpostproc name=post_0 model=/opt/model_zoo/ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640 alpha=0.200000 viz-threshold=0.500000 top-N=5 display-model=true ! queue ! mosaic_0. tiovxmosaic name=mosaic_0 target=1 src::pool-size=4 sink_0::startx="<320>" sink_0::starty="<131>" sink_0::widths="<1280>" sink_0::heights="<768>" ! video/x-raw,format=NV12, width=1920, height=1080 ! queue ! tiperfoverlay main-title=null title="oob-gui-video8.h264->ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640" overlay-type=graph  ! tiovxmultiscaler ! video/x-raw, width=1198,height=668 ! queue max-size-buffers=1 ! kmssink driver-name=tidss name="sink" render-rectangle="<222,133,1198,668>" sync=false
APP: Init ... !!!
  1578.326309 s: MEM: Init ... !!!
  1578.326377 s: MEM: Initialized DMA HEAP (fd=32) !!!
  1578.326542 s: MEM: Init ... Done !!!
  1578.326557 s: IPC: Init ... !!!
  1578.384911 s: IPC: Init ... Done !!!
REMOTE_SERVICE: Init ... !!!
REMOTE_SERVICE: Init ... Done !!!
  1578.397477 s: GTC Frequency = 200 MHz
APP: Init ... Done !!!
  1578.397699 s:  VX_ZONE_INFO: Globally Enabled VX_ZONE_ERROR
  1578.397718 s:  VX_ZONE_INFO: Globally Enabled VX_ZONE_WARNING
  1578.397729 s:  VX_ZONE_INFO: Globally Enabled VX_ZONE_INFO
  1578.398469 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:169] Added target MPU-0 
  1578.398644 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:169] Added target MPU-1 
  1578.398781 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:169] Added target MPU-2 
  1578.398902 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:169] Added target MPU-3 
  1578.398920 s:  VX_ZONE_INFO: [tivxInitLocal:202] Initialization Done !!!
  1578.398933 s:  VX_ZONE_INFO: Globally Disabled VX_ZONE_INFO
libtidl_onnxrt_EP loaded 0x28f3fab0 
Final number of subgraphs created are : 1, - Offloaded Nodes - 257, Total Nodes - 257 

(edgeai-gui-app:1472): GLib-GObject-CRITICAL **: 15:38:34.157: g_object_set_is_valid_property: object class 'GstKMSSink' has no property named 'widget'
Starting video
Stopping video
[   87.990517] vdec 30210000.video-codec: wave5_vpu_firmware_command_queue_error_check: result not ready: 0x800
Removing gst_pipeline
  1598.334411 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87ea20c8 of type 0000080f at external count 1, internal count 0, releasing it
  1598.334512 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=image_122) now as a part of garbage collection
  1598.334539 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87f206b0 of type 00000813 at external count 1, internal count 0, releasing it
  1598.334553 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=object_array_123) now as a part of garbage collection
  1598.334831 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87f20868 of type 00000813 at external count 1, internal count 0, releasing it
  1598.334848 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=object_array_125) now as a part of garbage collection
  1598.335043 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87f20a20 of type 00000813 at external count 1, internal count 0, releasing it
  1598.335057 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=object_array_127) now as a part of garbage collection
  1598.335250 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87f20bd8 of type 00000813 at external count 1, internal count 0, releasing it
  1598.335266 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=object_array_129) now as a part of garbage collection
  1598.335492 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87f20d90 of type 00000813 at external count 1, internal count 0, releasing it
  1598.335507 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=object_array_131) now as a part of garbage collection
  1598.335706 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87f20f48 of type 00000813 at external count 1, internal count 0, releasing it
  1598.335721 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=object_array_133) now as a part of garbage collection
  1598.335906 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87f21100 of type 00000813 at external count 1, internal count 0, releasing it
  1598.335921 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=object_array_135) now as a part of garbage collection
  1598.336108 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87f212b8 of type 00000813 at external count 1, internal count 0, releasing it
  1598.336123 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=object_array_137) now as a part of garbage collection
  1598.336313 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87f21470 of type 00000813 at external count 1, internal count 0, releasing it
  1598.336328 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=object_array_139) now as a part of garbage collection
  1598.336526 s:  VX_ZONE_WARNING: [vxReleaseContext:1439] Found a reference 0xffff87f21628 of type 00000813 at external count 1, internal count 0, releasing it
  1598.336541 s:  VX_ZONE_WARNING: [vxReleaseContext:1441] Releasing reference (name=object_array_141) now as a part of garbage collection
APP: Deinit ... !!!
REMOTE_SERVICE: Deinit ... !!!
REMOTE_SERVICE: Deinit ... Done !!!
  1598.342111 s: IPC: Deinit ... !!!
  1598.342741 s: IPC: DeInit ... Done !!!
  1598.342784 s: MEM: Deinit ... !!!
  1598.342795 s: DDR_SHARED_MEM: Alloc's: 60 alloc's of 73521264 bytes 
  1598.342807 s: DDR_SHARED_MEM: Free's : 60 free's  of 73521264 bytes 
  1598.342817 s: DDR_SHARED_MEM: Open's : 0 allocs  of 0 bytes 
  1598.342833 s: MEM: Deinit ... Done !!!
APP: Deinit ... Done !!!
Input Type = Camera;
Input File = IMX219 Camera 0;
Model = /opt/model_zoo/ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640
Custom Pipeline: 
 v4l2src device=/dev/video-imx219-cam0 io-mode=5 ! queue leaky=2 ! video/x-bayer, width=1920, height=1080, format=rggb ! tiovxisp sensor-name=SENSOR_SONY_IMX219_RPI dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss.bin format-msb=7 sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a.bin sink_0::device=/dev/v4l-imx219-subdev0 ! video/x-raw, format=NV12 ! tiovxmultiscaler name=split_01 src_0::roi-startx=0 src_0::roi-starty=0 src_0::roi-width=1920 src_0::roi-height=1080 target=0 split_01. ! queue ! video/x-raw, width=640, height=640 ! tiovxdlpreproc model=/opt/model_zoo/ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640  out-pool-size=4 ! application/x-tensor-tiovx ! tidlinferer target=1  model=/opt/model_zoo/ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640 ! post_0.tensor split_01. ! queue ! video/x-raw, width=1920, height=1080 ! post_0.sink tidlpostproc name=post_0 model=/opt/model_zoo/ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640 alpha=0.200000 viz-threshold=0.500000 top-N=5 display-model=true ! queue ! mosaic_0. tiovxmosaic name=mosaic_0 target=1 src::pool-size=4 sink_0::startx="<0>" sink_0::starty="<0>" sink_0::widths="<1920>" sink_0::heights="<1080>" ! video/x-raw,format=NV12, width=1920, height=1080 ! queue ! tiperfoverlay main-title=null title="IMX219 Camera 0->ONR-OD-8420-yolox-s-lite-mmdet-widerface-640x640" overlay-type=graph  ! tiovxmultiscaler ! video/x-raw, width=1198,height=668 ! queue max-size-buffers=1 ! kmssink driver-name=tidss name="sink" render-rectangle="<222,133,1198,668>" sync=false
APP: Init ... !!!
  1609.441644 s: MEM: Init ... !!!
  1609.441751 s: MEM: Initialized DMA HEAP (fd=28) !!!
  1609.441920 s: MEM: Init ... Done !!!
  1609.441936 s: IPC: Init ... !!!
  1609.499935 s: IPC: Init ... Done !!!
REMOTE_SERVICE: Init ... !!!
REMOTE_SERVICE: Init ... Done !!!
  1609.505889 s: GTC Frequency = 200 MHz
APP: Init ... Done !!!
  1609.505956 s:  VX_ZONE_INFO: Globally Enabled VX_ZONE_ERROR
  1609.505968 s:  VX_ZONE_INFO: Globally Enabled VX_ZONE_WARNING
  1609.505979 s:  VX_ZONE_INFO: Globally Enabled VX_ZONE_INFO
  1609.506554 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:169] Added target MPU-0 
  1609.506835 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:169] Added target MPU-1 
  1609.507058 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:169] Added target MPU-2 
  1609.507215 s:  VX_ZONE_INFO: [tivxPlatformCreateTargetId:169] Added target MPU-3 
  1609.507237 s:  VX_ZONE_INFO: [tivxInitLocal:202] Initialization Done !!!
  1609.507249 s:  VX_ZONE_INFO: Globally Disabled VX_ZONE_INFO
libtidl_onnxrt_EP loaded 0x28f3fab0 
Final number of subgraphs created are : 1, - Offloaded Nodes - 257, Total Nodes - 257 

(edgeai-gui-app:1472): GLib-GObject-CRITICAL **: 15:39:03.142: g_object_set_is_valid_property: object class 'GstKMSSink' has no property named 'widget'
Starting video
Stopping video
Removing gst_pipeline
APP: Deinit ... !!!
REMOTE_SERVICE: Deinit ... !!!
REMOTE_SERVICE: Deinit ... Done !!!
  1684.978317 s: IPC: Deinit ... !!!
  1684.979027 s: IPC: DeInit ... Done !!!
  1684.979073 s: MEM: Deinit ... !!!
  1684.979084 s: DDR_SHARED_MEM: Alloc's: 14 alloc's of 25407384 bytes 
  1684.979096 s: DDR_SHARED_MEM: Free's : 14 free's  of 25407384 bytes 
  1684.979107 s: DDR_SHARED_MEM: Open's : 0 allocs  of 0 bytes 
  1684.979122 s: MEM: Deinit ... Done !!!
APP: Deinit ... Done !!!

There is no big difference when using the Camera compared to the Video - it even prints out “Starting Video”/“Stopping Video” similar to when displaying the Video - just nothing appears on the screen.

Screenshots: Video classification

“Custom” window with camera selection:

No Camera window :frowning:

That is strange.

I’m using the Arducam module without issue Amazon.com: Arducam for Raspberry Pi Camera Module 8 Megapixel, 1080P IMX219 Camera Module Compatible with Raspberry Pi 5, 4 Model B, Pi 3/3B+, and Pi Zero 2W (RPI-CAM-8MP + 5.9"/150mm Flex Cable + Pi Zero Cable) : Electronics

It might be worth trying another camera module/cable, ensuring your board has sufficient power, etc.

That was a good hint: I tested the camera on a Rpi5 and this board also cannot get an image from it :frowning: :

Screenshot_2025-08-08_15-00-35

So seems like this was a false alarm - sorry for that.

Finally (at least with my BeagleY-AI)! I found another imx219 cam (Arducam!) in my hacking box and with that one it finally works in my setup :grin: - I am using the kernel 6.6.x, have libcamera-tools installed and used these commands:

sudo beagle-camera-setup
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=exposure=1750
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl=analogue_gain=230
qcam -r gles

And then I can see a live view :sunglasses:

Great! If you have a 3D printer I designed a camera mount for BeagleY-AI + IMX219 you can use for your project.

1 Like

@lagarusl @RadarWizard @alexbeattie42 @Illia_Pikin @el4x @babldev @jgrmpf

Thank you very much for this great discussion.

We integrate image sensors for our open source wildlife camera and it’s wonderful to have such a good in-depth discussion of some of the problems that are encountered during image sensor integration and the solutions. Thank you very much to you all for providing such a valuable discussion :heart:

There’s a bit about our conservation work that the camera is being developed for here:

1 Like