Skip to content

About

PS3 Eye (USB 1415:2000) on NVIDIA Jetson: driver, measured specs, and C++/Python capture code

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

jetson-ps3eye

Make a PlayStation 3 Eye (USB 1415:2000) work on an NVIDIA Jetson — driver, measured specs, and tested C++ / Python capture code.

If you plugged one in and got no /dev/video0, this is why: the PS3 Eye is not a UVC camera, and JetPack ships # CONFIG_USB_GSPCA is not set, so gspca_ov534 does not exist on your board. The fix is a two-minute out-of-tree module build — no device tree, no overlay, no reboot.

What you get: 640×480 @ 60 fps, or 320×240 @ 187 fps, for about $10 used. Capture costs under 1% of one CPU core.

What you do not get: it is a 2007 rolling-shutter USB 2.0 VGA camera with no manual white balance and a 50 Hz-only flicker filter. Its one superpower is frame rate. If you need a global shutter or good colour, buy something else.


Does this apply to me?

lsusb | grep 1415:2000                  # camera on the bus?
ls /dev/video*                          # any video node?
zcat /proc/config.gz | grep GSPCA       # expect: # CONFIG_USB_GSPCA is not set

Camera present, no video node, GSPCA unset → yes.

Install

Run it on the Jetson:

git clone https://github.com/tabris2015/jetson-ps3eye
cd jetson-ps3eye
./install-ps3eye.sh

Prerequisites it will check for and name if missing:

sudo apt install -y build-essential bc "linux-headers-$(uname -r)" v4l-utils

The installer downloads four GPL-2.0 gspca sources from kernel.org, verifies their SHA-256 against sources.sha256, builds them against your kernel headers, installs, and loads. Nothing GPL is redistributed here — see NOTICE.md.

Useful flags: --verify (state report, put this in bug reports), --uninstall, --force (rebuild after a kernel upgrade), --udev (stable /dev/ps3eye), --fix-acl, --dry-run.

First frame

v4l2-ctl -d /dev/video0 --list-formats-ext
python3 python/ps3eye.py --mode gray --frames 300

Use it

Python — RawCamera needs only numpy; PS3Eye adds OpenCV + v4l-utils.

from ps3eye import PS3Eye

with PS3Eye(width=640, height=480, fps=60, mode="gray") as cam:
    cam.set_manual(exposure=60, gain=20)     # lock AE/AGC, or your inputs drift
    for frame in cam.frames(300):
        ...                                   # (480, 640) uint8

mode="gray" is nearly free: YUYV luma is byte 0 of each pixel, so grayscale is a stride-2 view. OpenCV's BGR conversion costs about 9× the capture itself.

C++ — header-only, zero-copy, OpenCV optional.

#include "ps3eye.hpp"

ps3eye::Camera cam;                    // finds the node by USB VID:PID
cam.open(320, 240, 187, ps3eye::Format::YUYV);
cam.set_manual(60, 20);

ps3eye::Frame f;
while (cam.read(f)) { cv::Mat gray = cam.gray(f); }   // a view, no conversion
sudo apt install cmake                 # not on a stock JetPack image
cmake -S cpp -B build && cmake --build build -j4
./build/capture_demo --frames 300
./build/capture_demo --width 320 --height 240 --fps 187 --frames 600 --flow

What it can do

Resolution Format Rate Bandwidth Capture CPU
640×480 YUYV 60 fps 36.8 MB/s 0.3%
640×480 raw Bayer GRBG 60 fps 18.4 MB/s 0.3%
320×240 YUYV 187 fps 28.8 MB/s 0.2%
320×240 raw Bayer GRBG 187 fps 14.4 MB/s 0.2%

Frame-interval jitter is 0.009–0.025 ms sd, with byte-exact payloads and no dropped frames on an idle bus. The 4-microphone array works with no driver work at all. Full numbers, controls, and the measurement environment: docs/camera-guide.md.

Reproduce the table yourself:

python3 python/ps3eye.py --bench
./build/capture_demo --bench

Five things that will bite you

  1. Locking exposure takes two controls, not one: auto_exposure=1 (1 means manual) and gain_automatic=0. Otherwise the AE retunes every frame.
  2. V4L2 GRBG is OpenCV COLOR_BayerGB2BGR, not COLOR_BayerGR2BGR. The obvious constant silently swaps red and blue.
  3. OpenCV cannot capture this camera's Bayer format — it returns a flat, all-zero buffer. Use RawCamera or the C++ header.
  4. 187 fps needs bright light. The exposure ceiling is 5.3 ms, so indoors the AE pins the gain and the image looks dark and noisy.
  5. pkg-config --cflags opencv4 is broken on JetPack — it points at /usr/local, which does not exist. Use CMake.

More in docs/troubleshooting.md.

Tested on

Board Jetson Orin Nano 8 GB devkit (p3767-0005 / p3768-0000)
Software JetPack 7.2, L4T R39.2.0, kernel 6.8.12-1021-tegra
Date 2026-08-08

That is the only configuration verified end to end. The approach is not Jetson-specific — it should work on any Linux where CONFIG_USB_GSPCA is unset and kernel headers are available, and the checksum allowlist covers kernels v5.10 through v6.16. Reports from other boards and JetPack versions are welcome.

Docs

docs/driver.md Why it fails, what the installer does, the depmod/ACL trap, durability across kernel upgrades
docs/camera-guide.md Measured specs, Python and C++ usage, GPU integration, and how to get good data out of it
docs/troubleshooting.md Symptom → cause → fix

Licence

MIT for everything in this repository — see LICENSE.

The kernel module you build from it is GPL-2.0-or-later and is not redistributed here. Credit for the driver itself belongs to the gspca authors; see NOTICE.md.

About

PS3 Eye (USB 1415:2000) on NVIDIA Jetson: driver, measured specs, and C++/Python capture code

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages