Skip to main content

A Python library for object distance calculations in images using pinhole projection.

Project description

pinhole-distance

A Python library for pinhole distance calculations.

Installation

pip install pinhole-distance

Usage

from pinhole_distance import hello
print(hello())

API Reference

class Lens

Represents a camera lens.

Attributes:

  • focal_length (float): Focal length of the lens in millimeters.
  • pixel_width_um (float): Width of a single pixel in micrometers (μm).
  • distortion_table (Optional[dict[float, float]]): Optional mapping of observed radius (pixels or mm) to distortion correction factor (for fisheye lenses).

Example:

lens = Lens(focal_length=4.0, pixel_width_um=1.4, distortion_table={0.0: 1.0, 100.0: 0.98})

class Sensor

Represents a camera sensor.

Attributes:

  • pixel_height_um (float): Height of a single pixel in micrometers (μm).
  • resolution (tuple[int, int]): Sensor resolution as (width_px, height_px).

Example:

sensor = Sensor(pixel_height_um=1.4, resolution=(1920, 1080))

class Package

Combines a Lens and a Sensor for distance and dimension calculations.

Attributes:

  • lens (Lens): The lens used.
  • sensor (Sensor): The sensor used.

Methods:

  • distance_to_object(actual_dimension: float, observed_dimension_px: float) -> float
    Returns the distance (in meters) to an object given its actual dimension (height or width, in meters) and observed dimension in the image.
  • object_dimension_at_distance(distance: float, observed_dimension_px: float) -> float
    Returns the actual dimension (in meters) of an object at a given distance (in meters), given its observed dimension in the image.

Example:

pkg = Package(lens, sensor)
dist = pkg.distance_to_object(actual_dimension=0.2, observed_dimension_px=150)
dimension = pkg.object_dimension_at_distance(distance=1.0, observed_dimension_px=150)

Example: Using the OV5647 Package

from pinhole_distance import ov5647

distance = ov5647.distance_to_object(
    dimension='y',
    actual_dimension=0.1e-3,  # 0.1 mm in meters
    observed_dimension_px=160
)
print(f"Distance to object: {distance:.4f} meters")

Output: Distance to object: 0.0011 meters, or 1.1mm.

Example: USB Pinhole with manually checked distances

The following example computes the distance to a person with:

  • Known width of 21" (0.5334m)
  • Observed width of 70 pixels, using YOLO bounding box

I know from measuring that the person was 5m away.

from pinhole_distance import usb_pinhole

distance = usb_pinhole.distance_to_object(
    dimension='x',
    actual_dimension=0.5334,
    observed_dimension_px=70
)
print(f"Distance to object: {distance:.4f} meters")

The output is a distance of 4.8986 meters, or roughly a 2% error.

Publishing

  • Build: python -m build
  • Publish: twine upload dist/*

License

MIT

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

pinhole_distance-0.1.0.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

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

pinhole_distance-0.1.0-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file pinhole_distance-0.1.0.tar.gz.

File metadata

  • Download URL: pinhole_distance-0.1.0.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for pinhole_distance-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c59fbf4ec8997173fd4920b5f6f044e7490c6d0cd280a3760f75035fa72213d7
MD5 8266c7b62f50ab95690bedc5d66aef10
BLAKE2b-256 4d557b53c7a3352b575f84980d3775387cbfd1837ac8ebcaa6ff27d386e86bf4

See more details on using hashes here.

File details

Details for the file pinhole_distance-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pinhole_distance-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 86b2da8511e2c7d3213e0f7c8aba1734f633dfc691baade85de016c962e83054
MD5 b968c995b8b07e5b3004a3b61712c58a
BLAKE2b-256 8189b20c254c90f0739f80f47b66a0aba2a7427dd45c26cdb4414309a8aa4912

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