similari-trackers-rs


Namesimilari-trackers-rs JSON
Version 0.26.10 PyPI version JSON
download
home_pagehttps://github.com/insight-platform/Similari
SummaryMachine learning framework for building object trackers and similarity search engines
upload_time2024-02-24 14:24:28
maintainerNone
docs_urlNone
authorIvan Kudriavtsev <ivan.a.kudryavtsev@gmail.com>
requires_python>=3.8
licenseApache-2.0
keywords machine-learning similarity tracking sort deepsort
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Similari

Newer versions (renamed):

[![Rust](https://img.shields.io/crates/v/similari-trackers-rs.svg)](https://crates.io/crates/similari-trackers-rs)
[![Rust](https://img.shields.io/crates/d/similari-trackers-rs.svg)](https://crates.io/crates/similari-trackers-rs)
[![Rust](https://img.shields.io/github/license/insight-platform/Similari.svg)](https://img.shields.io/github/license/insight-platform/Similari.svg)

[![PyPI version](https://badge.fury.io/py/similari-trackers-rs.svg)](https://pypi.org/project/similari-trackers-rs/)

Older versions:

[![Rust](https://img.shields.io/crates/v/similari.svg)](https://crates.io/crates/similari)
[![Rust](https://img.shields.io/crates/d/similari.svg)](https://crates.io/crates/similari)
[![Rust](https://img.shields.io/github/license/insight-platform/Similari.svg)](https://img.shields.io/github/license/insight-platform/Similari.svg)

:star: Star us on GitHub — it motivates us a lot!

Similari is a Rust framework with Python bindings that helps build sophisticated tracking systems. With Similari one 
can develop highly efficient parallelized [SORT](https://github.com/abewley/sort), [DeepSORT](https://github.com/nwojke/deep_sort), and 
other sophisticated single observer (e.g. Cam) or multi-observer tracking engines.

## Introduction

The primary purpose of Similari is to provide means to build sophisticated in-memory multiple object tracking engines.

The framework helps build various kinds of tracking and similarity search engines - the simplest one that holds 
vector features and allows comparing new vectors against the ones kept in the database. More sophisticated engines 
operate over tracks - a series of observations for the same feature collected during the lifecycle. Such systems are 
often used in video processing or other systems where the observer receives fuzzy or changing observation results.

## Out-of-The-Box Stuff

Similari is a framework to build custom trackers, however it provides certain algorithms as an end-user functionality:

**Bounding Box Kalman filter**, that predicts rectangular bounding boxes axis-aligned to scene, supports the oriented (rotated) 
bounding boxes as well.

**2D Point Kalman filter**, that predicts 2D point motion.

**2D Point Vector Kalman filter**, that predicts the vector of independent 2D points motion (used in the Keypoint Tracker).

**Bounding box clipping**, that allows calculating the area of intersection for axis-aligned and oriented (rotated) 
bounding boxes.

**Non-Maximum Suppression (NMS)** - filters rectangular bounding boxes co-axial to scene, and supports the oriented 
  bounding boxes.

**SORT tracking** algorithm (axis-aligned and oriented boxes are supported) - IoU and Mahalanobis distances are 
  supported.

**Batch SORT tracking** algorithm (axis-aligned and oriented boxes are supported) - IoU and Mahalanobis distances are 
supported. Batch tracker allows passing multiple scenes to tracker in a single batch and get them back. If the platform
supports batching (like Nvidia DeepStream or Intel DL Streamer) the batch tracker is more beneficial to use.

**VisualSORT tracking** - a DeepSORT-like algorithm (axis-aligned and oriented boxes are supported) - IoU and 
Mahalanobis distances are supported for positional tracking, euclidean, cosine distances are used for visual tracking on 
feature vectors.

**Batch VisualSORT** - batched VisualSORT flavor;


## Applicability Notes

Although Similari allows building various tracking and similarity engines, there are competitive tools that sometimes 
may fit better. The section will explain where it is applicable and what alternatives exist.

Similari fits best for the tracking tasks where objects are described by multiple observations for a certain feature 
class, not a single feature vector. Also, their behavior is dynamic - you remove them from the index or modify them as 
often as add new ones. This is a very important point - it is less efficient than tools that work with growing or static 
object spaces.

**Fit**: track the person across the room: person ReID, age/gender, and face features are collected multiple times during 
the tracking and used to merge tracks or provide aggregated results at the end of the track;

**Not fit**: plagiarism database, when a single document is described by a number (or just one) constant ReID vectors, 
documents are added but not removed. The task is to find the top X most similar documents to a checked.

If your task looks like **Not fit**, can use Similari, but you're probably looking for `HNSW` or `NMS` implementations:
* HNSW Rust - [Link](https://github.com/jean-pierreBoth/hnswlib-rs)
* HNSW C/Python - [link](https://github.com/nmslib/hnswlib)
* NMSLib - [link](https://github.com/nmslib/nmslib)

Similari objects support following features:

**Track lifecycle** - the object is represented by its lifecycle (track) - it appears, evolves, and disappears. During 
its lifetime object evolves according to its behavioral properties (attributes, and feature observations).

**Observations** - Similari assumes that an object is observed by an observer entity that collects its features 
(uniform vectors) and custom observation attributes (like GPS or screen box position)multiple times. Those 
features are presented by vectors of float numbers and observation attributes. When the observation happened, the 
track is updated with gathered features. Future observations are used to find similar tracks in the index and merge them.

**Track Attributes** - Arbitrary attributes describe additional track properties aside from feature observations. 
Track attributes is crucial part when you are comparing objects in the wild, because there may be attributes 
disposition when objects are incompatible, like `animal_type` that prohibits you from comparing `dogs` and `cats` 
between each other. Another popular use of attributes is a spatial or temporal characteristic of an object, e.g. objects 
that are situated at distant locations at the same time cannot be compared. Attributes in Similari are dynamic and 
evolve upon every feature observation addition and when objects are merged. They are used in both distance calculations 
and compatibility guessing (which decreases compute space by skipping incompatible objects).

If you plan to use Similari to search in a large index, consider object attributes to split the lookup space. If the 
attributes of the two tracks are not compatible, their distance calculations are skipped.

## Performance

The Similari is fast. It is usually faster than trackers built with Python and NumPy.

To run visual feature calculations performant the framework uses [ultraviolet](https://crates.io/crates/ultraviolet) - 
the library for fast SIMD computations.

Parallel computations are implemented with index sharding and parallel computations based on a dedicated thread workers 
pool.

Vector operations performance depends a lot on the optimization level defined for the build. On low or default 
optimization levels Rust may not use f32 vectorization, so when running benchmarks take care of proper optimization 
levels configured.

### Rust optimizations

Use `RUSTFLAGS="-C target-cpu=native"` to enable all cpu features like AVX, AVX2, etc. It is beneficial to ultraviolet.

Alternatively you can add build instructions to `.cargo/config`:

```
[build]
rustflags = "-C target-cpu=native"
```

Take a look at [benchmarks](benches) for numbers.

### Performance Benchmarks

Some benchmarks numbers are presented here: [Benchmarks](assets/benchmarks/benchmarks.md)

You can run your own benchmarks by:

```
rustup default nightly
cargo bench
```

## Apple Silicone Build Notes

You may need to add following lines into your `~/.cargo/config` to build the code on Apple Silicone:

```
[build]
rustflags = "-C target-cpu=native"

# Apple Silicone fix
[target.aarch64-apple-darwin]
rustflags = [
    "-C", "link-arg=-undefined",
    "-C", "link-arg=dynamic_lookup",
]
```

## Python API

Python interface exposes ready-to-use functions and classes of Similari. As for now, the Python interface provides:
* the Kalman filter for axis-aligned and oriented (rotated) boxes prediction;
* the Kalman filter for 2D point motion prediction;
* the 2D Point Vector Kalman filter, that predicts the vector of independent 2D points motion (used in the Keypoint Tracker);
* NMS (Non-maximum suppression);
* the Sutherland-Hodgman clipping, intersection area for oriented (rotated) boxes;
* SORT with IoU and Mahalanobis metric;
* BatchSORT with IoU and Mahalanobis metric;
* VisualSORT - DeepSORT-like tracker with euclidean/cosine metric for visual features and IoU/Mahalanobis metric 
  for positional tracking (VisualSort).
* BatchVisualSORT - batched VisualSORT flavor;

Python API classes and functions can be explored in the python 
[documentation](assets/documentation/python/api.md) and tiny [examples](python) provided.

There is also [MOTChallenge](python/motchallenge) evaluation kit provided which you can use to simply evaluate trackers 
performance and metrics.

### Install Python API from PyPi

*Please, keep in mind that the  PyPi package is built to conform broad range of platforms, so it may not be as fast as the one you build locally for your platform (see the following sections).* 

Platforms:

* Linux: X86_64, ARM64, ARMv7;
* Windows: X86_64;
* MacOS: X86_64, ARM64.

```
pip3 install similari-trackers-rs
```

### Build Python API in Docker

You can build the wheel in the Docker and if you want to install it in the host system, 
copy the resulting package to the host system as demonstrated by the following examples.

#### Rust 1.67 Base Image

If you use other rust libraries you may find it beneficial to build with base Rust 
container (and Python 3.8):  

```
docker build -t similari-trackers-rs -f docker/rust_1.67/Dockerfile .

# optional: copy and install to host system
docker run --rm -it -v $(pwd)/distfiles:/tmp similari-trackers-rs cp -R /opt/dist /tmp
pip3 install --force-reinstall distfiles/dist/*.whl
```

#### Python 3.8 Base Image

Python 3.8 is still a very frequently used. Here is how to build Similari with it:

```
docker build -t similari-trackers-rs -f docker/python_3.8/Dockerfile .

# optional: copy and install to host system
docker run --rm -it -v $(pwd)/distfiles:/tmp similari-trackers-rs cp -R /opt/dist /tmp
pip3 install --force-reinstall distfiles/dist/*.whl
```

#### Python 3.10 Base Image

If you use the most recent Python environment, you can build with base Python container:

```
docker build -t similari-trackers-rs -f docker/python_3.10/Dockerfile .

# optional: copy and install to host system
docker run --rm -it -v $(pwd)/distfiles:/tmp similari-trackers-rs cp -R /opt/dist /tmp
pip3 install --force-reinstall distfiles/dist/*.whl
```

**NOTE**: If you are getting the `pip3` error like:

```
ERROR: similari-trackers-rs-0.26.4-cp38-cp38-manylinux_2_28_x86_64.whl is not a supported wheel on this platform.
```

It means that the Python version in the host system doesn't match to the one that is in the image used
to build the wheel.

### Build Python API in Host System

#### Linux Instruction

0. Install up-to-date Rust toolkit:

```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
rustup update
```

1. Install build-essential tools `apt install build-essential -y`.

2. Install Python3 (>= 3.8) and the development files (`python3-dev`).

3. Install Maturin:
```
pip3 install --upgrade maturin~=0.15
```

4. **Not in VENV**. Build the python module: 

```
RUSTFLAGS=" -C target-cpu=native -C opt-level=3" maturin build --release --out dist
pip3 install --force-reinstall dist/*.whl
```

4. **In VENV**. Build the python module:

```
RUSTFLAGS=" -C target-cpu=native -C opt-level=3" maturin develop
```

5. Usage examples are located at [python](python).
6. MOT Challenge Docker image for Similari trackers and conventional trackers is [here](python/motchallenge). 
   You can easily build all-in-one Docker image and try ours trackers.

## Manuals and Articles
Collected articles about how the Similari can be used to solve specific problems.

#### Medium.com

* IoU object tracker [example](https://medium.com/@kudryavtsev_ia/high-performance-object-tracking-engine-with-rust-59ccbc79cdb0);
* Re-ID object tracker [example](https://medium.com/@kudryavtsev_ia/feature-based-object-tracker-with-similari-and-rust-25d72d01d2e2);
* SORT object tracker [example](https://medium.com/p/9a1dd18c259c);
* Python SORT object tracker [example](https://medium.com/@kudryavtsev_ia/high-performance-python-sort-tracker-225c2b507562);
* Python Rotated SORT object tracker [example](https://medium.com/inside-in-sight/rotated-objects-tracking-with-angle-aware-detection-model-and-sort-tracker-42a96429898d);
* [Why You Need a High-Performance Tracking Systems For Multiple Object Tracking](https://medium.com/inside-in-sight/why-you-need-a-high-performance-tracking-systems-for-multiple-object-tracking-d1ffd56ca8b7?source=friends_link&sk=7685979b41a112709eab8386c8e56e08).

## Usage Examples

Take a look at samples in the repo:
* [simple.rs](examples/simple.rs) - an idea of simple usage.
* [track_merging.rs](examples/track_merging.rs) - an idea of intra-cam track merging.
* [incremental_track_build.rs](examples/incremental_track_build.rs) - very simple feature-based tracker.
* [simple_sort_iou_tracker.rs](examples/simple_sort_iou_tracker.rs) - SORT tracker (with Kalman filter, IoU).
* [simple_sort_iou_tracker_oriented.rs](examples/simple_sort_iou_tracker_oriented.rs) - Oriented (rotated) SORT tracker 
  (with Kalman filter, IoU).
* [simple_sort_maha_tracker.rs](examples/simple_sort_maha_tracker.rs) - SORT tracker (with Kalman filter, Mahalanobis).
* [simple_sort_maha_tracker_oriented.rs](examples/simple_sort_maha_tracker_oriented.rs) - Oriented SORT tracker (with Kalman filter, Mahalanobis).
* [middleware_sort_tracker.rs](examples/middleware_sort_tracker.rs) - SORT tracker (with Kalman filter, middleware implementation).


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/insight-platform/Similari",
    "name": "similari-trackers-rs",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "machine-learning,similarity,tracking,SORT,DeepSORT",
    "author": "Ivan Kudriavtsev <ivan.a.kudryavtsev@gmail.com>",
    "author_email": "Ivan Kudriavtsev <ivan.a.kudryavtsev@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/0b/69/73abb6b6383b0fe56399ce086a557de87000b4bd539702928b9f4c19b1e7/similari_trackers_rs-0.26.10.tar.gz",
    "platform": null,
    "description": "# Similari\n\nNewer versions (renamed):\n\n[![Rust](https://img.shields.io/crates/v/similari-trackers-rs.svg)](https://crates.io/crates/similari-trackers-rs)\n[![Rust](https://img.shields.io/crates/d/similari-trackers-rs.svg)](https://crates.io/crates/similari-trackers-rs)\n[![Rust](https://img.shields.io/github/license/insight-platform/Similari.svg)](https://img.shields.io/github/license/insight-platform/Similari.svg)\n\n[![PyPI version](https://badge.fury.io/py/similari-trackers-rs.svg)](https://pypi.org/project/similari-trackers-rs/)\n\nOlder versions:\n\n[![Rust](https://img.shields.io/crates/v/similari.svg)](https://crates.io/crates/similari)\n[![Rust](https://img.shields.io/crates/d/similari.svg)](https://crates.io/crates/similari)\n[![Rust](https://img.shields.io/github/license/insight-platform/Similari.svg)](https://img.shields.io/github/license/insight-platform/Similari.svg)\n\n:star: Star us on GitHub \u2014 it motivates us a lot!\n\nSimilari is a Rust framework with Python bindings that helps build sophisticated tracking systems. With Similari one \ncan develop highly efficient parallelized [SORT](https://github.com/abewley/sort), [DeepSORT](https://github.com/nwojke/deep_sort), and \nother sophisticated single observer (e.g. Cam) or multi-observer tracking engines.\n\n## Introduction\n\nThe primary purpose of Similari is to provide means to build sophisticated in-memory multiple object tracking engines.\n\nThe framework helps build various kinds of tracking and similarity search engines - the simplest one that holds \nvector features and allows comparing new vectors against the ones kept in the database. More sophisticated engines \noperate over tracks - a series of observations for the same feature collected during the lifecycle. Such systems are \noften used in video processing or other systems where the observer receives fuzzy or changing observation results.\n\n## Out-of-The-Box Stuff\n\nSimilari is a framework to build custom trackers, however it provides certain algorithms as an end-user functionality:\n\n**Bounding Box Kalman filter**, that predicts rectangular bounding boxes axis-aligned to scene, supports the oriented (rotated) \nbounding boxes as well.\n\n**2D Point Kalman filter**, that predicts 2D point motion.\n\n**2D Point Vector Kalman filter**, that predicts the vector of independent 2D points motion (used in the Keypoint Tracker).\n\n**Bounding box clipping**, that allows calculating the area of intersection for axis-aligned and oriented (rotated) \nbounding boxes.\n\n**Non-Maximum Suppression (NMS)** - filters rectangular bounding boxes co-axial to scene, and supports the oriented \n  bounding boxes.\n\n**SORT tracking** algorithm (axis-aligned and oriented boxes are supported) - IoU and Mahalanobis distances are \n  supported.\n\n**Batch SORT tracking** algorithm (axis-aligned and oriented boxes are supported) - IoU and Mahalanobis distances are \nsupported. Batch tracker allows passing multiple scenes to tracker in a single batch and get them back. If the platform\nsupports batching (like Nvidia DeepStream or Intel DL Streamer) the batch tracker is more beneficial to use.\n\n**VisualSORT tracking** - a DeepSORT-like algorithm (axis-aligned and oriented boxes are supported) - IoU and \nMahalanobis distances are supported for positional tracking, euclidean, cosine distances are used for visual tracking on \nfeature vectors.\n\n**Batch VisualSORT** - batched VisualSORT flavor;\n\n\n## Applicability Notes\n\nAlthough Similari allows building various tracking and similarity engines, there are competitive tools that sometimes \nmay fit better. The section will explain where it is applicable and what alternatives exist.\n\nSimilari fits best for the tracking tasks where objects are described by multiple observations for a certain feature \nclass, not a single feature vector. Also, their behavior is dynamic - you remove them from the index or modify them as \noften as add new ones. This is a very important point - it is less efficient than tools that work with growing or static \nobject spaces.\n\n**Fit**: track the person across the room: person ReID, age/gender, and face features are collected multiple times during \nthe tracking and used to merge tracks or provide aggregated results at the end of the track;\n\n**Not fit**: plagiarism database, when a single document is described by a number (or just one) constant ReID vectors, \ndocuments are added but not removed. The task is to find the top X most similar documents to a checked.\n\nIf your task looks like **Not fit**, can use Similari, but you're probably looking for `HNSW` or `NMS` implementations:\n* HNSW Rust - [Link](https://github.com/jean-pierreBoth/hnswlib-rs)\n* HNSW C/Python - [link](https://github.com/nmslib/hnswlib)\n* NMSLib - [link](https://github.com/nmslib/nmslib)\n\nSimilari objects support following features:\n\n**Track lifecycle** - the object is represented by its lifecycle (track) - it appears, evolves, and disappears. During \nits lifetime object evolves according to its behavioral properties (attributes, and feature observations).\n\n**Observations** - Similari assumes that an object is observed by an observer entity that collects its features \n(uniform vectors) and custom observation attributes (like GPS or screen box position)multiple times. Those \nfeatures are presented by vectors of float numbers and observation attributes. When the observation happened, the \ntrack is updated with gathered features. Future observations are used to find similar tracks in the index and merge them.\n\n**Track Attributes** - Arbitrary attributes describe additional track properties aside from feature observations. \nTrack attributes is crucial part when you are comparing objects in the wild, because there may be attributes \ndisposition when objects are incompatible, like `animal_type` that prohibits you from comparing `dogs` and `cats` \nbetween each other. Another popular use of attributes is a spatial or temporal characteristic of an object, e.g. objects \nthat are situated at distant locations at the same time cannot be compared. Attributes in Similari are dynamic and \nevolve upon every feature observation addition and when objects are merged. They are used in both distance calculations \nand compatibility guessing (which decreases compute space by skipping incompatible objects).\n\nIf you plan to use Similari to search in a large index, consider object attributes to split the lookup space. If the \nattributes of the two tracks are not compatible, their distance calculations are skipped.\n\n## Performance\n\nThe Similari is fast. It is usually faster than trackers built with Python and NumPy.\n\nTo run visual feature calculations performant the framework uses [ultraviolet](https://crates.io/crates/ultraviolet) - \nthe library for fast SIMD computations.\n\nParallel computations are implemented with index sharding and parallel computations based on a dedicated thread workers \npool.\n\nVector operations performance depends a lot on the optimization level defined for the build. On low or default \noptimization levels Rust may not use f32 vectorization, so when running benchmarks take care of proper optimization \nlevels configured.\n\n### Rust optimizations\n\nUse `RUSTFLAGS=\"-C target-cpu=native\"` to enable all cpu features like AVX, AVX2, etc. It is beneficial to ultraviolet.\n\nAlternatively you can add build instructions to `.cargo/config`:\n\n```\n[build]\nrustflags = \"-C target-cpu=native\"\n```\n\nTake a look at [benchmarks](benches) for numbers.\n\n### Performance Benchmarks\n\nSome benchmarks numbers are presented here: [Benchmarks](assets/benchmarks/benchmarks.md)\n\nYou can run your own benchmarks by:\n\n```\nrustup default nightly\ncargo bench\n```\n\n## Apple Silicone Build Notes\n\nYou may need to add following lines into your `~/.cargo/config` to build the code on Apple Silicone:\n\n```\n[build]\nrustflags = \"-C target-cpu=native\"\n\n# Apple Silicone fix\n[target.aarch64-apple-darwin]\nrustflags = [\n    \"-C\", \"link-arg=-undefined\",\n    \"-C\", \"link-arg=dynamic_lookup\",\n]\n```\n\n## Python API\n\nPython interface exposes ready-to-use functions and classes of Similari. As for now, the Python interface provides:\n* the Kalman filter for axis-aligned and oriented (rotated) boxes prediction;\n* the Kalman filter for 2D point motion prediction;\n* the 2D Point Vector Kalman filter, that predicts the vector of independent 2D points motion (used in the Keypoint Tracker);\n* NMS (Non-maximum suppression);\n* the Sutherland-Hodgman clipping, intersection area for oriented (rotated) boxes;\n* SORT with IoU and Mahalanobis metric;\n* BatchSORT with IoU and Mahalanobis metric;\n* VisualSORT - DeepSORT-like tracker with euclidean/cosine metric for visual features and IoU/Mahalanobis metric \n  for positional tracking (VisualSort).\n* BatchVisualSORT - batched VisualSORT flavor;\n\nPython API classes and functions can be explored in the python \n[documentation](assets/documentation/python/api.md) and tiny [examples](python) provided.\n\nThere is also [MOTChallenge](python/motchallenge) evaluation kit provided which you can use to simply evaluate trackers \nperformance and metrics.\n\n### Install Python API from PyPi\n\n*Please, keep in mind that the  PyPi package is built to conform broad range of platforms, so it may not be as fast as the one you build locally for your platform (see the following sections).* \n\nPlatforms:\n\n* Linux: X86_64, ARM64, ARMv7;\n* Windows: X86_64;\n* MacOS: X86_64, ARM64.\n\n```\npip3 install similari-trackers-rs\n```\n\n### Build Python API in Docker\n\nYou can build the wheel in the Docker and if you want to install it in the host system, \ncopy the resulting package to the host system as demonstrated by the following examples.\n\n#### Rust 1.67 Base Image\n\nIf you use other rust libraries you may find it beneficial to build with base Rust \ncontainer (and Python 3.8):  \n\n```\ndocker build -t similari-trackers-rs -f docker/rust_1.67/Dockerfile .\n\n# optional: copy and install to host system\ndocker run --rm -it -v $(pwd)/distfiles:/tmp similari-trackers-rs cp -R /opt/dist /tmp\npip3 install --force-reinstall distfiles/dist/*.whl\n```\n\n#### Python 3.8 Base Image\n\nPython 3.8 is still a very frequently used. Here is how to build Similari with it:\n\n```\ndocker build -t similari-trackers-rs -f docker/python_3.8/Dockerfile .\n\n# optional: copy and install to host system\ndocker run --rm -it -v $(pwd)/distfiles:/tmp similari-trackers-rs cp -R /opt/dist /tmp\npip3 install --force-reinstall distfiles/dist/*.whl\n```\n\n#### Python 3.10 Base Image\n\nIf you use the most recent Python environment, you can build with base Python container:\n\n```\ndocker build -t similari-trackers-rs -f docker/python_3.10/Dockerfile .\n\n# optional: copy and install to host system\ndocker run --rm -it -v $(pwd)/distfiles:/tmp similari-trackers-rs cp -R /opt/dist /tmp\npip3 install --force-reinstall distfiles/dist/*.whl\n```\n\n**NOTE**: If you are getting the `pip3` error like:\n\n```\nERROR: similari-trackers-rs-0.26.4-cp38-cp38-manylinux_2_28_x86_64.whl is not a supported wheel on this platform.\n```\n\nIt means that the Python version in the host system doesn't match to the one that is in the image used\nto build the wheel.\n\n### Build Python API in Host System\n\n#### Linux Instruction\n\n0. Install up-to-date Rust toolkit:\n\n```bash\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\nsource $HOME/.cargo/env\nrustup update\n```\n\n1. Install build-essential tools `apt install build-essential -y`.\n\n2. Install Python3 (>= 3.8) and the development files (`python3-dev`).\n\n3. Install Maturin:\n```\npip3 install --upgrade maturin~=0.15\n```\n\n4. **Not in VENV**. Build the python module: \n\n```\nRUSTFLAGS=\" -C target-cpu=native -C opt-level=3\" maturin build --release --out dist\npip3 install --force-reinstall dist/*.whl\n```\n\n4. **In VENV**. Build the python module:\n\n```\nRUSTFLAGS=\" -C target-cpu=native -C opt-level=3\" maturin develop\n```\n\n5. Usage examples are located at [python](python).\n6. MOT Challenge Docker image for Similari trackers and conventional trackers is [here](python/motchallenge). \n   You can easily build all-in-one Docker image and try ours trackers.\n\n## Manuals and Articles\nCollected articles about how the Similari can be used to solve specific problems.\n\n#### Medium.com\n\n* IoU object tracker [example](https://medium.com/@kudryavtsev_ia/high-performance-object-tracking-engine-with-rust-59ccbc79cdb0);\n* Re-ID object tracker [example](https://medium.com/@kudryavtsev_ia/feature-based-object-tracker-with-similari-and-rust-25d72d01d2e2);\n* SORT object tracker [example](https://medium.com/p/9a1dd18c259c);\n* Python SORT object tracker [example](https://medium.com/@kudryavtsev_ia/high-performance-python-sort-tracker-225c2b507562);\n* Python Rotated SORT object tracker [example](https://medium.com/inside-in-sight/rotated-objects-tracking-with-angle-aware-detection-model-and-sort-tracker-42a96429898d);\n* [Why You Need a High-Performance Tracking Systems For Multiple Object Tracking](https://medium.com/inside-in-sight/why-you-need-a-high-performance-tracking-systems-for-multiple-object-tracking-d1ffd56ca8b7?source=friends_link&sk=7685979b41a112709eab8386c8e56e08).\n\n## Usage Examples\n\nTake a look at samples in the repo:\n* [simple.rs](examples/simple.rs) - an idea of simple usage.\n* [track_merging.rs](examples/track_merging.rs) - an idea of intra-cam track merging.\n* [incremental_track_build.rs](examples/incremental_track_build.rs) - very simple feature-based tracker.\n* [simple_sort_iou_tracker.rs](examples/simple_sort_iou_tracker.rs) - SORT tracker (with Kalman filter, IoU).\n* [simple_sort_iou_tracker_oriented.rs](examples/simple_sort_iou_tracker_oriented.rs) - Oriented (rotated) SORT tracker \n  (with Kalman filter, IoU).\n* [simple_sort_maha_tracker.rs](examples/simple_sort_maha_tracker.rs) - SORT tracker (with Kalman filter, Mahalanobis).\n* [simple_sort_maha_tracker_oriented.rs](examples/simple_sort_maha_tracker_oriented.rs) - Oriented SORT tracker (with Kalman filter, Mahalanobis).\n* [middleware_sort_tracker.rs](examples/middleware_sort_tracker.rs) - SORT tracker (with Kalman filter, middleware implementation).\n\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Machine learning framework for building object trackers and similarity search engines",
    "version": "0.26.10",
    "project_urls": {
        "Homepage": "https://github.com/insight-platform/Similari",
        "Source Code": "https://github.com/insight-platform/Similari"
    },
    "split_keywords": [
        "machine-learning",
        "similarity",
        "tracking",
        "sort",
        "deepsort"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7091b73a57eb4d5cf857a72da5c02f78b11753676e47d6328ec0c2b0a42e0f9b",
                "md5": "40f9336048a360a4fba8bf524feaa2e3",
                "sha256": "fab384695e36767db99465c46c755ca5c441e7d08ac7501cd1b36bb1ccfff55f"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp310-cp310-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "40f9336048a360a4fba8bf524feaa2e3",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 726143,
            "upload_time": "2024-02-24T14:29:27",
            "upload_time_iso_8601": "2024-02-24T14:29:27.035216Z",
            "url": "https://files.pythonhosted.org/packages/70/91/b73a57eb4d5cf857a72da5c02f78b11753676e47d6328ec0c2b0a42e0f9b/similari_trackers_rs-0.26.10-cp310-cp310-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3a09b4719d92025aa61e62939429c2b09493b986cfcf9c554c30e939ba47ef19",
                "md5": "69e414b78d3b6c7703037e339ec1a84b",
                "sha256": "1e7a71d81611d5fbcdc34b7639ac8aed863530088837ebad977028fa108bab57"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "69e414b78d3b6c7703037e339ec1a84b",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 702646,
            "upload_time": "2024-02-24T14:26:29",
            "upload_time_iso_8601": "2024-02-24T14:26:29.774221Z",
            "url": "https://files.pythonhosted.org/packages/3a/09/b4719d92025aa61e62939429c2b09493b986cfcf9c554c30e939ba47ef19/similari_trackers_rs-0.26.10-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b32eb5c3655126a2da4ac18387b7c9528e949a149d21bb98a7f79ad85861d239",
                "md5": "7b0866885ae441e8b452a57b9697771e",
                "sha256": "3b39b9af208eb8a843c336c0088c34aff52cd16742ec7cda02c5be73d383e1ed"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp310-cp310-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "7b0866885ae441e8b452a57b9697771e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1599302,
            "upload_time": "2024-02-24T14:41:29",
            "upload_time_iso_8601": "2024-02-24T14:41:29.583821Z",
            "url": "https://files.pythonhosted.org/packages/b3/2e/b5c3655126a2da4ac18387b7c9528e949a149d21bb98a7f79ad85861d239/similari_trackers_rs-0.26.10-cp310-cp310-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2155caf98e09f67db046110339621d84d5b017c5d29d5ce69b86e58f57b74807",
                "md5": "26da0d4ae6c7a592e2b0b46bec63a9d3",
                "sha256": "1c83d42e48d810c78e4acdfb20c1c6d4f5a832f92e5f8e159b48de24ad710401"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp310-cp310-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "26da0d4ae6c7a592e2b0b46bec63a9d3",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 1601657,
            "upload_time": "2024-02-24T14:31:27",
            "upload_time_iso_8601": "2024-02-24T14:31:27.618446Z",
            "url": "https://files.pythonhosted.org/packages/21/55/caf98e09f67db046110339621d84d5b017c5d29d5ce69b86e58f57b74807/similari_trackers_rs-0.26.10-cp310-cp310-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bb6c737167e02d18fd70a7adca2a769af5743725aace3b938521aed2bb1ff9a5",
                "md5": "c42fb18ff66db81a25c56567901e21d0",
                "sha256": "66f1077893fa97fe8a9c5c9364d8d3e1db38a94b673d0c21279f303c7cd40293"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp310-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c42fb18ff66db81a25c56567901e21d0",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 582476,
            "upload_time": "2024-02-24T14:29:48",
            "upload_time_iso_8601": "2024-02-24T14:29:48.793504Z",
            "url": "https://files.pythonhosted.org/packages/bb/6c/737167e02d18fd70a7adca2a769af5743725aace3b938521aed2bb1ff9a5/similari_trackers_rs-0.26.10-cp310-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2d5dd79ce3ebb9c8ff7cb70d6d6d59c8c0f8a289bf8530f0ce7700f65e4cf805",
                "md5": "377a06a1a760b3e8c09548a3298c121e",
                "sha256": "42e88e579a0496aca4eeafa30d0051573a9166f8de22c15ad342058c4c3a12e5"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp311-cp311-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "377a06a1a760b3e8c09548a3298c121e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 726093,
            "upload_time": "2024-02-24T14:29:28",
            "upload_time_iso_8601": "2024-02-24T14:29:28.792024Z",
            "url": "https://files.pythonhosted.org/packages/2d/5d/d79ce3ebb9c8ff7cb70d6d6d59c8c0f8a289bf8530f0ce7700f65e4cf805/similari_trackers_rs-0.26.10-cp311-cp311-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4dc3f9b3423063b5b77197b9036d64dc7a8bf462a24f5d28695cacab9b3ce16d",
                "md5": "1e1a2b722c8fc02f1d486c1e9a68b44b",
                "sha256": "cb9300da29bc0483f64f6e4e89a462f2f671b50e58215b1e6d77f53e380eb3b0"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "1e1a2b722c8fc02f1d486c1e9a68b44b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 702700,
            "upload_time": "2024-02-24T14:25:57",
            "upload_time_iso_8601": "2024-02-24T14:25:57.555700Z",
            "url": "https://files.pythonhosted.org/packages/4d/c3/f9b3423063b5b77197b9036d64dc7a8bf462a24f5d28695cacab9b3ce16d/similari_trackers_rs-0.26.10-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f83ebecd731b99e7728520bb437d0b7bde9beb95fad54f6411bbe80e4470bcce",
                "md5": "05d5b40f173954302b75c48cdc8fdd4f",
                "sha256": "fcaa7c8bb93ca8bbb2cb68ade0f746480e7abfbb0f12d1f0bfa30546108bb67b"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp311-cp311-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "05d5b40f173954302b75c48cdc8fdd4f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1599340,
            "upload_time": "2024-02-24T14:41:33",
            "upload_time_iso_8601": "2024-02-24T14:41:33.262350Z",
            "url": "https://files.pythonhosted.org/packages/f8/3e/becd731b99e7728520bb437d0b7bde9beb95fad54f6411bbe80e4470bcce/similari_trackers_rs-0.26.10-cp311-cp311-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "af1e5d9605678d7e2ec7182d87436bb83d7692ddf3cc3d056e85e4ab6ebcf718",
                "md5": "c4fa662c44b2a8c187c8f9a26802bcb5",
                "sha256": "2ec20150f542c5aa5930f04f5525ec85444dcdb68accfd28bf82d9e0df1f7c7d"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp311-cp311-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c4fa662c44b2a8c187c8f9a26802bcb5",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 1601917,
            "upload_time": "2024-02-24T14:31:31",
            "upload_time_iso_8601": "2024-02-24T14:31:31.784012Z",
            "url": "https://files.pythonhosted.org/packages/af/1e/5d9605678d7e2ec7182d87436bb83d7692ddf3cc3d056e85e4ab6ebcf718/similari_trackers_rs-0.26.10-cp311-cp311-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "69ffcacd634be5d03ad64cc39f40bacdc2d947da54548337e78cb15f9ee3209a",
                "md5": "73484da050515fca59d0697cedb4e7fe",
                "sha256": "9a30992e9683670f63cd8b412e15b9133d329e9f0b18956ddd39ba35cd528eed"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp311-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "73484da050515fca59d0697cedb4e7fe",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 582486,
            "upload_time": "2024-02-24T14:29:51",
            "upload_time_iso_8601": "2024-02-24T14:29:51.129494Z",
            "url": "https://files.pythonhosted.org/packages/69/ff/cacd634be5d03ad64cc39f40bacdc2d947da54548337e78cb15f9ee3209a/similari_trackers_rs-0.26.10-cp311-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c429b3a368dd3312ddd244d29cdde641bb63ebcee3774c7d3cfa593b5ee993a1",
                "md5": "3b5f0405ab692e6da274f4fcca24e321",
                "sha256": "bbc4a9164a90b23a54df9303643072437359e34633f22368c66f4661a4f6d13e"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp312-cp312-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3b5f0405ab692e6da274f4fcca24e321",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 726043,
            "upload_time": "2024-02-24T14:29:30",
            "upload_time_iso_8601": "2024-02-24T14:29:30.582300Z",
            "url": "https://files.pythonhosted.org/packages/c4/29/b3a368dd3312ddd244d29cdde641bb63ebcee3774c7d3cfa593b5ee993a1/similari_trackers_rs-0.26.10-cp312-cp312-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3412a4e63d888fc608d04c09ad96b8c33d56546ef3acefbe39c749b6d22ffaf5",
                "md5": "fd8b9c218692e8207003bbd1daa39136",
                "sha256": "1af3c580a2c4cc76fb1aad7fa8fd7255467caf6f9cd6a83a773bff0dd4c9e50b"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "fd8b9c218692e8207003bbd1daa39136",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 703648,
            "upload_time": "2024-02-24T14:26:00",
            "upload_time_iso_8601": "2024-02-24T14:26:00.055009Z",
            "url": "https://files.pythonhosted.org/packages/34/12/a4e63d888fc608d04c09ad96b8c33d56546ef3acefbe39c749b6d22ffaf5/similari_trackers_rs-0.26.10-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "59f0a2d3ed3d28a39e95854e30bc7a8483d2c086713a434572e9b26bbe117e48",
                "md5": "6dc440ba6536e97d001ccacb4a752a25",
                "sha256": "160b18c2f5a9dcf751ab3c54856f07bf140b0519036f0343c6aeae7057aef5c5"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp312-cp312-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "6dc440ba6536e97d001ccacb4a752a25",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1600170,
            "upload_time": "2024-02-24T14:41:37",
            "upload_time_iso_8601": "2024-02-24T14:41:37.854870Z",
            "url": "https://files.pythonhosted.org/packages/59/f0/a2d3ed3d28a39e95854e30bc7a8483d2c086713a434572e9b26bbe117e48/similari_trackers_rs-0.26.10-cp312-cp312-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "35d91ea562392f0ea3c04f402b573a122a9a55d1aac9d5c058a97c62049656d7",
                "md5": "de0bc56c2a26df52dc55e1ecda9495dd",
                "sha256": "dfe4804f8654868ffc04d23abcb706e1a0156eb69fd42ded872632252d32be5e"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp312-cp312-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "de0bc56c2a26df52dc55e1ecda9495dd",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 1603849,
            "upload_time": "2024-02-24T14:31:35",
            "upload_time_iso_8601": "2024-02-24T14:31:35.380025Z",
            "url": "https://files.pythonhosted.org/packages/35/d9/1ea562392f0ea3c04f402b573a122a9a55d1aac9d5c058a97c62049656d7/similari_trackers_rs-0.26.10-cp312-cp312-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c144a304644871bfd8705c2da9a210f9f009cee247cbf2566ea428fcd3ba971f",
                "md5": "903d19faf58b0c72b9c33cdd6358a39d",
                "sha256": "848399512979d7d3690d36b45460ff5af00decfdf01336e7da0e7b4938e698dc"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp312-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "903d19faf58b0c72b9c33cdd6358a39d",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 583005,
            "upload_time": "2024-02-24T14:29:53",
            "upload_time_iso_8601": "2024-02-24T14:29:53.901432Z",
            "url": "https://files.pythonhosted.org/packages/c1/44/a304644871bfd8705c2da9a210f9f009cee247cbf2566ea428fcd3ba971f/similari_trackers_rs-0.26.10-cp312-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2764de7c32d65b43fefe625dc5045bd8c9b22543053b8f13b74b47db78584e85",
                "md5": "72f82a7fffd0c5df2e44f21ecc51b4c8",
                "sha256": "70a973ef9a7d810019da8784c944f3c12d246dd59f532521835f6f6feddf6a3c"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp38-cp38-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "72f82a7fffd0c5df2e44f21ecc51b4c8",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 726238,
            "upload_time": "2024-02-24T14:31:35",
            "upload_time_iso_8601": "2024-02-24T14:31:35.143334Z",
            "url": "https://files.pythonhosted.org/packages/27/64/de7c32d65b43fefe625dc5045bd8c9b22543053b8f13b74b47db78584e85/similari_trackers_rs-0.26.10-cp38-cp38-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5da65ff1c302d13f622a24d48fba67c1e3e630a74d2377b8c14911d09bb3113e",
                "md5": "9cef7333e46adcb8d06a5d4cd328c870",
                "sha256": "ab3d884dbd2ea6b5f75d21e4aef6bec9e8bc1d7bddc6059854ab124a9f62879f"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "9cef7333e46adcb8d06a5d4cd328c870",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 707382,
            "upload_time": "2024-02-24T14:27:36",
            "upload_time_iso_8601": "2024-02-24T14:27:36.884851Z",
            "url": "https://files.pythonhosted.org/packages/5d/a6/5ff1c302d13f622a24d48fba67c1e3e630a74d2377b8c14911d09bb3113e/similari_trackers_rs-0.26.10-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "15294973d496349fa72899cabf442f5d2a0573e6aa3c7dd9ba22608aa66800c4",
                "md5": "29040aadde6fdddbfa22050385dd2ea4",
                "sha256": "e44598e41c5f3ffb7f08366dec2542c81695a74e5df81632f205c3816b452e82"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp38-cp38-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "29040aadde6fdddbfa22050385dd2ea4",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1599477,
            "upload_time": "2024-02-24T14:41:42",
            "upload_time_iso_8601": "2024-02-24T14:41:42.889668Z",
            "url": "https://files.pythonhosted.org/packages/15/29/4973d496349fa72899cabf442f5d2a0573e6aa3c7dd9ba22608aa66800c4/similari_trackers_rs-0.26.10-cp38-cp38-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9d274c657b5b9fa8c16e7b63e471044b802a7fbda754e196602bd11a57bb0e27",
                "md5": "9fac514d9386f4218c4f131fef11ab89",
                "sha256": "0b52496444225c68eedb41a2d2aeebc2603997b0f3d23bd47a62f6fc8d8754a2"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp38-cp38-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9fac514d9386f4218c4f131fef11ab89",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 1601907,
            "upload_time": "2024-02-24T14:31:39",
            "upload_time_iso_8601": "2024-02-24T14:31:39.646760Z",
            "url": "https://files.pythonhosted.org/packages/9d/27/4c657b5b9fa8c16e7b63e471044b802a7fbda754e196602bd11a57bb0e27/similari_trackers_rs-0.26.10-cp38-cp38-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "dfd8be443e4b62a3bc98a14899c4d0cd4f5418315f5984fab090436c2890a08b",
                "md5": "7ffb62c1631eb7151640cd8c463ade01",
                "sha256": "32d3a54388f63c8fc61c41ccac2fdac51592e6815bb75b19289ea48d27cabf0d"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp38-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "7ffb62c1631eb7151640cd8c463ade01",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 582418,
            "upload_time": "2024-02-24T14:29:56",
            "upload_time_iso_8601": "2024-02-24T14:29:56.351463Z",
            "url": "https://files.pythonhosted.org/packages/df/d8/be443e4b62a3bc98a14899c4d0cd4f5418315f5984fab090436c2890a08b/similari_trackers_rs-0.26.10-cp38-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "eeb00dc05be075cdae7aa429af8d1870c7e014d0149cb003a45b3212e69d7836",
                "md5": "1347bca08fdad7bce902f5c3f3b420c3",
                "sha256": "ca70f3d2512fb9b5d62ce4220adfd972e736d07d4087674b009e297d60d48fb5"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp39-cp39-macosx_10_12_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1347bca08fdad7bce902f5c3f3b420c3",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 726391,
            "upload_time": "2024-02-24T14:33:36",
            "upload_time_iso_8601": "2024-02-24T14:33:36.957426Z",
            "url": "https://files.pythonhosted.org/packages/ee/b0/0dc05be075cdae7aa429af8d1870c7e014d0149cb003a45b3212e69d7836/similari_trackers_rs-0.26.10-cp39-cp39-macosx_10_12_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "34117511a1b2002af35fa98cfa01562c408c836fb1b9ac6214d06e5ad88e6ff9",
                "md5": "47d57f8cd89e0f7738e4bbd7fe157ff8",
                "sha256": "2c64b1b7495b6abb5e72673d91a13ceb82b063fb1e3263f0c7be36f9ef6abb07"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "47d57f8cd89e0f7738e4bbd7fe157ff8",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 702488,
            "upload_time": "2024-02-24T14:30:25",
            "upload_time_iso_8601": "2024-02-24T14:30:25.239168Z",
            "url": "https://files.pythonhosted.org/packages/34/11/7511a1b2002af35fa98cfa01562c408c836fb1b9ac6214d06e5ad88e6ff9/similari_trackers_rs-0.26.10-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8bce4ebde9b400e1cb5c575051d4e4714cfdf4eddaf52f4d8ce149e1a3b9ec0e",
                "md5": "0e3acf41d435c3cd185837d813756e48",
                "sha256": "19be448f85a2a85183453388807dd61657fb48f83cfd8cf66e2b7f5ff781ddfa"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp39-cp39-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "0e3acf41d435c3cd185837d813756e48",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1599564,
            "upload_time": "2024-02-24T14:41:47",
            "upload_time_iso_8601": "2024-02-24T14:41:47.560003Z",
            "url": "https://files.pythonhosted.org/packages/8b/ce/4ebde9b400e1cb5c575051d4e4714cfdf4eddaf52f4d8ce149e1a3b9ec0e/similari_trackers_rs-0.26.10-cp39-cp39-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d8fec819ee856eee1b8c71449f4259deb20688ac984003c5436668c4d316d33e",
                "md5": "ccd8affa3be53c52e67f73b9d5757e51",
                "sha256": "fb2dab02d285f7633344579eba91c3768465d798f06383c0c2930da763f98155"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp39-cp39-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ccd8affa3be53c52e67f73b9d5757e51",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 1602043,
            "upload_time": "2024-02-24T14:31:42",
            "upload_time_iso_8601": "2024-02-24T14:31:42.804813Z",
            "url": "https://files.pythonhosted.org/packages/d8/fe/c819ee856eee1b8c71449f4259deb20688ac984003c5436668c4d316d33e/similari_trackers_rs-0.26.10-cp39-cp39-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0c16c5e10bc4c4c10a3942a5310ec14db2e7f77887425ccfcb258562421e51cb",
                "md5": "6c23b52bd8bfb13a5634010649b69ae7",
                "sha256": "b525ab3c07d5a683a879950c7fbbf160d7e8e022a14f95cdae296393c62b9516"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-cp39-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "6c23b52bd8bfb13a5634010649b69ae7",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 582837,
            "upload_time": "2024-02-24T14:29:58",
            "upload_time_iso_8601": "2024-02-24T14:29:58.699133Z",
            "url": "https://files.pythonhosted.org/packages/0c/16/c5e10bc4c4c10a3942a5310ec14db2e7f77887425ccfcb258562421e51cb/similari_trackers_rs-0.26.10-cp39-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2b4a6525b6d32a4b28e0f720e9e8fce178e11f50beb2caa976b285cd2f05e12b",
                "md5": "80af815352deabb31396f1235b78dc22",
                "sha256": "d6e26f4092c36309e776a382449b70c3ba5ee2385f53228d445c9b0be8325b8d"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "80af815352deabb31396f1235b78dc22",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.8",
            "size": 1599711,
            "upload_time": "2024-02-24T14:41:50",
            "upload_time_iso_8601": "2024-02-24T14:41:50.825345Z",
            "url": "https://files.pythonhosted.org/packages/2b/4a/6525b6d32a4b28e0f720e9e8fce178e11f50beb2caa976b285cd2f05e12b/similari_trackers_rs-0.26.10-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "11647bef13525830e70c0246567f38e8a5ee0d8d75248244a949468094d9b455",
                "md5": "58b0973b3cd9e086fee077276e86f845",
                "sha256": "a9d1e40cee72247aaa8b2201605fbd9f69208b8393595bcb3b377c2f2e5304c5"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "58b0973b3cd9e086fee077276e86f845",
            "packagetype": "bdist_wheel",
            "python_version": "pp310",
            "requires_python": ">=3.8",
            "size": 1601523,
            "upload_time": "2024-02-24T14:31:46",
            "upload_time_iso_8601": "2024-02-24T14:31:46.038334Z",
            "url": "https://files.pythonhosted.org/packages/11/64/7bef13525830e70c0246567f38e8a5ee0d8d75248244a949468094d9b455/similari_trackers_rs-0.26.10-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c80f4cb1a47d16f971ebc55b3ec85cc7bafa4850a67a5b5dd9266542a5191bfa",
                "md5": "61e580ba85e13685b46aaafa12e8da47",
                "sha256": "47503306105a2355fc4babae51d9d6bc9cbb6cc2c881d7c3fc0805b7c51d4461"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "61e580ba85e13685b46aaafa12e8da47",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.8",
            "size": 1599561,
            "upload_time": "2024-02-24T14:41:53",
            "upload_time_iso_8601": "2024-02-24T14:41:53.337521Z",
            "url": "https://files.pythonhosted.org/packages/c8/0f/4cb1a47d16f971ebc55b3ec85cc7bafa4850a67a5b5dd9266542a5191bfa/similari_trackers_rs-0.26.10-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "81683e7d3edcb52abb4119a259d1d4949315295be2819cdce673e3808f57fd79",
                "md5": "4b019302c6ced6a1d5871d3424c26098",
                "sha256": "73660b9cd3b4b07e515538d33f5d5529078c44664a9cde179523a6853877c8e9"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4b019302c6ced6a1d5871d3424c26098",
            "packagetype": "bdist_wheel",
            "python_version": "pp38",
            "requires_python": ">=3.8",
            "size": 1601381,
            "upload_time": "2024-02-24T14:31:50",
            "upload_time_iso_8601": "2024-02-24T14:31:50.129350Z",
            "url": "https://files.pythonhosted.org/packages/81/68/3e7d3edcb52abb4119a259d1d4949315295be2819cdce673e3808f57fd79/similari_trackers_rs-0.26.10-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ee1aa7b86b1110a5645513ac86b53193ebb31e3261dad3e68a29d27a7a1b98e1",
                "md5": "caafaf915a5ebe52dcabde3cbfdc22b4",
                "sha256": "dfcb7c55f03688209c361f3beedb472396894ec70349e63b066009a8af36d408"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl",
            "has_sig": false,
            "md5_digest": "caafaf915a5ebe52dcabde3cbfdc22b4",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.8",
            "size": 1599677,
            "upload_time": "2024-02-24T14:41:58",
            "upload_time_iso_8601": "2024-02-24T14:41:58.407060Z",
            "url": "https://files.pythonhosted.org/packages/ee/1a/a7b86b1110a5645513ac86b53193ebb31e3261dad3e68a29d27a7a1b98e1/similari_trackers_rs-0.26.10-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8875a6d204afc7698187ece06fa35c095b4bab3927664d8b44616e44cabcc9d2",
                "md5": "cca05b7a537ae485d6c083290e2ce30f",
                "sha256": "02d2ca8d468a12eb62d89a58bc43669da25c10ddef9f75afb09fa0cf0dfd477c"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "cca05b7a537ae485d6c083290e2ce30f",
            "packagetype": "bdist_wheel",
            "python_version": "pp39",
            "requires_python": ">=3.8",
            "size": 1601470,
            "upload_time": "2024-02-24T14:31:53",
            "upload_time_iso_8601": "2024-02-24T14:31:53.256332Z",
            "url": "https://files.pythonhosted.org/packages/88/75/a6d204afc7698187ece06fa35c095b4bab3927664d8b44616e44cabcc9d2/similari_trackers_rs-0.26.10-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0b6973abb6b6383b0fe56399ce086a557de87000b4bd539702928b9f4c19b1e7",
                "md5": "d8709440603c33b363ad348f1ca39c70",
                "sha256": "a5d3dce6288d9e2cf95b27d4b52c2d67dc272d858a7c71cd236bb4023dfb1252"
            },
            "downloads": -1,
            "filename": "similari_trackers_rs-0.26.10.tar.gz",
            "has_sig": false,
            "md5_digest": "d8709440603c33b363ad348f1ca39c70",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 172436,
            "upload_time": "2024-02-24T14:24:28",
            "upload_time_iso_8601": "2024-02-24T14:24:28.887829Z",
            "url": "https://files.pythonhosted.org/packages/0b/69/73abb6b6383b0fe56399ce086a557de87000b4bd539702928b9f4c19b1e7/similari_trackers_rs-0.26.10.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-24 14:24:28",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "insight-platform",
    "github_project": "Similari",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "similari-trackers-rs"
}
        
Elapsed time: 0.23024s