Skip to the content
4 layers47.5 × 67 mmEcp5-fpc adapter, the printed circuit board in 3D

Ecp5-fpc adapter

NUBIVlab/SpiderCam3

[CVPR 2026] SpiderCam: Low-power Snapshot Depth from Differential Defocus

Size
47.5 × 67 mm
Copper layers
4
Thickness
1.6 mm
Parts
54
Nets
73
Pads
256
Tracks, vias
872, 113
Pours
1
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
9 Mar 2026
Updated
7 Aug 2026

Overview

Ecp5-fpc adapter is an open-source printed circuit board by NUBIVlab, from the NUBIVlab/SpiderCam repository on GitHub, published under the MIT licence. It is a 4-layer board of 47.5 × 67 mm with 54 parts on 73 nets, routed with 872 tracks and 113 vias.

It is built around the TPS62841DLCR. Its parts include 14 resistors, 10 capacitors, 7 connectors, 3 ICs and 2 inductors. It belongs with the fPGA and programmable logic and interfaces and adapters boards and the FPGA and CPLD boards of this library.

Main components

1

README

README.md

[CVPR 2026] SpiderCam: Low-Power Snapshot Depth from Differential Defocus

Marcos A. Ferreira*,1, Tianao Li*,1, John Mamish*,2, Josiah Hester2, Yaman Sangar2, Qi Guo3, Emma Alexander1
1Northwestern University, 2Georgia Institute of Technology, 3Purdue University, *Equal contribution.

IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 2026

Project Page  arXiv  Demo Video  LICENSE 

Official code for SpiderCam: Low-Power Snapshot Depth from Differential Defocus.

Pipeline

Repository layout

PathContents
configs/, datasets/, models/, utils/Hydra configs and DfDD training / inference code
serialcam_ft232h/Live FT232H stream viewer and on-device DfDD parameter UI
fpga/FPGA RTL (see fpga/README.md)
pcb/PCB layouts
3d_printed_parts/Printable enclosure parts

Running DfDD

Setup

To install required packages:

bash
pip install -r requirements.txt
Data

Point data_path in a config under configs/data/ to your capture directory. Each group folder should contain paired frames:

  • cam_1_500_480_{idx}.png — near-focus (+) image
  • cam_0_500_480_{idx}.png — far-focus (-) image

Crop, frame range, depth step/offset, and image center are set in the same YAML (see e.g. configs/data/11-06.yaml).

Model parameters

Defaults live in configs/model/focal_split.yaml. Override any of them on the CLI with Hydra (model.<key>=...).

ParameterOptions / typical valuesMeaning
model.n_scales1 or 2Number of Laplacian-pyramid levels. Depth is estimated at each scale and fused; 2 is the paper default and improves robustness across texture frequencies.
model.dxdytrue / falseIf true, append spatial derivatives (∂/∂x, ∂/∂y) of V and W as extra channels before fusion (3 channels per scale). Helps on oriented textures.
model.constrings, universal, radial, polynomial, pixel-gridHow optical constants A and B vary over the field of view (see below).
model.n_ringse.g. 16Used when const=rings: number of concentric annuli with a shared (A, B) per ring.
model.n_orderse.g. 2Used when const=radial or polynomial: polynomial degree of the radial / 2D field.
model.confVW, W2, V, WConfidence map used for sparsity filtering and (in separate mode) scale fusion.
model.modejoint / separateHow multi-channel estimates are fused (see below).

Optical constants (model.const). DfDD recovers depth from a linear combination of the image Laplacian and the differential image, with learnable maps A and B (one pair per scale):

  • universal — single scalar (A, B) per scale (spatially constant; ablation / simplest FPGA mapping).
  • rings — piecewise-constant (A, B) on concentric rings about data.center (paper default; matches on-device zone tables).
  • radial — A(r), B(r) as low-order polynomials in image radius.
  • polynomial — full 2D polynomial in (x, y).
  • pixel-grid — independent (A, B) at every pixel (most flexible, heaviest).

Confidence (model.conf). With numerator/denominator terms built from V and W:

  • VW — confidence ∝ V·W (paper default; aligns with the depth numerator).
  • W2 — confidence ∝ W² (denominator energy).
  • V / W — confidence ∝ |V| or |W|.

Higher confidence pixels are kept when evaluating at a given sparsity (see optim.sparsity).

Fusion (model.mode). Softmax weights ω combine channels across scales (and dx/dy if enabled):

  • joint — fuse numerator and denominator first, then divide (more stable; default).
  • separate — form a depth map per channel, then confidence-weighted average.

Paper setting (recommended start):

text
model.n_scales=2 model.dxdy=true model.mode=joint model.const=rings model.n_rings=16 model.conf=VW
Train

Calibrate / train optical constants with Hydra overrides:

bash
python train_focal_split.py data=11-06 data.group=texture1 \
  model.n_scales=2 model.dxdy=true model.mode=joint model.const=rings model.n_rings=16 \
  model.conf=VW

Checkpoints and logs are written under ./results/. For the full ablation suite used in the paper, see train.sh.

Evaluate

After training, run inference with the same data/model/optim settings (must match the trained checkpoint path):

bash
python run_focal_split.py data=11-06 data.group=texture1 \
  model.n_scales=2 model.dxdy=true model.mode=joint model.const=rings model.n_rings=16 \
  model.conf=VW

This loads checkpoint_{n_epochs}epochs.pth, reports MAE/MSE and working range at several sparsities, and saves heatmaps / depth maps under ./results/.

Live hardware (optional)

With the SpiderCam FPGA connected over FT232H:

bash
python serialcam_ft232h/serialcam_stream_ft232h.py

Requires the serialcam stack (PyQt5, ftd2xx). Use Set DfDD Parameters in the viewer to push A/B/ω and confidence thresholds to the device.

Citation

bibtex
@InProceedings{ferreira2026spidercam,
    author    = {Ferreira, Marcos A. and Li, Tianao and Mamish, John and Hester, Josiah and Sangar, Yaman and Guo, Qi and Alexander, Emma},
    title     = {SpiderCam: Low-Power Snapshot Depth from Differential Defocus},
    booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
    month     = {June},
    year      = {2026},
    pages     = {41699-41709}
}

Acknowledgment

This research was partially supported by the National Science Foundation under award numbers CNS-2430327 and CCF-2431505. Any opinions, findings, conclusions, or recommendations expressed in this material are those of the authors and do not necessarily reflect the views of the National Science Foundation or other supporters. We would also like to thank Junjie Luo and Alan Fu for helpful discussions.

Parts

54
QtyValueFootprintReferences
11Jumper_2_Small_OpenJumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mmJP1, JP4, JP5, JP7, JP8, JP9, JP10, JP11, JP12, JP13, JP15
61uCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC5, C6, C7, C8, C9, C10
4100kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR12, R14, R19, R21
410kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR4, R5, R6, R7
410uCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1, C2, C3, C4
4Jumper_2_Small_BridgedJumper:SolderJumper-2_P1.3mm_Bridged_RoundedPad1.0x1.5mmJP2, JP3, JP6, JP14
30Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR15, R20, R26
3Conn_01x02_PinConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ5, J6, J7
3LOGOLOGOG***, G***, G***
22.2uL_2016:IND_DFE2016_MURL1, L2
25051103091molex_5051:CON_5051103091_MOLJ3, J4
2Conn_02x20_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_VerticalJ1, J2
2TPS62841DLCRtps62840:VSON8_2P1X1P6_TEXU1, U2
112kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR22
128.7kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR13
12kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR23
1AP7331-SNG-7AP7331-SNG-7:DFN200X200X60-8NU3

More from NUBIVlab/SpiderCam

1
  • 4 layers30 × 20 mmHm0360 breakout, the printed circuit board in 3D

    Hm0360 breakout

    NUBIVlab/SpiderCam

    [CVPR 2026] SpiderCam: Low-power Snapshot Depth from Differential Defocus

    28 parts3MIT

Similar boards

  • 4 layers52.7 × 47.9 mmAnalyzerBoxPCB fork, the printed circuit board in 3D

    AnalyzerBoxPCB fork

    gusmanb/logicanalyzer

    24 channel, 100Msps logic analyzer hardware and software

    54 parts5.1kGPL-3.0
  • 4 layers29.2 × 75.2 mmPicoGUS Hand386, the printed circuit board in 3D

    PicoGUS Hand386

    polpo/picogus

    Emulation of ISA sound cards and CD-ROM on Raspberry Pi Pico (GUS, SB/Adlib, MPU-401, Tandy, CMS, Panasonic CD-ROM) with USB mouse/joystick support

    54 parts805
  • 4 layers48 × 80 mmBoard latest, the printed circuit board in 3D

    Board latest

    dennisss/dacha

    Monorepo for awesome tools/projects/libraries

    54 parts397Apache-2.0
  • 4 layers27.3 × 32.3 mmMixer breakout, the printed circuit board in 3D

    Mixer breakout

    loxodes/vna

    Under development open hardware microwave vector network analyzer

    54 parts205
  • 4 layers101 × 97 mmKeybase, the printed circuit board in 3D

    Keybase

    cnlohr/cnhardware

    My dumping grounds for all my kicad projects and random hardware bringup.

    54 parts114
  • 4 layers56.5 × 65 mmTv070hat, the printed circuit board in 3D

    Tv070hat

    ScandentLLC/tv070wxm-hat

    Raspberry Pi 5 HAT for Steam Deck LCD

    54 parts108CC0-1.0
  • 4 layers21.6 × 62.2 mm4layers, the printed circuit board in 3D

    4layers

    jpconstantineau/NRF52-Board

    This Repository is a collection of NRF5x boards.

    54 parts100BSD-3-Clause
  • 4 layers26 × 46.5 mmDay 02 Four Port USB C, the printed circuit board in 3D

    Day 02 Four Port USB C

    i2cjak/Framework_Expansion_Cards

    In which i2cjak creates a new expansion card design every day until he is given a NICE Framework laptop

    54 parts95CERN-OHL-P-2.0

Questions

How big is the Ecp5-fpc adapter PCB?

It measures 47.5 × 67 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Ecp5-fpc adapter use?

54 parts, built around the TPS62841DLCR. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Ecp5-fpc adapter KiCad files?

From the NUBIVlab/SpiderCam repository on GitHub, at the commit this page was made from: the board is pcb/ecp5-fpc-adapter/ecp5-fpc-adapter.kicad_pcb and its schematic pcb/ecp5-fpc-adapter/ecp5-fpc-adapter.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ecp5-fpc adapter design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).