diff --git a/app/calib/__init__.py b/app/calib/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/app/camera/__init__.py b/app/camera/__init__.py new file mode 100644 index 0000000..0f8ac46 --- /dev/null +++ b/app/camera/__init__.py @@ -0,0 +1,54 @@ +from typing import TypedDict, TypeAlias, Any +from typing_extensions import NotRequired + +from jaxtyping import Num, jaxtyped +from beartype import beartype +from jax import numpy as jnp, Array + +CameraID: TypeAlias = str + + +@jaxtyped(typechecker=beartype) +class CameraParams(TypedDict): + """ + Camera parameters: intrinsic matrix, extrinsic matrix, and distortion coefficients + """ + + K: Num[Array, "3 3"] + """ + intrinsic matrix + """ + Rt: Num[Array, "4 4"] + """ + [R|t] extrinsic matrix + + R and t are the rotation and translation that describe the change of + coordinates from world to camera coordinate systems (or camera frame) + """ + dist_coeffs: Num[Array, "N"] + """ + An array of distortion coefficients of the form + [k1, k2, [p1, p2, [k3]]], where ki is the ith + radial distortion coefficient and pi is the ith + tangential distortion coeff. + """ + + +@jaxtyped(typechecker=beartype) +class Camera(TypedDict): + """ + a description of a camera + """ + + id: CameraID + """ + Camera ID + """ + params: CameraParams + """ + Camera parameters + """ + size: tuple[int, int] + """ + Image size + """ diff --git a/app/utils/__init__.py b/app/utils/__init__.py index e016da1..6aeb084 100644 --- a/app/utils/__init__.py +++ b/app/utils/__init__.py @@ -1,23 +1,21 @@ from typing import Any -import numpy as np -from jaxtyping import Float, Num, jaxtyped -from typeguard import typechecked - -from app._typing import NDArray +from jaxtyping import Num, jaxtyped +from beartype import beartype +from jax import numpy as jnp, Array -@jaxtyped(typechecker=typechecked) +@jaxtyped(typechecker=beartype) def calculate_perpendicular_distance( - point: Num[NDArray, "2"], - line: Num[NDArray, "2 2"], -) -> np.floating[Any]: + point: Num[Array, "2"], + line: Num[Array, "2 2"], +) -> jnp.floating[Any]: """ Calculate the perpendicular distance between a point and a line. """ line_start, line_end = line - distance = np.linalg.norm( - np.cross(line_end - line_start, line_start - point) - ) / np.linalg.norm(line_end - line_start) + distance = jnp.linalg.norm( + jnp.cross(line_end - line_start, line_start - point) + ) / jnp.linalg.norm(line_end - line_start) return distance diff --git a/pyproject.toml b/pyproject.toml index 981ad73..f9eaf1f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,7 @@ requires-python = ">=3.10" dependencies = [ "anyio>=4.8.0", "awkward>=2.7.4", + "beartype>=0.20.0", "cvxopt>=1.3.2", "jax[cuda12]>=0.5.1", "jaxtyping>=0.2.38", diff --git a/uv.lock b/uv.lock index 4505bc6..3ca0829 100644 --- a/uv.lock +++ b/uv.lock @@ -1,4 +1,5 @@ version = 1 +revision = 1 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.13' and sys_platform == 'darwin'", @@ -187,6 +188,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537 }, ] +[[package]] +name = "beartype" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/48/fe1177f4272a1bc344f3371414aa5b76e19c30d7280d711ce90c5335a6f5/beartype-0.20.0.tar.gz", hash = "sha256:599ecc86b88549bcb6d1af626f44d85ffbb9151ace5d7f9f3b493dce2ffee529", size = 1390635 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/61/ce/9cf60b72e3fbd36a6dd16e31ecbe9ae137a8ead77cb24a5f75302adfc9a9/beartype-0.20.0-py3-none-any.whl", hash = "sha256:090d10e3540b3fca209a0ab5f1c15f9652a075da0a7249c2e6713011e9e5f6ef", size = 1139097 }, +] + [[package]] name = "beautifulsoup4" version = "4.13.3" @@ -372,6 +382,7 @@ source = { virtual = "." } dependencies = [ { name = "anyio" }, { name = "awkward" }, + { name = "beartype" }, { name = "cvxopt" }, { name = "jax", extra = ["cuda12"] }, { name = "jaxtyping" }, @@ -391,6 +402,7 @@ dev = [ requires-dist = [ { name = "anyio", specifier = ">=4.8.0" }, { name = "awkward", specifier = ">=2.7.4" }, + { name = "beartype", specifier = ">=0.20.0" }, { name = "cvxopt", specifier = ">=1.3.2" }, { name = "jax", extras = ["cuda12"], specifier = ">=0.5.1" }, { name = "jaxtyping", specifier = ">=0.2.38" },