Skip to main content

orena-focus

Tests PyPI Python License: MIT MICCAI 2026

HeiCo-FOCUS dataset

License: CC BY-NC-SA 4.0 Dataset

LapChole-FOCUS dataset

License: Data Usage Agreement Dataset


Python utilities for the FOCUS datasets and challengeForeign Object Contextual Understanding for Surgery.

The library provides dataset loaders, preprocessing pipelines, answer-format handling, and an evaluation framework for working with the FOCUS surgical VQA datasets. It can be used independently for research on foreign-object understanding in minimally invasive surgery, and also serves as the official toolkit for the ORena SAVE FOCUS challenge at MICCAI 2026.

Challenge open for registration. Submit your results and compete on the leaderboard at orena-focus-challenge.org.

Clinical use case

Retained foreign objects are a life-threatening and preventable surgical complication. FOCUS benchmarks vision-language models on clinically relevant VQA tasks around detecting, counting, and reasoning about foreign objects in endoscopic video.

Tracks

FOCUS offers three participation tracks, each requiring a different type of visual context:

Track Track enum Visual input Max latency Description
FRAME Track.FRAME Single frame 5 s Answer questions from one extracted video frame. The simplest entry point — no temporal modelling required.
SEGMENT Track.SEGMENT <= 5min clip 15 s Answer questions from a multi-second video segment surrounding the relevant event. Requires understanding of motion and temporal context.
PROCEDURE Track.PROCEDURE Up to full video 30 s Answer questions that may require reasoning over an entire surgical procedure, including events that happened well before or after the queried moment.

Participants may enter any subset of tracks. Each track is evaluated independently with the same hierarchical capability taxonomy.

Installation

pip install orena-focus

Quick start

from focus import FocusDataset, DatasetSplit, Track

ds = FocusDataset("heico", DatasetSplit.TEST, Track.SEGMENT)

request, reference = ds[0]
print(request.question)        # "How many sponges are visible?"
print(reference.answer)        # "2"
print(reference.format.type)   # "number"

Data preparation

Download, preprocess, and split the dataset in one script — see examples/data_preparation.py for the full walkthrough.

from focus import download
from focus.preprocessing import VideoTimestampOverlayPreprocessor, FrameExtractorPreprocessor

download("heico")

VideoTimestampOverlayPreprocessor().process(dataset="heico")
FrameExtractorPreprocessor(stride=1).process(dataset="heico")

QA annotations are fetched automatically from HuggingFace when you construct a FocusDataset.

Inference & evaluation

See examples/inference.py for an end-to-end example with Qwen3-VL.

from focus import Evaluator, Response

responses = [Response(qID=req.qID, content=my_model(req)) for req, _ in ds]

results_df, summary_df = Evaluator().run(
    requests=ds.requests,
    references=ds.references,
    responses=responses,
)
print(summary_df)

Pre-evaluation score

The pre-evaluation phase uses a single headline number: the unweighted mean over ten buckets — the five capability groups, each scored independently for in-distribution and out-of-distribution questions (flat per-question accuracy within each bucket). Missing and timed-out answers count as incorrect. It is reported as the level="pre_evaluation", name="SCORE" row of summary_df, and can also be computed directly:

score, buckets_df = Evaluator().pre_evaluation_score(results_df)

Capability taxonomy

Five capability groups, each composed of leaf capabilities assigned to questions.

SAVE FOCUS capability taxonomy with example questions

Answer formats

Format Accepts Returns
Binary "yes" / "no" bool
Number Non-negative integer strings int
Percentage Numeric percentage strings float
FOClass One or more registered FO class names (comma-separated) frozenset[str]
OpenEnded Free text (≤ 300 chars) str
Matching Regex-validated text str
MultipleChoice One of predefined options str
Time One or more hh:mm:ss timestamps (comma-separated) tuple[timedelta, ...]

Datasets

FOCUS builds upon two datasets: HeiCo-FOCUS (30 videos) and LapChole-FOCUS (170 videos).

HeiCo-FOCUS

The QA annotations are publicly available on HuggingFace: orena-dkfz/heico-focus-vqa.

HeiCo-FOCUS is built on the HeiCo dataset. If you use this data, please cite the original publication:

Maier-Hein, L., et al. (2021). Heidelberg colorectal data set for surgical data science in the sensor operating room. https://doi.org/10.1038/s41597-021-00882-2

The HeiCo data is released under CC BY-NC-SA 4.0 — non-commercial use only, with attribution and share-alike conditions.

LapChole-FOCUS

The LapChole-FOCUS videos comprises unpublished laparoscopic cholecystectomy recordings. It is currently only available within the scope of the FOCUS-Challenge and will be publicly released after the Challenge has ended.

To access it, send a request on HuggingFace: orena-dkfz/lapchole-focus-vqa. To access and download the data you need to register yourself with HuggingFace.

Please find the data usage agreement at the dataset card or in the LICENSE file on HuggingFace.

License

The code is licensed under the permissive MIT license. The underlying data is licensed independently, see Dataset for the data licenses details.

Download files

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

Source Distribution

orena_focus-0.3.5.tar.gz (1.2 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

orena_focus-0.3.5-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

Details for the file orena_focus-0.3.5.tar.gz.

File metadata

  • Download URL: orena_focus-0.3.5.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for orena_focus-0.3.5.tar.gz
Algorithm Hash digest
SHA256 f9f4a6242ac38d8b355c32b803bd75153a41777dd06d12738a70249e6afc476c
MD5 c4a7b0c594cb77402cd7b13845740c07
BLAKE2b-256 fce095405a27567efa19796f676f0771ee6fb4d68f52c78f3174b58e285acf3c

See more details on using hashes here.

Provenance

The following attestation bundles were made for orena_focus-0.3.5.tar.gz:

Publisher: release.yml on IMSY-DKFZ/orena-focus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file orena_focus-0.3.5-py3-none-any.whl.

File metadata

  • Download URL: orena_focus-0.3.5-py3-none-any.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for orena_focus-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 1e4c1c323a89c6123eed743165710eb83732d1b05a914e8696230f7f5a367536
MD5 fac552feca632ded47da21b7b7e8947c
BLAKE2b-256 a86cb1dabca7909e641e6d5cbc688718714b7f495cd1a238ceed680dcfaec84f

See more details on using hashes here.

Provenance

The following attestation bundles were made for orena_focus-0.3.5-py3-none-any.whl:

Publisher: release.yml on IMSY-DKFZ/orena-focus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.3.5 This release

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page