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
BaseCamerainterface 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")
BaseCamera geometry helper
All cameras implement project_pixel_to_ground for projecting a pixel to ground coordinates.
Usage example:
from omnicam import SimpleCamera
with SimpleCamera(index=0) as cam:
north_m, east_m = cam.project_pixel_to_ground(
px=640,
py=360,
alt_m=120.0,
roll=0.0,
pitch=0.0,
yaw=0.0,
)
print(north_m, east_m)
Notes:
roll,pitch,yaw, andalt_mare for the body frame the camera is attached to.- The camera's offset and offset rotation are applied when projecting:
offset:[x_right, y_down, z_forward]in meters (optical frame)offset_roll,offset_pitch,offset_yaw: radians
Parameters:
px,py: Pixel coordinates in the image.alt_m: Camera altitude in meters.roll,pitch,yaw: Camera attitude in radians.
Returns:
(north_m, east_m): Ground offset in meters relative to the 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:Trueif 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):
OV5647→Camera Module 1OV5647 NoIR→Camera Module 1 NoIRIMX219→Camera Module 2IMX219 NoIR→Camera Module 2 NoIRIMX708 Standard→Camera Module 3 - StandardIMX708 NoIR→Camera Module 3 - Standard NoIRIMX708 Wide→Camera Module 3 - WideIMX708 Wide NoIR→Camera Module 3 - Wide NoIRIMX477 6mm→High Quality Camera w/ 6mm LensIMX477 16mm→High Quality Camera w/ 16mm LensIMX477 35mm→High Quality Camera w/ 35mm LensIMX477 M12-8mm→High Quality Camera w/ 8mm M12 LensIMX477 M12-25mm→High Quality Camera w/ 25mm M12 LensIMX477 M12-Fish→High Quality Camera w/ 2.7mm M12 FisheyeIMX296 6mm→Global Shutter Camera w/ 6mm LensIMX296 16mm→Global Shutter Camera w/ 16mm LensIMX500→Raspberry Pi AI Camera
Notes
numpyis required. OpenCV-based backends needomnicam[opencv].- GStreamer and Gazebo features rely on system-level tooling.
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file omnicam-0.2.9.tar.gz.
File metadata
- Download URL: omnicam-0.2.9.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22087f947bfd320360d79788fd3ad0d80f1739687becb728827807da1c028f9f
|
|
| MD5 |
1a09e5fecad9f66ad689fdce0adb4810
|
|
| BLAKE2b-256 |
ddb1c03938b8862ab7cc201ea59af94cc9c9e50b9d5bee10887cbfc0ba0bf134
|
File details
Details for the file omnicam-0.2.9-py3-none-any.whl.
File metadata
- Download URL: omnicam-0.2.9-py3-none-any.whl
- Upload date:
- Size: 14.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
942e2d5e89f232f0527f8e7f7633826464a56042ba7c5d805a1c3306e54191f3
|
|
| MD5 |
a80e4f10392dac0562fbd9938be225f7
|
|
| BLAKE2b-256 |
f9fcc8eeb25c4b3d1acc119601bd00bb085853053be8433f914cb83775116190
|