Skip to main content

IMX704 Camera Library

English | 简体中文

This repository provides a C++17 processing and capture library for IMX704 dToF cameras with optional Python bindings.

The public C++ API uses the arducam::depthsense namespace. Live camera discovery and capture use the Linux media-controller and V4L2 interfaces. The current hardware pipeline implementation targets NVIDIA Jetson systems.

Features

  • IMX704 camera discovery and control
  • V4L2 image capture
  • Raw image decoding
  • Point cloud, radial depth, noise, peak-height, histogram, and PDC output
  • Single-depth and dual-depth processing
  • Offline camera and custom-stream support
  • Optional Python bindings built with pybind11

Supported environment

  • Linux
  • CMake 3.18.4 or later
  • A compiler with C++17 support (GCC or Clang)
  • NVIDIA Jetson/aarch64 for live V4L2 camera capture
  • Python 3 and pybind11 when Python bindings are enabled

The core processing sources can be compiled on other Linux architectures, but WITH_V4L2 is enabled automatically only when CMake detects aarch64.

Current limitations

  • Embedded-data capture and processing are not currently supported.

Repository layout

.
├── CMakeLists.txt
├── cmake/                         # Platform and compiler configuration
├── lib/
│   ├── include/imx704_camera/     # Public C++ headers
│   ├── src/
│   │   ├── imx704_camera/         # C++ implementation and private headers
│   │   │   ├── pipeline/          # Generic and Jetson media pipelines
│   │   │   ├── spl/               # Raw decoding and depth processing
│   │   │   └── v4l2/              # V4L2 stream implementation
│   │   └── python/                # Python wrapper and pybind11 module
└── scripts/
    ├── build_lib.sh
    ├── create_imx704_lib_venv_jetson.sh
    └── pip_requirements.txt

Build the C++ library

Install the basic build tools:

sudo apt install build-essential g++ cmake

Run the build helper from the repository root:

./scripts/build_lib.sh

The script uses GCC and a Release build by default. Useful options are:

--build-type=Release|Debug|asan|lsan|tsan|msan|ubsan
--clang
-py, --with-pybind11

For example, to make a Debug build with Clang:

./scripts/build_lib.sh --clang --build-type=Debug

Build files are written below build/. Installed artifacts are written to a platform-specific directory below dist/.

Build the Python bindings on Jetson

Create the Python environment:

./scripts/create_imx704_lib_venv_jetson.sh
source venv/imx704_lib_jetson/bin/activate

Then build with pybind11 enabled:

./scripts/build_lib.sh --with-pybind11

The Python module and imx704_processor.py are installed in the platform-specific dist/<platform>/lib/ directory.

Build release packages

Install the Python packaging dependencies or activate the project virtual environment:

python3 -m pip install -r scripts/pip_requirements.txt

Build both the Debian development package and Python wheel:

./scripts/build_packages.sh

Build only one package type when needed:

./scripts/build_packages.sh --deb-only
./scripts/build_packages.sh --wheel-only

The script builds packages for the current CPU architecture and Python interpreter. Run it on the target Jetson/Python environment to produce Jetson release artifacts.

All packages are written to dist/packages/ inside this repository:

dist/packages/
├── libarducam-imx704-dev_<version>_<architecture>.deb
└── arducam_imx704-<version>-<python>-<abi>-<platform>.whl

The Debian package contains the static C++ library, public headers, and license. The wheel contains imx704_library_bindings and imx704_processor.py. The build script never copies artifacts to the parent directory.

Use ./scripts/build_packages.sh --help for all options. The release version must match in CMakeLists.txt and pyproject.toml; the script validates this before building.

Build Jetson/aarch64 packages with Docker

An x86_64 development host can produce an arm64 Debian package and CPython 3.8 through 3.14 wheels for Jetson systems in arm64 containers. Docker Buildx and linux/arm64 container support are required.

./scripts/build_jetson_aarch64_docker.sh

Use --deb-only or --wheel-only to build one package type. The resulting *_arm64.deb and cp38 through cp314 manylinux aarch64 wheels are written to dist/packages/. The Debian package uses an Ubuntu 22.04 builder, while wheels use a manylinux builder and separate per-Python build directories. The installation environment must provide a Python version matching one of the wheel tags.

Use the C++ API

Include the public headers from lib/include and use the arducam::depthsense namespace:

#include <imx704_camera/camera.h>
#include <imx704_camera/camera_manager.h>

using namespace arducam::depthsense;

camera_manager& manager = camera_manager::getInstance();
manager.init();

const auto cameras = manager.get_camera_list();
if (!cameras.empty()) {
    auto camera = manager.get_camera(cameras.front().id);
    camera->open(0x311C);
    camera->start();

    const frame_buffer& frame = camera->get_frame(100);

    camera->stop();
    camera->close();
}

See lib/include/imx704_camera for the public API.

License

See lib/LICENSE.

Metadata

Release files for arducam-imx704 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for arducam-imx704 1.0.0
File
arducam_imx704-1.0.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
arducam_imx704-1.0.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
arducam_imx704-1.0.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details
arducam_imx704-1.0.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
arducam_imx704-1.0.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 Details
arducam_imx704-1.0.0-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl CPython 3.8 CPython 3.8 Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 Details

Total release size: 1.6 MB

Release files / arducam_imx704-1.0.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL arducam_imx704-1.0.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 277.9 kB
Tags CPython 3.13 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
20e970289a897172454e0f05e874fcd96a293c05b3bb2ea66fe28130a23c22a9
BLAKE2b-256 checksum
How to use checksums
9afc0db04100b8ffd38ea5587cfa12f38a05fef0a4de64b0c48f26606e55978a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / arducam_imx704-1.0.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL arducam_imx704-1.0.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 278.0 kB
Tags CPython 3.12 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
1851dba588f4d9b4a62f91393034c53dc13a64aa0d91d6bcc3d65f4da2891d7d
BLAKE2b-256 checksum
How to use checksums
2add8fccd8f76cc9d6005efe4169d94d8b37fe636a2eb4174914053d2959d43c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / arducam_imx704-1.0.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL arducam_imx704-1.0.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 276.6 kB
Tags CPython 3.11 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
b1a055a1496cec5c1abb96504def34773b569a495a36b917ffebec531e91262d
BLAKE2b-256 checksum
How to use checksums
7cf1f2bccf57efcf617f8df6247a8da30e8cb6687024a5d5d41557a1ce0c218f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / arducam_imx704-1.0.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL arducam_imx704-1.0.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 275.4 kB
Tags CPython 3.10 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
5544d25b9261ff43be4a71489e6e9b9b7d9b0d821e4179ff4b6d8417fa7056d4
BLAKE2b-256 checksum
How to use checksums
3d05e8dfbd2dfa60355e58c0a3c5264d927a1c4f37e8c8eea8bcc1e4a7391ee5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / arducam_imx704-1.0.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL arducam_imx704-1.0.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 275.4 kB
Tags CPython 3.9 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
6efd0be6ce85da7276e016da6acdc5aa1540adfb7f46495e90244bba7eb13abb
BLAKE2b-256 checksum
How to use checksums
1704a7d939a063f184851ec56455aef3b5bb7277e90d48c1f530a71a8df7cd40
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / arducam_imx704-1.0.0-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl

Download URL arducam_imx704-1.0.0-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
Size 265.4 kB
Tags CPython 3.8 Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
30c4102f0d27b79e01f7a45b8b98c8f25bcbf1623f454111874f145ba06d0cf7
BLAKE2b-256 checksum
How to use checksums
0d4a325fa38531c20e80f8ca6653725763b98cb3c2049906b604e900b123a7a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.21 {"installer":{"name":"uv","version":"0.12.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

This release

1.0.0 This release

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page