Skip to main content

A Python package for camera utilities

Project description

omnicam

A small, unified API for reading frames from USB cameras, IP streams, video files, screen capture, and Raspberry Pi cameras.

Features

  • Unified BaseCamera interface across backends
  • OpenCV-based capture for USB webcams, video files, RTSP/HTTP streams, and GStreamer pipelines
  • Optional Raspberry Pi Camera support (Picamera2)
  • Optional screen capture via mss

Installation

pip install omnicam

Optional extras:

pip install omnicam[opencv]
pip install omnicam[screen]
pip install omnicam[pi]

Quickstart

from omnicam import SimpleCamera

with SimpleCamera(index=0) as cam:
    frame = cam.read()
    if frame is not None:
        print(frame.shape)

Camera types

from omnicam import FileCapture, InternetCapture, ScreenCapture

# Video file
cam = FileCapture("/path/to/video.mp4")

# IP camera or MJPEG stream
cam = InternetCapture("http://192.168.1.10:8080/video")

# Screen capture (requires omnicam[screen])
cam = ScreenCapture(index=1)

Raspberry Pi camera

from omnicam import PiCamera

cam = PiCamera(info="IMX219", resolution="720p")

GStreamer and Gazebo

from omnicam import GStreamerCapture, GazeboCamera

pipeline = (
    GStreamerCapture.GstPipeline()
    .add("v4l2src", device="/dev/video0")
    .add("videoconvert")
    .add("appsink")
)
cam = GStreamerCapture(pipeline)

# Gazebo (requires gz tools available on PATH)
cam = GazeboCamera(topic_name="my_camera")

CameraInfo (advanced)

CameraInfo describes physical camera parameters and enables focal-length math and focus validation. It is optional but useful when you need real-world camera intrinsics.

Fields:

  • name: Full model name.
  • short_name: Short identifier (sensor/model code).
  • focal_length_mm: (fx_mm, fy_mm) in millimeters.
  • pixel_size_um: Pixel size in micrometers.
  • max_resolution: (width, height) at sensor maximum.
  • aperture_f: F-number (e.g., 2.0).
  • hfov_deg: Horizontal field of view in degrees.
  • focus_type: "Fixed" | "Autofocus" | "Manual" | "Unknown".
  • has_ir_filter: True if the camera has an IR filter.

Usage example:

from omnicam import SimpleCamera
from omnicam.base_camera import CameraInfo

info = CameraInfo(
    name="My Camera Model",
    short_name="MYCAM",
    focal_length_px=(4.0, 4.0),
    pixel_size_um=1.4,
    max_resolution=(1920, 1080),
    aperture_f=2.0,
    hfov_deg=70.0,
    focus_type="Manual",
    has_ir_filter=True,
)

with SimpleCamera(index=0, info=info) as cam:
    fx, fy = cam.focal_length  # focal length in pixels at current size

If you only know focal length in pixel units, use:

from omnicam.base_camera import CameraInfo

info = CameraInfo(
    name="Synthetic",
    short_name="SYN",
    aperture_f=1.0,
    focal_length_px=(800.0, 800.0),
    max_resolution=(1280, 720),
    update_rate=60.0
)

Default Raspberry Pi cameras (short name → full name):

  • OV5647Camera Module 1
  • OV5647 NoIRCamera Module 1 NoIR
  • IMX219Camera Module 2
  • IMX219 NoIRCamera Module 2 NoIR
  • IMX708 StandardCamera Module 3 - Standard
  • IMX708 NoIRCamera Module 3 - Standard NoIR
  • IMX708 WideCamera Module 3 - Wide
  • IMX708 Wide NoIRCamera Module 3 - Wide NoIR
  • IMX477 6mmHigh Quality Camera w/ 6mm Lens
  • IMX477 16mmHigh Quality Camera w/ 16mm Lens
  • IMX477 35mmHigh Quality Camera w/ 35mm Lens
  • IMX477 M12-8mmHigh Quality Camera w/ 8mm M12 Lens
  • IMX477 M12-25mmHigh Quality Camera w/ 25mm M12 Lens
  • IMX477 M12-FishHigh Quality Camera w/ 2.7mm M12 Fisheye
  • IMX296 6mmGlobal Shutter Camera w/ 6mm Lens
  • IMX296 16mmGlobal Shutter Camera w/ 16mm Lens
  • IMX500Raspberry Pi AI Camera

Notes

  • numpy is required. OpenCV-based backends need omnicam[opencv].
  • GStreamer and Gazebo features rely on system-level tooling.

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

omnicam-0.2.5.tar.gz (13.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

omnicam-0.2.5-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

Details for the file omnicam-0.2.5.tar.gz.

File metadata

  • Download URL: omnicam-0.2.5.tar.gz
  • Upload date:
  • Size: 13.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for omnicam-0.2.5.tar.gz
Algorithm Hash digest
SHA256 5cebad412da1ea6f0aa67d79b8ec2890121279166357293cbce6b08d126ef898
MD5 d925a81a1444d50a44f964b78267c264
BLAKE2b-256 15b698c218ea939d314640c4f74eaaae8314ce39a52145f0a7c1e095a6d9f966

See more details on using hashes here.

File details

Details for the file omnicam-0.2.5-py3-none-any.whl.

File metadata

  • Download URL: omnicam-0.2.5-py3-none-any.whl
  • Upload date:
  • Size: 14.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.20

File hashes

Hashes for omnicam-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 2cea239d2855a8cc079371499cc806ea038ad45f14eb7c20e41433717a528483
MD5 fd18e16119dd9bf4d7b55f57a86c71cf
BLAKE2b-256 1be82746812a7367691c93c84606cd216f0fe8f694fcf36af281f3011d70e5b9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page