machinevision-toolbox-python 2.2.0__tar.gz → 2.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. machinevision_toolbox_python-2.3.0/.githooks/pre-commit +83 -0
  2. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/.gitignore +4 -0
  3. machinevision_toolbox_python-2.3.0/.release-please-manifest.json +3 -0
  4. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/CHANGELOG.md +28 -0
  5. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/PKG-INFO +14 -10
  6. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/README.md +12 -8
  7. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/pyproject.toml +1 -1
  8. machinevision_toolbox_python-2.2.0/.release-please-manifest.json +0 -3
  9. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/LICENSE +0 -0
  10. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/Makefile +0 -0
  11. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/README.md +0 -0
  12. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/blobs1.py +0 -0
  13. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/blobs2.py +0 -0
  14. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/bunny.py +0 -0
  15. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/color.py +0 -0
  16. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/corners.py +0 -0
  17. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/matching.py +0 -0
  18. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/monalisa.py +0 -0
  19. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/morphdemo.py +0 -0
  20. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/randomdots.py +0 -0
  21. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/ransac_line.py +0 -0
  22. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/ros_stream.py +0 -0
  23. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/showzip.py +0 -0
  24. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/torch-yolo.py +0 -0
  25. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/examples/torch_seg.py +0 -0
  26. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/release-please-config.json +0 -0
  27. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/BagOfWords.py +0 -0
  28. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/BundleAdjust.py +0 -0
  29. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/Camera.py +0 -0
  30. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageBlobs.py +0 -0
  31. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageColor.py +0 -0
  32. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageConstants.py +0 -0
  33. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageCore.py +0 -0
  34. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageFiducials.py +0 -0
  35. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageIO.py +0 -0
  36. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageLineFeatures.py +0 -0
  37. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageMorph.py +0 -0
  38. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageMultiview.py +0 -0
  39. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImagePointFeatures.py +0 -0
  40. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageProcessing.py +0 -0
  41. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageRegionFeatures.py +0 -0
  42. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageReshape.py +0 -0
  43. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageSpatial.py +0 -0
  44. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageTensor.py +0 -0
  45. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/ImageWholeFeatures.py +0 -0
  46. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/Kernel.py +0 -0
  47. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/PointCloud.py +0 -0
  48. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/Sources.py +0 -0
  49. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/VisualServo.py +0 -0
  50. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/__init__.py +0 -0
  51. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/_image_typing.py +0 -0
  52. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/base/__init__.py +0 -0
  53. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/base/color.py +0 -0
  54. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/base/data.py +0 -0
  55. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/base/findpeaks.py +0 -0
  56. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/base/graphics.py +0 -0
  57. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/base/imageio.py +0 -0
  58. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/base/meshgrid.py +0 -0
  59. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/base/shapes.py +0 -0
  60. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/base/types.py +0 -0
  61. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/base/version.py +0 -0
  62. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/bin/_bintools.py +0 -0
  63. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/bin/_iminteractive.py +0 -0
  64. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/bin/bagtool.py +0 -0
  65. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/bin/imtool.py +0 -0
  66. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/bin/mvtbtool.py +0 -0
  67. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/bin/ocrtool.py +0 -0
  68. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/bin/tagtool.py +0 -0
  69. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/blocks/Icons/camera.png +0 -0
  70. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/blocks/Icons/estpose_p.png +0 -0
  71. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/blocks/Icons/imageplane.png +0 -0
  72. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/blocks/Icons/visjac_p.png +0 -0
  73. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/blocks/__init__.py +0 -0
  74. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/blocks/camera.py +0 -0
  75. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/blocks/test_blocks.py +0 -0
  76. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/camera_derivatives.py +0 -0
  77. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/decorators.py +0 -0
  78. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/fiducial.py +0 -0
  79. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/src/machinevisiontoolbox/mvtb_types.py +0 -0
  80. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/symbolic/README.md +0 -0
  81. {machinevision_toolbox_python-2.2.0 → machinevision_toolbox_python-2.3.0}/symbolic/bundle-adjust.py +0 -0
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python3
2
+ """Pre-commit hook: keep notebook outputs clear and bootstrap cells in sync.
3
+
4
+ Activated once per machine via `git config core.hooksPath .githooks`
5
+ (see docs/notebooks/README.md for the full explanation). Fixes any affected
6
+ notebook in place and re-stages it, so the commit proceeds with the fix already
7
+ applied -- no interruption, no separate re-commit step.
8
+ """
9
+
10
+ import subprocess
11
+ import sys
12
+ from pathlib import Path
13
+
14
+ REPO_ROOT = Path(__file__).resolve().parent.parent
15
+ NOTEBOOKS_DIR = REPO_ROOT / "docs" / "notebooks"
16
+
17
+
18
+ def staged_files(pattern: str) -> list[str]:
19
+ result = subprocess.run(
20
+ ["git", "diff", "--cached", "--name-only", "--diff-filter=ACMR", "--", pattern],
21
+ cwd=REPO_ROOT,
22
+ capture_output=True,
23
+ text=True,
24
+ check=True,
25
+ )
26
+ return [line for line in result.stdout.splitlines() if line]
27
+
28
+
29
+ def main() -> int:
30
+ if not NOTEBOOKS_DIR.exists():
31
+ return 0
32
+
33
+ staged_notebooks = staged_files("docs/notebooks/*.ipynb")
34
+ template_staged = bool(staged_files("docs/notebooks/_mvtb_nb_bootstrap.py"))
35
+
36
+ # Output-clearing only ever touches notebooks actually staged for this commit.
37
+ output_targets = staged_notebooks
38
+
39
+ # Bootstrap-cell regeneration also has to cover every notebook when the
40
+ # template itself changed -- otherwise the other notebooks go stale and CI
41
+ # fails on files this commit never touched.
42
+ if template_staged:
43
+ bootstrap_targets = sorted(
44
+ str(p.relative_to(REPO_ROOT)) for p in NOTEBOOKS_DIR.glob("*.ipynb")
45
+ )
46
+ else:
47
+ bootstrap_targets = staged_notebooks
48
+
49
+ if not output_targets and not bootstrap_targets:
50
+ return 0
51
+
52
+ changed_paths: set[str] = set()
53
+
54
+ try:
55
+ if output_targets:
56
+ paths = [str(REPO_ROOT / t) for t in output_targets]
57
+ subprocess.run(
58
+ [sys.executable, str(NOTEBOOKS_DIR / "clear_outputs.py"), *paths],
59
+ cwd=REPO_ROOT,
60
+ check=True,
61
+ )
62
+ changed_paths.update(paths)
63
+
64
+ if bootstrap_targets:
65
+ paths = [str(REPO_ROOT / t) for t in bootstrap_targets]
66
+ subprocess.run(
67
+ [sys.executable, str(NOTEBOOKS_DIR / "sync_bootstrap.py"), *paths],
68
+ cwd=REPO_ROOT,
69
+ check=True,
70
+ )
71
+ changed_paths.update(paths)
72
+ except subprocess.CalledProcessError:
73
+ print("pre-commit hook: notebook cleanup failed unexpectedly", file=sys.stderr)
74
+ return 1
75
+
76
+ if changed_paths:
77
+ subprocess.run(["git", "add", "--", *sorted(changed_paths)], cwd=REPO_ROOT, check=True)
78
+
79
+ return 0
80
+
81
+
82
+ if __name__ == "__main__":
83
+ sys.exit(main())
@@ -9,6 +9,7 @@ dependencies*
9
9
  *.bag
10
10
  # but keep test fixtures
11
11
  !mvtb-data/mvtbdata/data/*.bag
12
+ bags
12
13
 
13
14
  # old notebooks
14
15
  notebooks/old/*
@@ -94,3 +95,6 @@ docs/source/stubs/*
94
95
 
95
96
  # LLVM profiling data
96
97
  *.profraw
98
+
99
+ ### Node ###
100
+ node_modules/
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "2.3.0"
3
+ }
@@ -1,5 +1,33 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.3.0](https://github.com/petercorke/machinevision-toolbox-python/compare/v2.2.0...v2.3.0) (2026-08-13)
4
+
5
+ **Highlight: Notebooks working in all environments** Fixed a number of problems with getting notebooks to execute in desktop Jupyter, Colab, and
6
+ JupyterLite in browser. Created nice framework to keep the environment-specific import logic in each notebook consistent at commit time. Added
7
+ CI tests and also CI check that notebooks runs in the pyodide environment. Currently pinning to pyodide 0.6.1 to sidestep the lack of JSPI support
8
+ in Safari and Firefox required by later pyodide kernels.
9
+
10
+
11
+ ### Features
12
+
13
+ * **ci:** add a real-Pyodide dependency-completeness check for JupyterLite ([9072da6](https://github.com/petercorke/machinevision-toolbox-python/commit/9072da6e945b45bf2f04a5994f9dbc9c6d99622d))
14
+ * **notebooks:** add shared environment-bootstrap module and drift-check tooling ([44242e8](https://github.com/petercorke/machinevision-toolbox-python/commit/44242e81420e05d2d5656c81c53a33f1071ddac7))
15
+ * **notebooks:** migrate all notebooks to the generated bootstrap cell ([75f230c](https://github.com/petercorke/machinevision-toolbox-python/commit/75f230ce7d789e25edcd06694e886e0f4db8a83d))
16
+
17
+
18
+ ### Bug Fixes
19
+
20
+ * **ci:** guard release-please's PyPI-publish trigger against the truthy-string bug ([#74](https://github.com/petercorke/machinevision-toolbox-python/issues/74)) ([0d74276](https://github.com/petercorke/machinevision-toolbox-python/commit/0d742769d2553125a5b2a08a4a8a16f1e9b9f69c))
21
+ * **ci:** pass --repo to gh calls in release-please's PyPI-publish trigger ([#73](https://github.com/petercorke/machinevision-toolbox-python/issues/73)) ([6ff01a3](https://github.com/petercorke/machinevision-toolbox-python/commit/6ff01a395402d6363ade8b4f4e07952237089666))
22
+ * **docs:** pin jupyterlite-pyodide-kernel==0.6.1, matching RTB and bdsim ([76bd7e1](https://github.com/petercorke/machinevision-toolbox-python/commit/76bd7e130dab5562bb947be9a6b6c1ef3a5e2140))
23
+ * **notebooks:** fix JupyterLite bugs found via real-browser testing ([3979404](https://github.com/petercorke/machinevision-toolbox-python/commit/3979404b317a79f2769007a02ff7a24091e1e4b7))
24
+ * release-please never triggered the actual PyPI publish ([18cc08b](https://github.com/petercorke/machinevision-toolbox-python/commit/18cc08bc21e38bef2f5ed56e31daee4c9404732a))
25
+
26
+
27
+ ### Documentation
28
+
29
+ * **readme:** move to standard badge layout ([0722f9d](https://github.com/petercorke/machinevision-toolbox-python/commit/0722f9da96c97e2d49e791fd68237063df8d38cf))
30
+
3
31
  ## [2.2.0](https://github.com/petercorke/machinevision-toolbox-python/compare/v2.1.0...v2.2.0) (2026-08-10)
4
32
 
5
33
  **Highlight: OpenCV 5 compatibility.** MVTB now works correctly under both OpenCV 4 and the
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: machinevision-toolbox-python
3
- Version: 2.2.0
3
+ Version: 2.3.0
4
4
  Summary: Object-oriented machine vision for Python.
5
5
  Project-URL: Homepage, https://github.com/petercorke/machinevision-toolbox-python
6
6
  Project-URL: Bug Tracker, https://github.com/pypa/sampleproject/issues
@@ -99,20 +99,24 @@ Description-Content-Type: text/markdown
99
99
 
100
100
  ---
101
101
 
102
- ### Status & Ecosystem
103
- [![A Python Robotics Package](https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/master/.github/svg/py_collection.min.svg)](https://github.com/petercorke/robotics-toolbox-python)
104
- [![QUT Centre for Robotics Open Source](https://github.com/qcr/qcr.github.io/raw/master/misc/badge.svg)](https://qcr.github.io)
102
+ ### Status & Project Health
103
+
105
104
  [![Build Status](https://github.com/petercorke/machinevision-toolbox-python/actions/workflows/ci.yml/badge.svg)](https://github.com/petercorke/machinevision-toolbox-python/actions/workflows/ci.yml)
106
- [![Coverage](https://codecov.io/gh/petercorke/machinevision-toolbox-python/branch/main/graph/badge.svg)](https://codecov.io/gh/petercorke/machinevision-toolbox-python)
105
+ [![Downloads](https://static.pepy.tech/badge/machinevision-toolbox-python/month)](https://pepy.tech/projects/machinevision-toolbox-python)
107
106
  ![Python Version](https://img.shields.io/pypi/pyversions/machinevision-toolbox-python.svg)
107
+ [![Coverage](https://codecov.io/gh/petercorke/machinevision-toolbox-python/branch/main/graph/badge.svg)](https://codecov.io/gh/petercorke/machinevision-toolbox-python)
108
108
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
109
- [![PyPI - Downloads](https://img.shields.io/pypi/dw/machinevision-toolbox-python)](https://pypistats.org/packages/machinevision-toolbox-python)
110
109
 
111
- ### Powered by
112
- [![Powered by Spatial Maths](https://raw.githubusercontent.com/petercorke/spatialmath-python/master/.github/svg/sm_powered.min.svg)](https://github.com/petercorke/spatialmath-python)
113
- [![Powered by NumPy](https://img.shields.io/badge/powered_by-NumPy-013243?logo=numpy&logoColor=white)](https://numpy.org)
110
+ ### Ecosystem & Dependencies
111
+ [![A Python Robotics Package](https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/master/.github/svg/py_collection.min.svg)](https://github.com/petercorke/robotics-toolbox-python)
112
+ [![QUT Centre for Robotics Open Source](https://github.com/qcr/qcr.github.io/raw/master/misc/badge.svg)](https://qcr.github.io)
113
+
114
+ [![powered by NumPy](https://img.shields.io/badge/powered_by-NumPy-013243?logo=numpy&logoColor=white)](https://numpy.org)
115
+ [![powered by SciPy](https://img.shields.io/badge/powered_by-SciPy-0054a6?logo=scipy&logoColor=white)](https://scipy.org)
116
+ [![powered by Matplotlib](https://img.shields.io/badge/powered_by-Matplotlib-11557c?logo=matplotlib&logoColor=white)](https://matplotlib.org)
114
117
  [![Powered by OpenCV](https://raw.githubusercontent.com/petercorke/machinevision-toolbox-python/main/.github/svg/opencv_powered.svg)](https://opencv.org)
115
118
  [![Powered by Open3D](https://raw.githubusercontent.com/petercorke/machinevision-toolbox-python/main/.github/svg/open3d_powered.svg)](https://open3d.org)
119
+ [![Powered by Spatial Maths](https://raw.githubusercontent.com/petercorke/spatialmath-python/master/.github/svg/sm_powered.min.svg)](https://github.com/petercorke/spatialmath-python)
116
120
 
117
121
  ## Synopsis
118
122
 
@@ -21,20 +21,24 @@
21
21
 
22
22
  ---
23
23
 
24
- ### Status & Ecosystem
25
- [![A Python Robotics Package](https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/master/.github/svg/py_collection.min.svg)](https://github.com/petercorke/robotics-toolbox-python)
26
- [![QUT Centre for Robotics Open Source](https://github.com/qcr/qcr.github.io/raw/master/misc/badge.svg)](https://qcr.github.io)
24
+ ### Status & Project Health
25
+
27
26
  [![Build Status](https://github.com/petercorke/machinevision-toolbox-python/actions/workflows/ci.yml/badge.svg)](https://github.com/petercorke/machinevision-toolbox-python/actions/workflows/ci.yml)
28
- [![Coverage](https://codecov.io/gh/petercorke/machinevision-toolbox-python/branch/main/graph/badge.svg)](https://codecov.io/gh/petercorke/machinevision-toolbox-python)
27
+ [![Downloads](https://static.pepy.tech/badge/machinevision-toolbox-python/month)](https://pepy.tech/projects/machinevision-toolbox-python)
29
28
  ![Python Version](https://img.shields.io/pypi/pyversions/machinevision-toolbox-python.svg)
29
+ [![Coverage](https://codecov.io/gh/petercorke/machinevision-toolbox-python/branch/main/graph/badge.svg)](https://codecov.io/gh/petercorke/machinevision-toolbox-python)
30
30
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
31
- [![PyPI - Downloads](https://img.shields.io/pypi/dw/machinevision-toolbox-python)](https://pypistats.org/packages/machinevision-toolbox-python)
32
31
 
33
- ### Powered by
34
- [![Powered by Spatial Maths](https://raw.githubusercontent.com/petercorke/spatialmath-python/master/.github/svg/sm_powered.min.svg)](https://github.com/petercorke/spatialmath-python)
35
- [![Powered by NumPy](https://img.shields.io/badge/powered_by-NumPy-013243?logo=numpy&logoColor=white)](https://numpy.org)
32
+ ### Ecosystem & Dependencies
33
+ [![A Python Robotics Package](https://raw.githubusercontent.com/petercorke/robotics-toolbox-python/master/.github/svg/py_collection.min.svg)](https://github.com/petercorke/robotics-toolbox-python)
34
+ [![QUT Centre for Robotics Open Source](https://github.com/qcr/qcr.github.io/raw/master/misc/badge.svg)](https://qcr.github.io)
35
+
36
+ [![powered by NumPy](https://img.shields.io/badge/powered_by-NumPy-013243?logo=numpy&logoColor=white)](https://numpy.org)
37
+ [![powered by SciPy](https://img.shields.io/badge/powered_by-SciPy-0054a6?logo=scipy&logoColor=white)](https://scipy.org)
38
+ [![powered by Matplotlib](https://img.shields.io/badge/powered_by-Matplotlib-11557c?logo=matplotlib&logoColor=white)](https://matplotlib.org)
36
39
  [![Powered by OpenCV](https://raw.githubusercontent.com/petercorke/machinevision-toolbox-python/main/.github/svg/opencv_powered.svg)](https://opencv.org)
37
40
  [![Powered by Open3D](https://raw.githubusercontent.com/petercorke/machinevision-toolbox-python/main/.github/svg/open3d_powered.svg)](https://open3d.org)
41
+ [![Powered by Spatial Maths](https://raw.githubusercontent.com/petercorke/spatialmath-python/master/.github/svg/sm_powered.min.svg)](https://github.com/petercorke/spatialmath-python)
38
42
 
39
43
  ## Synopsis
40
44
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "machinevision-toolbox-python"
3
- version = "2.2.0"
3
+ version = "2.3.0"
4
4
  authors = [{ name = "Peter Corke", email = "rvc@petercorke.com" }]
5
5
  description = "Object-oriented machine vision for Python."
6
6
  readme = "README.md"
@@ -1,3 +0,0 @@
1
- {
2
- ".": "2.2.0"
3
- }