Skip to main content

Utility functions to manipulate and compute metrics on boxes

Project description

CI Coverage pypi versions

PowerBoxes

Powerboxes is a package containing utility functions for transforming bounding boxes and computing metrics. It is implemented in both Python and Rust. It shows a significant speedup over the equivalent numpy implementations in Python, or other libraries such as shapely or torchvision.

Installation

pip install powerboxes

Python Usage

import powerboxes as pb
import numpy as np

# Create a bounding box
box = np.array([[0, 0, 1, 1]])

# Compute the area of the box
area = pb.box_areas(box)

# Compute the intersection of the box with itself
intersection = pb.iou_distance(box, box)

Functions available

Box Transformations and utilities

  • box_areas: Compute the area of list of boxes
  • box_convert: Convert a box from one format to another. Supported formats are xyxy, xywh, cxcywh.
  • remove_small_boxes: Remove boxes with area smaller than a threshold
  • mask_to_boxes: Convert a mask to a list of boxes

Box Metrics

  • iou_distance: Compute the intersection over union matrix of two sets of boxes
  • parallel_iou_distance: Compute the intersection over union matrix of two sets of boxes in parallel
  • giou_distance: Compute the generalized intersection over union matrix of two sets of boxes
  • parallel_giou_distance: Compute the generalized intersection over union matrix of two sets of boxes in parallel
  • tiou_distance: Compute the tracking intersection over union matrix of two sets of boxes

Rotated Box Metrics

  • rotated_iou_distance: Compute the intersection over union matrix of two sets of rotated boxes in cxcywha format
  • rotated_giou_distance: Compute the generalized intersection over union matrix of two sets of rotated boxes in cxcywha format

Box NMS

  • nms: Non-maximum suppression, returns the indices of the boxes to keep
  • rtree_nms: Non-maximum suppression, returns the indices of the boxes to keep, uses a r-tree internally to avoid quadratic complexity, useful when having many boxes.

Benchmarks

Some benchmarks of powerboxes against various open source alternatives, not all functions are benchmarked. Notice that we use log scales, all differences are major !

Box area

Here it's torchvision vs powerboxes vs numpy

Box area

Box convert

Here it's torchvision vs powerboxes

Box convert

Box IoU matrix

Torchvision vs numpy vs powerboxes

Box IoU

NMS

Torchvision vs powerboxes vs lsnms vs numpy

Large image (10000x10000 pixels)

Box NMS

Normal image (1000x1000 pixels)

Box NMS

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

powerboxes-0.2.1.tar.gz (34.2 kB view hashes)

Uploaded Source

Built Distributions

powerboxes-0.2.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl (1.6 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ x86-64

powerboxes-0.2.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl (1.5 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ ARM64

powerboxes-0.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

powerboxes-0.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

powerboxes-0.2.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

powerboxes-0.2.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl (507.0 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

powerboxes-0.2.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl (531.1 kB view hashes)

Uploaded PyPy macOS 10.12+ x86-64

powerboxes-0.2.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl (1.6 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ x86-64

powerboxes-0.2.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl (1.5 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ ARM64

powerboxes-0.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

powerboxes-0.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

powerboxes-0.2.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

powerboxes-0.2.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl (506.9 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

powerboxes-0.2.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl (531.2 kB view hashes)

Uploaded PyPy macOS 10.12+ x86-64

powerboxes-0.2.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl (1.6 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ x86-64

powerboxes-0.2.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl (1.5 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ ARM64

powerboxes-0.2.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

powerboxes-0.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

powerboxes-0.2.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

powerboxes-0.2.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl (507.4 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

powerboxes-0.2.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl (531.4 kB view hashes)

Uploaded PyPy macOS 10.12+ x86-64

powerboxes-0.2.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl (1.6 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ x86-64

powerboxes-0.2.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl (1.5 MB view hashes)

Uploaded PyPy musllinux: musl 1.1+ ARM64

powerboxes-0.2.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

powerboxes-0.2.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

powerboxes-0.2.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

powerboxes-0.2.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl (532.8 kB view hashes)

Uploaded PyPy macOS 10.12+ x86-64

powerboxes-0.2.1-cp312-none-win_amd64.whl (375.4 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

powerboxes-0.2.1-cp312-none-win32.whl (344.8 kB view hashes)

Uploaded CPython 3.12 Windows x86

powerboxes-0.2.1-cp312-cp312-musllinux_1_1_x86_64.whl (1.6 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ x86-64

powerboxes-0.2.1-cp312-cp312-musllinux_1_1_aarch64.whl (1.5 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.1+ ARM64

powerboxes-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

powerboxes-0.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ s390x

powerboxes-0.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.5 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ppc64le

powerboxes-0.2.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARMv7l

powerboxes-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.3 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

powerboxes-0.2.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.12+ i686

powerboxes-0.2.1-cp312-cp312-macosx_11_0_arm64.whl (507.4 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

powerboxes-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl (512.0 kB view hashes)

Uploaded CPython 3.12 macOS 10.12+ x86-64

powerboxes-0.2.1-cp311-none-win_amd64.whl (377.8 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

powerboxes-0.2.1-cp311-none-win32.whl (348.6 kB view hashes)

Uploaded CPython 3.11 Windows x86

powerboxes-0.2.1-cp311-cp311-musllinux_1_1_x86_64.whl (1.6 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

powerboxes-0.2.1-cp311-cp311-musllinux_1_1_aarch64.whl (1.5 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.1+ ARM64

powerboxes-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

powerboxes-0.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.6 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ s390x

powerboxes-0.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.5 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ppc64le

powerboxes-0.2.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARMv7l

powerboxes-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

powerboxes-0.2.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.12+ i686

powerboxes-0.2.1-cp311-cp311-macosx_11_0_arm64.whl (507.3 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

powerboxes-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl (514.6 kB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

powerboxes-0.2.1-cp310-none-win_amd64.whl (377.2 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

powerboxes-0.2.1-cp310-none-win32.whl (348.6 kB view hashes)

Uploaded CPython 3.10 Windows x86

powerboxes-0.2.1-cp310-cp310-musllinux_1_1_x86_64.whl (1.6 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

powerboxes-0.2.1-cp310-cp310-musllinux_1_1_aarch64.whl (1.5 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.1+ ARM64

powerboxes-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

powerboxes-0.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.6 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ s390x

powerboxes-0.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.5 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ppc64le

powerboxes-0.2.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARMv7l

powerboxes-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

powerboxes-0.2.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686

powerboxes-0.2.1-cp310-cp310-macosx_11_0_arm64.whl (507.3 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

powerboxes-0.2.1-cp310-cp310-macosx_10_12_x86_64.whl (514.8 kB view hashes)

Uploaded CPython 3.10 macOS 10.12+ x86-64

powerboxes-0.2.1-cp39-none-win_amd64.whl (378.0 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

powerboxes-0.2.1-cp39-none-win32.whl (348.6 kB view hashes)

Uploaded CPython 3.9 Windows x86

powerboxes-0.2.1-cp39-cp39-musllinux_1_1_x86_64.whl (1.6 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

powerboxes-0.2.1-cp39-cp39-musllinux_1_1_aarch64.whl (1.5 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.1+ ARM64

powerboxes-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

powerboxes-0.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.6 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ s390x

powerboxes-0.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.5 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ppc64le

powerboxes-0.2.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARMv7l

powerboxes-0.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

powerboxes-0.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

powerboxes-0.2.1-cp39-cp39-macosx_11_0_arm64.whl (507.7 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

powerboxes-0.2.1-cp39-cp39-macosx_10_12_x86_64.whl (531.4 kB view hashes)

Uploaded CPython 3.9 macOS 10.12+ x86-64

powerboxes-0.2.1-cp38-none-win_amd64.whl (376.8 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

powerboxes-0.2.1-cp38-none-win32.whl (348.6 kB view hashes)

Uploaded CPython 3.8 Windows x86

powerboxes-0.2.1-cp38-cp38-musllinux_1_1_x86_64.whl (1.6 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

powerboxes-0.2.1-cp38-cp38-musllinux_1_1_aarch64.whl (1.5 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.1+ ARM64

powerboxes-0.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

powerboxes-0.2.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.5 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ s390x

powerboxes-0.2.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.5 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ppc64le

powerboxes-0.2.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARMv7l

powerboxes-0.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

powerboxes-0.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

powerboxes-0.2.1-cp38-cp38-macosx_11_0_arm64.whl (507.7 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

powerboxes-0.2.1-cp38-cp38-macosx_10_12_x86_64.whl (531.4 kB view hashes)

Uploaded CPython 3.8 macOS 10.12+ x86-64

powerboxes-0.2.1-cp37-none-win_amd64.whl (376.9 kB view hashes)

Uploaded CPython 3.7 Windows x86-64

powerboxes-0.2.1-cp37-none-win32.whl (347.7 kB view hashes)

Uploaded CPython 3.7 Windows x86

powerboxes-0.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl (1.6 MB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ x86-64

powerboxes-0.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl (1.5 MB view hashes)

Uploaded CPython 3.7m musllinux: musl 1.1+ ARM64

powerboxes-0.2.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

powerboxes-0.2.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl (1.6 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ s390x

powerboxes-0.2.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl (1.5 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ppc64le

powerboxes-0.2.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (1.4 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARMv7l

powerboxes-0.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

powerboxes-0.2.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl (1.4 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

powerboxes-0.2.1-cp37-cp37m-macosx_11_0_arm64.whl (507.6 kB view hashes)

Uploaded CPython 3.7m macOS 11.0+ ARM64

powerboxes-0.2.1-cp37-cp37m-macosx_10_12_x86_64.whl (531.5 kB view hashes)

Uploaded CPython 3.7m macOS 10.12+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page