IMX704 Camera Library
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)
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}
|