Need active sensor area dimensions at lower resolutions for Arducam 20MP USB 3.0 camera

Hi everyone, I’ve got an Arducam 20MP USB 3.0 camera module (B0477) with the 16mm C-mount lens, running on Windows. I’m following the ArducamUVCPythonDemo scripts from GitHub. The module is advertised to do 9 fps at 5472x3648, but I can’t get anywhere near that. At full resolution the demo script only shows about 4.5 fps. Has anyone run into this?

Can you share the exact command you’re running and the printed output? Also confirm which demo script you’re using and whether you’re setting the resolution through the -W/-H flags.

Sure, I’m running:

python arducam_demo.py -W 5472 -H 3648 -f 9 -d 1280:720 -i 1 -v 2

The log shows FPS around 4.5 Hz at 5472x3648, which is exactly half of the 9 fps the module is supposed to do.

Interesting. Can you check whether other APIs report the framerate differently? Sometimes the SDK reports the sensor framerate rather than the number of unique frames actually being delivered. If you grab frames in a loop and compare consecutive frames, for example np.array_equal(frame, last_frame), that would tell us whether frames are being duplicated.

Good call. When I query the framerate through the other API, it reports 9 FPS. But np.array_equal(frame, last_frame) shows that only every second read is actually a new frame. The next frame is always identical to the previous one. So the effective rate of unique frames is 4.5 fps even though the API claims 9.

Thanks, that’s very useful. That duplication pattern points away from a simple USB bandwidth limit, but let’s rule out the usual hardware variables first. Have you tried different cables or another machine?

Yeah, I’ve tried 5 different USB-C to USB-A cables, two USB-C to USB-C cables, and two different computers. I’ve also tested both Python and C++. None of it changes the behavior, still getting duplicate frames at full res.

Based on that, this looks like a camera firmware issue rather than your setup. There’s a firmware update that addresses duplicated frames at 5472x3648. I’ve sent you the firmware package and flashing instructions via private message, please check your messages and burn it to the camera.

I got the firmware and flashed the camera. It’s now delivering unique frames at the full 9 fps at 5472x3648, confirmed with the same frame-comparison check. Thanks!

Great to hear. Just to summarize for anyone else hitting this: the API-reported FPS can look correct (9) while actual new-frame delivery is only half that rate due to duplicated frames. If you suspect this, compare consecutive frames with something like np.array_equal(frame, last_frame) instead of trusting the reported value.

One more thing while I’m here. I need the active sensor areas at the different resolutions. When I pick a lower resolution I get a crop and lose FOV, which isn’t mentioned anywhere. The sensor is 1" (13.2mm x 8.8mm), but at lower resolutions not the full sensor seems to be active. Is there a datasheet or active-area dimensions for each resolution? I need it for intrinsic calibration.

That’s a fair question. The crop at lower resolutions is a real effect and it’s easy to miss. Let me check whether we have the active area dimensions per resolution or a sensor datasheet we can share. I’ll follow up here or by PM once I have it. In the meantime, the firmware fix has full-res 9 fps working, and for calibration the full-res active area is 13.2mm x 8.8mm as you noted.