Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
460fa8b
after 1 successful runs
kovalp Aug 18, 2025
2d877d0
+license, +1 cli
kovalp Aug 18, 2025
d205b27
+ urls
kovalp Aug 18, 2025
a24e18b
-setup.cfg
kovalp Aug 18, 2025
e60b343
+up
kovalp Aug 18, 2025
fbc17a1
+
kovalp Aug 18, 2025
0e71965
+2 lines in gitignore
kovalp Aug 18, 2025
7a6bb26
Create python-package.yml
kovalp Aug 20, 2025
1fa8d8a
+
kovalp Aug 20, 2025
529c008
Merge pull request #1 from kovalp/edit-actions
kovalp Aug 20, 2025
d7e796b
+ bump-my-version and its config
kovalp Aug 20, 2025
accbb33
Bump version: 0.1.0 → 0.1.1
kovalp Aug 20, 2025
b968cf5
Merge pull request #2 from kovalp/add-bump-my-version-config
kovalp Aug 20, 2025
93762fe
done
kovalp Aug 20, 2025
73e0309
Bump version: 0.1.1 → 0.1.2
kovalp Aug 20, 2025
bce15f2
just python 3.9 in github actions
kovalp Aug 20, 2025
507ea77
Merge pull request #3 from kovalp/reorder-authors-in-pyproject-toml
kovalp Aug 20, 2025
e55e6aa
add unknown email
kovalp Aug 20, 2025
638b4d1
Bump version: 0.1.2 → 0.1.3
kovalp Aug 20, 2025
9dcea04
+maintainers
kovalp Aug 20, 2025
6582a33
Bump version: 0.1.3 → 0.1.4
kovalp Aug 20, 2025
984ecd6
Merge pull request #4 from kovalp/reorder-authors-in-pyproject-toml
kovalp Aug 20, 2025
b2954c9
py38
kovalp Aug 20, 2025
a8bf893
+
kovalp Aug 20, 2025
5954740
Merge pull request #5 from kovalp/try-other-py
kovalp Aug 20, 2025
1ebb9c9
Bump version: 0.1.4 → 0.1.5
kovalp Aug 20, 2025
691d526
Merge pull request #6 from kovalp/try-other-py
kovalp Aug 20, 2025
1557c3f
+1 unit test, keep one original unit test
kovalp Aug 21, 2025
6b30685
Merge pull request #8 from kovalp/add-viable-unit-test
kovalp Aug 21, 2025
33379d8
extend
kovalp Aug 21, 2025
8f006d8
+ 3.10
kovalp Aug 21, 2025
f11c945
try all in actions
kovalp Aug 21, 2025
a749d87
Bump version: 0.1.5 → 1.0.0
kovalp Aug 21, 2025
61b9e73
rename in actions
kovalp Aug 21, 2025
b30af71
+3.11
kovalp Aug 21, 2025
f0a4b97
+3.11 in readme
kovalp Aug 21, 2025
c01dc77
Merge pull request #9 from kovalp/run-py310
kovalp Aug 21, 2025
d79c3fd
extend deps
kovalp Aug 21, 2025
cc467bc
relax
kovalp Aug 21, 2025
0994821
+ maintainers readme
kovalp Aug 21, 2025
6d3940c
+ py versions in github actions
kovalp Aug 21, 2025
060282d
Bump version: 1.0.0 → 1.0.1
kovalp Aug 21, 2025
4d72b4b
Edit readem
kovalp Aug 21, 2025
63d2b74
Edit readmes
kovalp Aug 21, 2025
a4237cb
Merge pull request #10 from kovalp/fine-tune-dependencies
kovalp Aug 21, 2025
cf7ea11
+ caution
kovalp Aug 21, 2025
fc2fc26
try check
kovalp Aug 21, 2025
508dc50
+
kovalp Aug 21, 2025
ad3e806
Bump version: 1.0.1 → 1.1.0
kovalp Aug 21, 2025
62e155d
+ bump-my-version for 3.8
kovalp Aug 21, 2025
54f936b
Merge pull request #12 from kovalp/reformat-caution
kovalp Aug 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .bumpversion.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
[tool.bumpversion]
current_version = "1.1.0"
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
serialize = ["{major}.{minor}.{patch}"]
search = "{current_version}"
replace = "{new_version}"
regex = false
ignore_missing_version = false
ignore_missing_files = false
tag = false
sign_tags = false
tag_name = "{new_version}"
tag_message = "Bump version: {current_version} → {new_version}"
allow_dirty = false
commit = true
message = "Bump version: {current_version} → {new_version}"
moveable_tags = []
commit_args = "--no-verify"
setup_hooks = []
pre_commit_hooks = ["uv lock", "git add uv.lock"]
post_commit_hooks = []

[[tool.bumpversion.files]]
filename = "pyproject.toml"
search = "version = \"{current_version}\""
replace = "version = \"{new_version}\""

[[tool.bumpversion.files]]
filename = "trackeval/__init__.py"
search = "__version__ = '{current_version}'"
replace = "__version__ = '{new_version}'"

13 changes: 13 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
[run]
omit = tests/*
source = trackeval/

[report]
show_missing = true
skip_empty = true
skip_covered = true
sort = Miss


ignore_errors = True

31 changes: 31 additions & 0 deletions .github/workflows/unittest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python

name: unittest

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]

jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: unittest
run: |
python -m pip install --upgrade pip
python -m pip install uv
uv sync
uv run pytest --cov -vs
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,7 @@ output/*
data
!goutput/Readme.md
**/__pycache__
.idea
error_log.txt
/trackeval.egg-info/
/.python-version
/.coverage
17 changes: 17 additions & 0 deletions Readme.md → README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,23 @@

This codebase provides code for a number of different tracking evaluation metrics (including the [HOTA metrics](https://link.springer.com/article/10.1007/s11263-020-01375-2)), as well as supporting running all of these metrics on a number of different tracking benchmarks. Plus plotting of results and other things one may want to do for tracking evaluation.

## **NEW**: Using the uv package manager

We recommend using the `uv` package manager for installing the dependencies.
The installation procedure would go similar to the plan below

- Install a version of Python interpreter `Python>=3.8`
- any minor version should do;
- `3.13` should be faster and less buggy, but it is difficult to guarantee without unit tests;
- `>3.13` causes compilation of some dependencies and fails, but may work in the future.
- Install the `uv` package manager. Note that `uv` is available only for `Python>=3.8`.
- Run `uv sync` to install the dependencies and the package (in editable mode).

```shell
pip install uv
uv sync
```

## **NEW**: RobMOTS Challenge 2021

Call for submission to our [RobMOTS Challenge](https://eval.vision.rwth-aachen.de/rvsu-workshop21/?page_id=110) (Robust Multi-Object Tracking and Segmentation) held in conjunction with our [RVSU CVPR'21 Workshop](https://eval.vision.rwth-aachen.de/rvsu-workshop21/). Robust tracking evaluation against 8 tracking benchmarks. Challenge submission deadline June 15th. Also check out our workshop [call for papers](https://eval.vision.rwth-aachen.de/rvsu-workshop21/?page_id=74).
Expand Down
49 changes: 49 additions & 0 deletions maintainers/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Development install

```shell
uv sync
```

## Add dependencies

Regular or development dependencies are added as following
```shell
uv add numpy
uv add pytest --dev
```

## Run tests

```shell
uv run pytest
```

## Formatting and checking

```shell
ruff format
ruff check --fix
```

... but `ruff format` is known to break the code for Python 3.8.
So, not recommended until the unit tests are covering 100% of the code.

## Bump version number

```shell
bump-my-version bump patch
```

## Upgrading the dependencies

```shell
uv sync -U
```

## List the versions of the installed dependencies

```shell
uv tree --depth 1
```


2 changes: 0 additions & 2 deletions minimum_requirements.txt

This file was deleted.

77 changes: 72 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,73 @@
[build-system]
requires = [
"setuptools>=42",
"wheel"
[project]
name = "trackeval"
version = "1.1.0"
description = "Different tracking evaluation metrics including HOTA metrics."
readme = "README.md"
requires-python = ">=3.8,<4.0"
dependencies = [
"matplotlib>=3.7.5; python_version=='3.8'",
"numpy>=1.24.4,<2.0; python_version=='3.8'",
"pillow>=10.4.0; python_version=='3.8'",
"pycocotools>=2.0.7; python_version=='3.8'",
"scikit-image>=0.21.0; python_version=='3.8'",
"scipy>=1.10.1; python_version=='3.8'",

"matplotlib>=3.9.4; python_version=='3.9'",
"numpy>=2.0.2; python_version=='3.9'",
"pillow>=11.3.0; python_version>='3.9'",
"pycocotools>=2.0.10; python_version>='3.9'",
"scikit-image>=0.24.0; python_version=='3.9'",
"scipy>=1.13.1; python_version=='3.9'",

"matplotlib>=3.10.5; python_version>='3.10'",
"numpy>=2.2.6; python_version=='3.10'",
"scikit-image>=0.25.2; python_version>='3.10'",
"scipy>=1.15.3; python_version=='3.10'",

"numpy>=2.3.2; python_version>='3.11'",
"scipy>=1.16.1; python_version>='3.11'",

"tabulate>=0.9.0",
"opencv-python>=4.11.0.86",
]
build-backend = "setuptools.build_meta"
license = { text = "MIT" }
classifiers = [
"Programming Language :: Python :: 3",
"Operating System :: OS Independent",
"Topic :: Scientific/Engineering"
]
authors = [
{ name = "Jonathon Luiten", email = "jonoluiten@gmail.com" }
]

maintainers = [
{ name = "Arne Hoffhues", email = "unknown.email@unknownhost.com"},
{ name = "Jonathon Luiten", email = "jonoluiten@gmail.com" }
]


[project.urls]
Repository = "https://github.com/kovalp/TrackEval"
Issues = "https://github.com/kovalp/TrackEval/issues"

[dependency-groups]
dev = [
"pytest>=8.3.5; python_version=='3.8'",
"pytest-cov>=5.0.0; python_version=='3.8'",

"pytest>=8.4.1; python_version>='3.9'",
"pytest-cov>=6.2.1; python_version>='3.9'",

"bump-my-version>=1.2.1; python_version>='3.9'",
"ruff>=0.12.9",
]

[project.scripts]
trackeval-kitti = "trackeval.cli.run_kitti:main"

[tool.uv]
package = true

[tool.setuptools.packages.find]
include = ["trackeval*"]
exclude = ["data*"]
10 changes: 0 additions & 10 deletions requirements.txt

This file was deleted.

89 changes: 89 additions & 0 deletions ruff.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Exclude a variety of commonly ignored directories.
exclude = [
".bzr",
".direnv",
".eggs",
".git",
".git-rewrite",
".hg",
".ipynb_checkpoints",
".mypy_cache",
".nox",
".pants.d",
".pyenv",
".pytest_cache",
".pytype",
".ruff_cache",
".svn",
".tox",
".venv",
".vscode",
"__pypackages__",
"_build",
"buck-out",
"build",
"dist",
"node_modules",
"site-packages",
"venv",
]

# Same as Black.
line-length = 100
indent-width = 4

target-version = "py39"

[lint]
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
# Unlike Flake8, Ruff doesn't enable pycodestyle warnings (`W`) or
# McCabe complexity (`C901`) by default.
select = ["E4", "E7", "E9", "F", "I"]
ignore = []

# Allow fix for all enabled rules (when `--fix`) is provided.
fixable = ["ALL"]
unfixable = []

# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"

[lint.isort]
default-section = "third-party"
lines-after-imports = 2
split-on-trailing-comma=false
lines-between-types = 1 # This adds 1 empty line between import sections

[lint.flake8-quotes]
inline-quotes = "single"

[format]
# Like Black, use double quotes for strings.
quote-style = "single"

# Like Black, indent with spaces, rather than tabs.
indent-style = "space"

# Like Black, respect magic trailing commas.
skip-magic-trailing-comma = true

# Like Black, automatically detect the appropriate line ending.
line-ending = "auto"

# Enable auto-formatting of code examples in docstrings. Markdown,
# reStructuredText code/literal blocks and doctests are all supported.
#
# This is currently disabled by default, but it is planned for this
# to be opt-out in the future.
docstring-code-format = false

# Set the line length limit used when formatting code snippets in
# docstrings.
#
# This only has an effect when the `docstring-code-format` setting is
# enabled.
docstring-code-line-length = "dynamic"

[lint.pydocstyle]
convention = "google"

Empty file added script-tsting/__init__.py
Empty file.
8 changes: 6 additions & 2 deletions tests/test_all_quick.py → script-tsting/all_quick.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,18 @@
Only tests one tracker per dataset/split to give a quick test result.
"""

import sys
import os
import numpy as np
import sys

from multiprocessing import freeze_support

import numpy as np


sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import trackeval # noqa: E402


# Fixes multiprocessing on windows, does nothing otherwise
if __name__ == '__main__':
freeze_support()
Expand Down
8 changes: 6 additions & 2 deletions tests/test_davis.py → script-tsting/davis.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
import sys
import os
import numpy as np
import sys

from multiprocessing import freeze_support

import numpy as np


sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
import trackeval # noqa: E402


# Fixes multiprocessing on windows, does nothing otherwise
if __name__ == '__main__':
freeze_support()
Expand Down
Loading