%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 * Thu Jun 08 2023 Python_Bot - 0.1.10-1 - Package Spec generated