machinevision-toolbox-python 2.3.0__tar.gz → 2.4.1__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.
- machinevision_toolbox_python-2.4.1/.release-please-manifest.json +3 -0
- machinevision_toolbox_python-2.4.1/AGENTS.md +30 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/CHANGELOG.md +62 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/PKG-INFO +8 -6
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/README.md +1 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/pyproject.toml +16 -8
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/BagOfWords.py +13 -1
- machinevision_toolbox_python-2.4.1/src/machinevisiontoolbox/BundleAdjust.py +1067 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/Camera.py +101 -18
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageConstants.py +27 -6
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageCore.py +69 -8
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageFiducials.py +16 -8
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageIO.py +8 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImagePointFeatures.py +13 -2
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageWholeFeatures.py +18 -5
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/Kernel.py +29 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/PointCloud.py +17 -4
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/Sources.py +18 -9
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/base/__init__.py +1 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/base/color.py +42 -16
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/base/imageio.py +541 -443
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/base/types.py +14 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/bin/mvtbtool.py +2 -1
- machinevision_toolbox_python-2.4.1/src/machinevisiontoolbox/blocks/Icons/README.md +28 -0
- machinevision_toolbox_python-2.4.1/src/machinevisiontoolbox/blocks/Icons/make_icons.py +111 -0
- machinevision_toolbox_python-2.3.0/.release-please-manifest.json +0 -3
- machinevision_toolbox_python-2.3.0/src/machinevisiontoolbox/BundleAdjust.py +0 -1064
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/.githooks/pre-commit +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/.gitignore +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/LICENSE +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/Makefile +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/README.md +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/blobs1.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/blobs2.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/bunny.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/color.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/corners.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/matching.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/monalisa.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/morphdemo.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/randomdots.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/ransac_line.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/ros_stream.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/showzip.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/torch-yolo.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/examples/torch_seg.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/release-please-config.json +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageBlobs.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageColor.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageLineFeatures.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageMorph.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageMultiview.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageProcessing.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageRegionFeatures.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageReshape.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageSpatial.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/ImageTensor.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/VisualServo.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/__init__.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/_image_typing.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/base/data.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/base/findpeaks.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/base/graphics.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/base/meshgrid.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/base/shapes.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/base/version.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/bin/_bintools.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/bin/_iminteractive.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/bin/bagtool.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/bin/imtool.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/bin/ocrtool.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/bin/tagtool.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/blocks/Icons/camera.png +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/blocks/Icons/estpose_p.png +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/blocks/Icons/imageplane.png +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/blocks/Icons/visjac_p.png +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/blocks/__init__.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/blocks/camera.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/blocks/test_blocks.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/camera_derivatives.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/decorators.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/fiducial.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/src/machinevisiontoolbox/mvtb_types.py +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/symbolic/README.md +0 -0
- {machinevision_toolbox_python-2.3.0 → machinevision_toolbox_python-2.4.1}/symbolic/bundle-adjust.py +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# machinevision-toolbox-python — Agent Instructions
|
|
2
|
+
|
|
3
|
+
Part of the RVC ecosystem. **Read [rvc-ecosystem/AGENTS.md](https://github.com/petercorke/rvc-ecosystem/blob/main/AGENTS.md) first** — it defines shared conventions: repo ownership, math invariants, dependency boundaries, git/PR workflow, code standards, tech-debt tracking. This file only adds what's specific to this repo.
|
|
4
|
+
|
|
5
|
+
| | |
|
|
6
|
+
|---|---|
|
|
7
|
+
| PyPI package | `machinevision-toolbox-python` |
|
|
8
|
+
| Nickname | MVTB |
|
|
9
|
+
| Owner | Peter Corke (`petercorke`) |
|
|
10
|
+
| Default branch | `main` |
|
|
11
|
+
| Contribution model | Branch → PR; direct push to `main` at Peter's discretion |
|
|
12
|
+
|
|
13
|
+
## Notes specific to this repo
|
|
14
|
+
|
|
15
|
+
- Pure Python — no compiled extensions, builds with Hatch (`hatchling`) directly.
|
|
16
|
+
- Depends on `spatialmath`, `pgraph-python`, `ansitable`, plus the third-party `opencv-python`/
|
|
17
|
+
`opencv-contrib-python` and `open3d`.
|
|
18
|
+
- `open3d` is consistently a Python version or two behind — never assume it supports the
|
|
19
|
+
latest Python release; check compatibility before bumping this repo's Python floor/ceiling.
|
|
20
|
+
- OpenCV 5.x support was just added alongside the existing 4.x support (a major version jump,
|
|
21
|
+
not a minor bump). This is fresh work — aim to keep both working, but treat 4.x/5.x
|
|
22
|
+
compatibility friction as expected teething problems to fix, not a regression.
|
|
23
|
+
- Tech-debt tracked as GitHub Issues labelled `tech-debt` (migrated 2026-08-02) — this repo
|
|
24
|
+
was first to migrate off `tech-debt.md`.
|
|
25
|
+
- This repo's `.github/pull_request_template.md` and `.github/ISSUE_TEMPLATE/*.yml` are the
|
|
26
|
+
canonical source other repos' templates were copied from — check here first if updating
|
|
27
|
+
template content ecosystem-wide.
|
|
28
|
+
- Codacy is wired in (badge + automated PR comments); grade A is the aspiration. Real backlog
|
|
29
|
+
exists, tracked via `tech-debt`-labelled issues (including a "mypy not in CI" entry) — see
|
|
30
|
+
ecosystem `AGENTS.md` §5 for how that target is framed.
|
|
@@ -1,5 +1,67 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.4.1](https://github.com/petercorke/machinevision-toolbox-python/compare/v2.4.0...v2.4.1) (2026-10-13)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* BundleAdjust fixed landmarks and pgraph 1.0 Vertex ([1467091](https://github.com/petercorke/machinevision-toolbox-python/commit/14670915f109ea1b57ea3f3adc2d2f3805e53296))
|
|
9
|
+
* BundleAdjust fixed landmarks and pgraph 1.0 Vertex ([195e895](https://github.com/petercorke/machinevision-toolbox-python/commit/195e895aa8240c722472fbd31a3be4b91ca9524d))
|
|
10
|
+
* **docs:** install spatialmath and pgraph with deps=False in JupyterLite ([201f234](https://github.com/petercorke/machinevision-toolbox-python/commit/201f23487f9f7628d0df2b0cef386175740972a2))
|
|
11
|
+
* **docs:** install spatialmath and pgraph with deps=False in JupyterLite ([5615b3b](https://github.com/petercorke/machinevision-toolbox-python/commit/5615b3b7d147e44ae1f2d032deec13bfc69f548a))
|
|
12
|
+
* don't pass a positional argument to pgraph.UGraph ([f5590e0](https://github.com/petercorke/machinevision-toolbox-python/commit/f5590e03b6d35d2bcbf62519c1de82d231790169))
|
|
13
|
+
* don't pass a positional argument to pgraph.UGraph ([6fb62e5](https://github.com/petercorke/machinevision-toolbox-python/commit/6fb62e50a8d79dd748fab62cbd3054e98af57375))
|
|
14
|
+
* estimatePose misaligned ids and corners when other markers are in view ([43c5980](https://github.com/petercorke/machinevision-toolbox-python/commit/43c5980c94b42c861b1f6b441df3b39733412414))
|
|
15
|
+
* FiducialCollection.estimatePose() misaligned ids and corners ([#52](https://github.com/petercorke/machinevision-toolbox-python/issues/52)) ([c054867](https://github.com/petercorke/machinevision-toolbox-python/commit/c0548678c81b2ba46b279946e00a5276a2f9e2ae))
|
|
16
|
+
* remove labeltool console script that points at a module that was never committed ([#117](https://github.com/petercorke/machinevision-toolbox-python/issues/117)) ([ef39fa9](https://github.com/petercorke/machinevision-toolbox-python/commit/ef39fa96b89ac7f9723442230baf27e1a5b6140e))
|
|
17
|
+
* remove labeltool console script whose module was never committed ([30b5c6a](https://github.com/petercorke/machinevision-toolbox-python/commit/30b5c6a9ad19b1b73ad969897abee61c0ad556a5))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Documentation
|
|
21
|
+
|
|
22
|
+
* add a script and README for the block icons ([1185da9](https://github.com/petercorke/machinevision-toolbox-python/commit/1185da946260c675561405c4c6059eeace2d1d6d))
|
|
23
|
+
* add a script and README for the block icons ([2206b53](https://github.com/petercorke/machinevision-toolbox-python/commit/2206b532e03af6ea8a6cf85c0a0855fcb95b2a52))
|
|
24
|
+
* add Codacy grade badge to README ([f91ed2c](https://github.com/petercorke/machinevision-toolbox-python/commit/f91ed2c8a74daf8baf01632548d3d3c23fc06293))
|
|
25
|
+
* add CONTRIBUTING.md ([1885fc1](https://github.com/petercorke/machinevision-toolbox-python/commit/1885fc153bf885fa317473cb5b1f7d887cbe0f97))
|
|
26
|
+
* note how to use a phone as a camera in WebCam and VideoCamera ([76cea5e](https://github.com/petercorke/machinevision-toolbox-python/commit/76cea5e6f035b558330c0aab1bf7a036100dbf92))
|
|
27
|
+
* note how to use a phone as a camera in WebCam and VideoCamera ([72ca04b](https://github.com/petercorke/machinevision-toolbox-python/commit/72ca04b30f0f87af1118659d74e59b32978902d0))
|
|
28
|
+
|
|
29
|
+
## [2.4.0](https://github.com/petercorke/machinevision-toolbox-python/compare/v2.3.0...v2.4.0) (2026-08-25)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
* add __array__ protocol to Image and Kernel, ndim to Kernel ([e762f57](https://github.com/petercorke/machinevision-toolbox-python/commit/e762f578faa269655cbd06b02d48c4c30d48c516))
|
|
35
|
+
* relax opencv pin to support both 4.x and 5.x, add CI matrix axis ([2ec69fe](https://github.com/petercorke/machinevision-toolbox-python/commit/2ec69fe4d116bb51f717e0a4a3c8baed95a7101f)), closes [#44](https://github.com/petercorke/machinevision-toolbox-python/issues/44)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
### Bug Fixes
|
|
39
|
+
|
|
40
|
+
* assert hygiene -- unreachable assert, two caller-facing checks ([7afe33e](https://github.com/petercorke/machinevision-toolbox-python/commit/7afe33eb02af65d4e64d52481f668a610f63b807))
|
|
41
|
+
* CameraBase.plot() unbound call (self=None) crashed instead of working ([e2d4600](https://github.com/petercorke/machinevision-toolbox-python/commit/e2d460029d6ef1d5bb807168f37b37b3eb10ff1c))
|
|
42
|
+
* catch cv2.error in points2F(), not just F/mask=None ([c4197cb](https://github.com/petercorke/machinevision-toolbox-python/commit/c4197cbd22784b8c002df8a02bb95764dc589b50))
|
|
43
|
+
* correct stale open3d-python PyPI name, add py3.13 exclusion marker ([87c1e8f](https://github.com/petercorke/machinevision-toolbox-python/commit/87c1e8f5a2eb3a2b17f2a1f1c182b22fbb025483))
|
|
44
|
+
* esttheta() -- broken pickregion() helper and missing theta-sweep body ([50b00cc](https://github.com/petercorke/machinevision-toolbox-python/commit/50b00cc95c15b56b3598505f4cd532a0612f6ff9))
|
|
45
|
+
* exclude tests/ from Bandit's assert_used (B101) check ([e62b116](https://github.com/petercorke/machinevision-toolbox-python/commit/e62b116e0b57aef73882ee4689153eda326c399f))
|
|
46
|
+
* Histogram.plot(type='ncdf') never actually worked, docstring lied ([6d4152d](https://github.com/petercorke/machinevision-toolbox-python/commit/6d4152d58bb63970863ff0ca49593c21ec815b5b))
|
|
47
|
+
* idisp() crashes when reuse=True with no title given ([a05b13b](https://github.com/petercorke/machinevision-toolbox-python/commit/a05b13b93ab4ed03397548348e8de48230b284f3))
|
|
48
|
+
* Image.metadata() missing camera-specific Exif sub-IFD tags ([d554ef2](https://github.com/petercorke/machinevision-toolbox-python/commit/d554ef257d2d494c66daaf928114c8097fb8fb91))
|
|
49
|
+
* Image() drops maxintval when dtype= is also given, silently truncating ([15f1d32](https://github.com/petercorke/machinevision-toolbox-python/commit/15f1d32576183c862592dca009828ea7e2765d79))
|
|
50
|
+
* Image(dtype='float') resolved to float64, not float32 ([18c5d85](https://github.com/petercorke/machinevision-toolbox-python/commit/18c5d85d82ebd2c09a43adb278e4435658f0c2b7))
|
|
51
|
+
* ImageConstantsMixin factories silently downcast explicit dtype requests ([977dbf6](https://github.com/petercorke/machinevision-toolbox-python/commit/977dbf6402307f38f695c697d68009ddd914d237))
|
|
52
|
+
* mvtbtool's %precision line spuriously echoes with --showassign ([ed43ca6](https://github.com/petercorke/machinevision-toolbox-python/commit/ed43ca64652a7d64a4536ae5665e672ffcc7db4a))
|
|
53
|
+
* name2color() colororder reordering returns list, not ndarray ([c90e6fb](https://github.com/petercorke/machinevision-toolbox-python/commit/c90e6fb4db7814707fd1548a7d87b1057b665499))
|
|
54
|
+
* PointCloud.Read() double-joins a caller-supplied "data/" prefix ([fff671c](https://github.com/petercorke/machinevision-toolbox-python/commit/fff671cdd28c85a555ee9fc0b7dd6f4bad4eccc9))
|
|
55
|
+
* printstats() crashes if .stats hasn't been accessed yet ([3484224](https://github.com/petercorke/machinevision-toolbox-python/commit/34842247c529159364591528ec109deac182899f))
|
|
56
|
+
* suppress divide-by-zero RuntimeWarning in BagOfWords idf computation ([05c85e0](https://github.com/petercorke/machinevision-toolbox-python/commit/05c85e0189061019dc55888b33ddb30cc3e9d9ae))
|
|
57
|
+
* visual-odometry robustness -- match() metric, points2F(), BundleAdjust ([8691847](https://github.com/petercorke/machinevision-toolbox-python/commit/8691847df58cc3cf003838436f7d94c59d5ae609))
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### Documentation
|
|
61
|
+
|
|
62
|
+
* add AGENTS.md stub linking to rvc-ecosystem conventions ([0827291](https://github.com/petercorke/machinevision-toolbox-python/commit/082729184414b821a9e610f8a409f5cbeabc308c))
|
|
63
|
+
* points2F() kwargs -- correct which params apply to which method ([6b10d64](https://github.com/petercorke/machinevision-toolbox-python/commit/6b10d6401925564163568a09e1e504c99eec99fa))
|
|
64
|
+
|
|
3
65
|
## [2.3.0](https://github.com/petercorke/machinevision-toolbox-python/compare/v2.2.0...v2.3.0) (2026-08-13)
|
|
4
66
|
|
|
5
67
|
**Highlight: Notebooks working in all environments** Fixed a number of problems with getting notebooks to execute in desktop Jupyter, Colab, and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: machinevision-toolbox-python
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.1
|
|
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
|
|
@@ -18,14 +18,15 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
21
22
|
Requires-Python: >=3.10
|
|
22
23
|
Requires-Dist: ansitable
|
|
23
24
|
Requires-Dist: matplotlib
|
|
24
25
|
Requires-Dist: mvtb-data
|
|
25
26
|
Requires-Dist: numpy
|
|
26
|
-
Requires-Dist: opencv-contrib-python<
|
|
27
|
-
Requires-Dist: opencv-python<
|
|
28
|
-
Requires-Dist: pgraph-python
|
|
27
|
+
Requires-Dist: opencv-contrib-python<6.0.0,>=4.5
|
|
28
|
+
Requires-Dist: opencv-python<6.0.0,>=4.5
|
|
29
|
+
Requires-Dist: pgraph-python>=0.6.4
|
|
29
30
|
Requires-Dist: pillow
|
|
30
31
|
Requires-Dist: requests
|
|
31
32
|
Requires-Dist: scipy
|
|
@@ -35,7 +36,7 @@ Provides-Extra: all
|
|
|
35
36
|
Requires-Dist: ipympl; extra == 'all'
|
|
36
37
|
Requires-Dist: ipython; extra == 'all'
|
|
37
38
|
Requires-Dist: ipywidgets; extra == 'all'
|
|
38
|
-
Requires-Dist: open3d
|
|
39
|
+
Requires-Dist: open3d; extra == 'all'
|
|
39
40
|
Requires-Dist: pygments; extra == 'all'
|
|
40
41
|
Requires-Dist: pytesseract; extra == 'all'
|
|
41
42
|
Requires-Dist: rosbags; extra == 'all'
|
|
@@ -64,7 +65,7 @@ Requires-Dist: ipywidgets; extra == 'jupyter'
|
|
|
64
65
|
Provides-Extra: ocr
|
|
65
66
|
Requires-Dist: pytesseract; extra == 'ocr'
|
|
66
67
|
Provides-Extra: open3d
|
|
67
|
-
Requires-Dist: open3d
|
|
68
|
+
Requires-Dist: open3d; extra == 'open3d'
|
|
68
69
|
Provides-Extra: ros
|
|
69
70
|
Requires-Dist: rosbags; extra == 'ros'
|
|
70
71
|
Requires-Dist: roslibpy; extra == 'ros'
|
|
@@ -105,6 +106,7 @@ Description-Content-Type: text/markdown
|
|
|
105
106
|
[](https://pepy.tech/projects/machinevision-toolbox-python)
|
|
106
107
|

|
|
107
108
|
[](https://codecov.io/gh/petercorke/machinevision-toolbox-python)
|
|
109
|
+
[](https://app.codacy.com/gh/petercorke/machinevision-toolbox-python/dashboard)
|
|
108
110
|
[](https://opensource.org/licenses/MIT)
|
|
109
111
|
|
|
110
112
|
### Ecosystem & Dependencies
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
[](https://pepy.tech/projects/machinevision-toolbox-python)
|
|
28
28
|

|
|
29
29
|
[](https://codecov.io/gh/petercorke/machinevision-toolbox-python)
|
|
30
|
+
[](https://app.codacy.com/gh/petercorke/machinevision-toolbox-python/dashboard)
|
|
30
31
|
[](https://opensource.org/licenses/MIT)
|
|
31
32
|
|
|
32
33
|
### Ecosystem & Dependencies
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "machinevision-toolbox-python"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.4.1"
|
|
4
4
|
authors = [{ name = "Peter Corke", email = "rvc@petercorke.com" }]
|
|
5
5
|
description = "Object-oriented machine vision for Python."
|
|
6
6
|
readme = "README.md"
|
|
@@ -14,6 +14,7 @@ classifiers = [
|
|
|
14
14
|
"Programming Language :: Python :: 3.11",
|
|
15
15
|
"Programming Language :: Python :: 3.12",
|
|
16
16
|
"Programming Language :: Python :: 3.13",
|
|
17
|
+
"Programming Language :: Python :: 3.14",
|
|
17
18
|
|
|
18
19
|
"License :: OSI Approved :: MIT License",
|
|
19
20
|
"Operating System :: OS Independent",
|
|
@@ -39,10 +40,10 @@ dependencies = [
|
|
|
39
40
|
"scipy",
|
|
40
41
|
"matplotlib",
|
|
41
42
|
"pillow",
|
|
42
|
-
"opencv-python
|
|
43
|
-
"opencv-contrib-python
|
|
43
|
+
"opencv-python>=4.5,<6.0.0",
|
|
44
|
+
"opencv-contrib-python>=4.5,<6.0.0",
|
|
44
45
|
"spatialmath-python",
|
|
45
|
-
"pgraph-python",
|
|
46
|
+
"pgraph-python>=0.6.4",
|
|
46
47
|
"ansitable",
|
|
47
48
|
"mvtb-data",
|
|
48
49
|
"requests",
|
|
@@ -62,7 +63,7 @@ dependencies = [
|
|
|
62
63
|
# dev - development tools
|
|
63
64
|
# docs - documentation building tools
|
|
64
65
|
# jupyter - jupyter notebook support
|
|
65
|
-
# open3d - open3d support
|
|
66
|
+
# open3d - open3d support
|
|
66
67
|
# all - all runtime optional features below
|
|
67
68
|
# ocr - OCR support via pytesseract
|
|
68
69
|
# tool - dependencies for the mvtbtool interactive shell
|
|
@@ -86,7 +87,7 @@ docs = [
|
|
|
86
87
|
|
|
87
88
|
jupyter = ["ipywidgets", "ipympl"]
|
|
88
89
|
|
|
89
|
-
open3d = ["open3d
|
|
90
|
+
open3d = ["open3d"]
|
|
90
91
|
|
|
91
92
|
torch = ["torch"]
|
|
92
93
|
|
|
@@ -95,7 +96,7 @@ ocr = ["pytesseract"]
|
|
|
95
96
|
all = [
|
|
96
97
|
"ipywidgets",
|
|
97
98
|
"ipympl",
|
|
98
|
-
"open3d
|
|
99
|
+
"open3d",
|
|
99
100
|
"torch",
|
|
100
101
|
"pytesseract",
|
|
101
102
|
"rosbags",
|
|
@@ -119,6 +120,14 @@ select = ["E", "F", "I"]
|
|
|
119
120
|
[tool.ruff.lint.isort]
|
|
120
121
|
known-first-party = ["machinevisiontoolbox"]
|
|
121
122
|
|
|
123
|
+
[tool.bandit]
|
|
124
|
+
# bare `assert` is idiomatic pytest style, not a security concern -- Bandit's
|
|
125
|
+
# B101 ("assert used") is meant for src/, where assert can silently vanish
|
|
126
|
+
# under `python -O`. Excluding tests/ keeps that check meaningful without
|
|
127
|
+
# flagging every test assertion (Codacy runs Bandit via Prospector and
|
|
128
|
+
# honours this file).
|
|
129
|
+
exclude_dirs = ["tests"]
|
|
130
|
+
|
|
122
131
|
[tool.pyright]
|
|
123
132
|
include = ["src"]
|
|
124
133
|
ignore = ["docs", "tests", "examples"]
|
|
@@ -129,7 +138,6 @@ imtool = "machinevisiontoolbox.bin.imtool:main"
|
|
|
129
138
|
tagtool = "machinevisiontoolbox.bin.tagtool:main"
|
|
130
139
|
ocrtool = "machinevisiontoolbox.bin.ocrtool:main"
|
|
131
140
|
bagtool = "machinevisiontoolbox.bin.bagtool:main"
|
|
132
|
-
labeltool = "machinevisiontoolbox.bin.labeltool:main"
|
|
133
141
|
|
|
134
142
|
[build-system]
|
|
135
143
|
requires = ["hatchling"]
|
|
@@ -58,6 +58,13 @@ class BagOfWords:
|
|
|
58
58
|
of image features is assigned labels from the ``.centroids`` any with a
|
|
59
59
|
label greater that ``.nstopwords`` is a stop word and can be discarded.
|
|
60
60
|
|
|
61
|
+
.. note:: Removing stop words can leave a remaining word that never
|
|
62
|
+
occurs in any image, giving it an inverse document frequency (idf)
|
|
63
|
+
of ``inf`` (``log(N / 0)``). This is harmless -- every place idf is
|
|
64
|
+
used to compute a word-frequency vector, the corresponding word
|
|
65
|
+
count is also always zero there, so the ``0 * inf`` result is
|
|
66
|
+
``nan`` and gets replaced with 0 before the vector is returned.
|
|
67
|
+
|
|
61
68
|
:reference:
|
|
62
69
|
- Video Google: a text retrieval approach to object matching in videos
|
|
63
70
|
J.Sivic and A.Zisserman,
|
|
@@ -139,7 +146,12 @@ class BagOfWords:
|
|
|
139
146
|
# total number of occurrences of word i
|
|
140
147
|
# multiple occurrences in the one image count only as one
|
|
141
148
|
ni = (W > 0).sum(axis=1)
|
|
142
|
-
|
|
149
|
+
# a word that never occurs in any image (ni=0, possible after
|
|
150
|
+
# stopword removal) gives idf=inf here; harmless since nid is
|
|
151
|
+
# always 0 at that same position below, so 0*inf->nan, already
|
|
152
|
+
# suppressed by the invalid="ignore" there.
|
|
153
|
+
with np.errstate(divide="ignore"):
|
|
154
|
+
idf = np.log(N / ni)
|
|
143
155
|
|
|
144
156
|
M = []
|
|
145
157
|
|