diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-upolygon.spec | 281 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 283 insertions, 0 deletions
@@ -0,0 +1 @@ +/upolygon-0.1.10.tar.gz diff --git a/python-upolygon.spec b/python-upolygon.spec new file mode 100644 index 0000000..546694f --- /dev/null +++ b/python-upolygon.spec @@ -0,0 +1,281 @@ +%global _empty_manifest_terminate_build 0 +Name: python-upolygon +Version: 0.1.10 +Release: 1 +Summary: Collection of fast polygon operations for DL +License: MIT License +URL: https://github.com/v7labs/upolygon +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/59/c7/68a4a1124465b8bc8cd3cd8ea127dcdaf61ddc6f21ec92916d31a09b244e/upolygon-0.1.10.tar.gz + + +%description +# uPolygon +Library of handy polygon related functions to speed up machine learning projects. + +It was born as a replacement for `cv2.fillPoly` when generating masks for instance segmentation, without having to bring in all of opencv. + +## TODO +- [x] draw_polygon +- [x] find_contours +- [ ] polygon_area +- [ ] point_in_polygon + + +## Usage +This library expects all polygons to be model as a list of paths, each path is a list of alternating x and y coordinates (`[x1,y1,x2,y2,...]`). + +A simple triangle would be declared as: +```python +triangle = [[50,50, 100,0, 0,0]] +``` + +Complex polygons (holes and/or disjoints) follow the even-odd rule. + + +## draw_polygon + +`draw_polygon(mask: array[:, :], paths: path[]) -> array[:, :]` + +```python +from upolygon import draw_polygon +import numpy as np + +mask = np.zeros((100,100), dtype=np.int32) +draw_polygon(mask, [[50,50, 100,0, 0,0]], 1) +``` + +Equivalent of calling `cv2.fillPoly(mask, [np.array([[50,50], [100,0], [0,0]])], 1)` or `cv2.drawContours(mask, [np.array([[50,50], [100,0], [0,0]])], -1, 1, cv2.FILLED)` when using opencv. + +uPolygon is ~ 6 times faster than opencv for large random polygons with many intersecting lines. +For smaller polygons or few intersections, uPolygon is half as fast as opencv. + +## find_contours +`find_contours(mask: array[:, :]) -> (array[:, :], path[:], path[:])` + +0 is treated as background, 1 is treated as foreground. +```python +from upolygon import find_contours +import numpy as np + +mask = np.array([ + [0, 0, 0, 0, 0], + [0, 1, 1, 1, 0], + [0, 1, 1, 1, 0], + [0, 1, 1, 1, 0] + ], dtype=np.uint8) + +_labels, external_paths, internal_paths = find_contours(mask) +``` + +Similar to OpenCV's `cv2.findContours` but lacking hierarchies. Also similar to BoofCV's `LinearContourLabelChang2004` which is based on the same [algorithm](https://www.iis.sinica.edu.tw/papers/fchang/1362-F.pdf). + + +Note that currently the input mask to find_contour needs to be uint8. + +## rle_encode +`rle_encode(mask: array[:,:]) -> list` +Takes a 2-dim binary mask and generates a run length encoding according to the coco specs + +~ 15 times faster than written in plain python + + + +%package -n python3-upolygon +Summary: Collection of fast polygon operations for DL +Provides: python-upolygon +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +BuildRequires: python3-cffi +BuildRequires: gcc +BuildRequires: gdb +%description -n python3-upolygon +# uPolygon +Library of handy polygon related functions to speed up machine learning projects. + +It was born as a replacement for `cv2.fillPoly` when generating masks for instance segmentation, without having to bring in all of opencv. + +## TODO +- [x] draw_polygon +- [x] find_contours +- [ ] polygon_area +- [ ] point_in_polygon + + +## Usage +This library expects all polygons to be model as a list of paths, each path is a list of alternating x and y coordinates (`[x1,y1,x2,y2,...]`). + +A simple triangle would be declared as: +```python +triangle = [[50,50, 100,0, 0,0]] +``` + +Complex polygons (holes and/or disjoints) follow the even-odd rule. + + +## draw_polygon + +`draw_polygon(mask: array[:, :], paths: path[]) -> array[:, :]` + +```python +from upolygon import draw_polygon +import numpy as np + +mask = np.zeros((100,100), dtype=np.int32) +draw_polygon(mask, [[50,50, 100,0, 0,0]], 1) +``` + +Equivalent of calling `cv2.fillPoly(mask, [np.array([[50,50], [100,0], [0,0]])], 1)` or `cv2.drawContours(mask, [np.array([[50,50], [100,0], [0,0]])], -1, 1, cv2.FILLED)` when using opencv. + +uPolygon is ~ 6 times faster than opencv for large random polygons with many intersecting lines. +For smaller polygons or few intersections, uPolygon is half as fast as opencv. + +## find_contours +`find_contours(mask: array[:, :]) -> (array[:, :], path[:], path[:])` + +0 is treated as background, 1 is treated as foreground. +```python +from upolygon import find_contours +import numpy as np + +mask = np.array([ + [0, 0, 0, 0, 0], + [0, 1, 1, 1, 0], + [0, 1, 1, 1, 0], + [0, 1, 1, 1, 0] + ], dtype=np.uint8) + +_labels, external_paths, internal_paths = find_contours(mask) +``` + +Similar to OpenCV's `cv2.findContours` but lacking hierarchies. Also similar to BoofCV's `LinearContourLabelChang2004` which is based on the same [algorithm](https://www.iis.sinica.edu.tw/papers/fchang/1362-F.pdf). + + +Note that currently the input mask to find_contour needs to be uint8. + +## rle_encode +`rle_encode(mask: array[:,:]) -> list` +Takes a 2-dim binary mask and generates a run length encoding according to the coco specs + +~ 15 times faster than written in plain python + + + +%package help +Summary: Development documents and examples for upolygon +Provides: python3-upolygon-doc +%description help +# uPolygon +Library of handy polygon related functions to speed up machine learning projects. + +It was born as a replacement for `cv2.fillPoly` when generating masks for instance segmentation, without having to bring in all of opencv. + +## TODO +- [x] draw_polygon +- [x] find_contours +- [ ] polygon_area +- [ ] point_in_polygon + + +## Usage +This library expects all polygons to be model as a list of paths, each path is a list of alternating x and y coordinates (`[x1,y1,x2,y2,...]`). + +A simple triangle would be declared as: +```python +triangle = [[50,50, 100,0, 0,0]] +``` + +Complex polygons (holes and/or disjoints) follow the even-odd rule. + + +## draw_polygon + +`draw_polygon(mask: array[:, :], paths: path[]) -> array[:, :]` + +```python +from upolygon import draw_polygon +import numpy as np + +mask = np.zeros((100,100), dtype=np.int32) +draw_polygon(mask, [[50,50, 100,0, 0,0]], 1) +``` + +Equivalent of calling `cv2.fillPoly(mask, [np.array([[50,50], [100,0], [0,0]])], 1)` or `cv2.drawContours(mask, [np.array([[50,50], [100,0], [0,0]])], -1, 1, cv2.FILLED)` when using opencv. + +uPolygon is ~ 6 times faster than opencv for large random polygons with many intersecting lines. +For smaller polygons or few intersections, uPolygon is half as fast as opencv. + +## find_contours +`find_contours(mask: array[:, :]) -> (array[:, :], path[:], path[:])` + +0 is treated as background, 1 is treated as foreground. +```python +from upolygon import find_contours +import numpy as np + +mask = np.array([ + [0, 0, 0, 0, 0], + [0, 1, 1, 1, 0], + [0, 1, 1, 1, 0], + [0, 1, 1, 1, 0] + ], dtype=np.uint8) + +_labels, external_paths, internal_paths = find_contours(mask) +``` + +Similar to OpenCV's `cv2.findContours` but lacking hierarchies. Also similar to BoofCV's `LinearContourLabelChang2004` which is based on the same [algorithm](https://www.iis.sinica.edu.tw/papers/fchang/1362-F.pdf). + + +Note that currently the input mask to find_contour needs to be uint8. + +## rle_encode +`rle_encode(mask: array[:,:]) -> list` +Takes a 2-dim binary mask and generates a run length encoding according to the coco specs + +~ 15 times faster than written in plain python + + + +%prep +%autosetup -n upolygon-0.1.10 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-upolygon -f filelist.lst +%dir %{python3_sitearch}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed May 10 2023 Python_Bot <Python_Bot@openeuler.org> - 0.1.10-1 +- Package Spec generated @@ -0,0 +1 @@ +2dd7ff2335b5fb3538791803ff626d40 upolygon-0.1.10.tar.gz |
