Skip to main content

cvflair

PyPI CI Python 3.10+ Downloads License: MIT

Türkçe sürüm: README.tr.md. Ayrıntılı belgeler Türkçe.

A thin layer that draws computer vision detections on screen in three lines, with themes that already look finished.

The camera loop, the themes and the drawing are one package with no dependencies beyond numpy and opencv. It is model-agnostic: anything that produces boxes -- YOLO, MediaPipe, InsightFace, your own model -- is drawn by the same theme.

cvflair demo

The same detections, four themes. Produced by tools/make_demo_gif.py: boxes drawn over docs/city.png. Use --background <path> for another image.

Nine box styles, five ready themes, hand, pose and face skeletons -- all from one Theme(...) line. Try them without installing anything: theme playground → Boxes and skeletons have separate preview modes; change the settings, copy the generated Python. The page runs entirely in the browser.

box styles

There is also drawing that sits on top of the box: a lock-on pulse and the trail a tracked object leaves behind.

pulse and trace

Install

Python 3.10 or newer.

pip install cvflair

For YOLO, the Ultralytics extra (licence note at the bottom):

pip install "cvflair[yolo]"

Quick start

No code needed -- the package ships a command:

cvflair 0 --theme neon --model yolov8n.pt

It reads a camera, a video file, an image or a folder of images. A look tuned in the playground travels as a file: --theme theme.json.

The same thing from Python:

from cvflair import Camera

cam = Camera(source=0, theme="neon")
for frame in cam.stream():
    cam.show(frame)

The camera opens, frames are read on their own thread, and the window closes on q or ESC -- no release() call, no while True.

That loop shows bare frames: a theme draws only when there is something to draw. Attach a model and every step becomes a (frame, detections) pair with the theme applied for you:

cam = Camera(source=0, theme="hud")
for frame, detections in cam.stream(model="yolov8n.pt"):
    cam.show(frame, detections)

Instead of model you can pass your own function returning Detections -- that is what keeps the library model-agnostic.

Hand, pose and face skeletons are drawn beside the boxes; the points come from your model as well:

from cvflair import HAND_21, KeyPoints

cam.show(frame, keypoints=KeyPoints(xy=hand_points), skeleton=HAND_21)

skeletons

Face detectors fit the same way: FACE_5 connects the five points they agree on -- eyes, nose, mouth corners. The ones reporting (x, y, w, h) instead of two corners, like OpenCV cascades and MediaPipe, go through Detections.from_xywh(...) and Detections.from_mediapipe(...).

In Jupyter or Colab, where cv2.imshow has no window to draw on:

import cvflair

theme.annotate(frame, detections)
cvflair.notebook.show(frame)

Documentation

The detailed docs are in Turkish; this page and the playground are bilingual.

Themes and box styles Five themes, nine styles, pulse and trace, accent colour, palettes, stats panel, writing your own theme
Command line and video writing The cvflair command, sources and options, VideoWriter
Key points and skeletons Hand, pose and face skeletons, KeyPoints, shipped topologies, MediaPipe, your own layout
Models and detections stream(model=...), your own detector, Detections, xywh and MediaPipe boxes, Ultralytics settings, video files
API summary and internals The whole public surface, thread and queue behaviour, measured performance
Example gallery Ten working examples; which need a camera and which do not
Contributing Setup, scope boundaries, how to add a theme

Three of them need no camera at all:

python examples/theme_preview.py          # writes a PNG per theme
python examples/video_file.py input.mp4   # annotates a file into a copy
python examples/image_folder.py photos/   # annotates a folder of images

With a camera, examples/motion_detection.py gives real detections without a neural network -- background subtraction only, nothing to download.

Why it is built this way

  • The queue holds one frame. A new frame replaces the waiting one, so lag does not pile up when processing slows down and the screen always shows the newest frame. drop_frames=False reverses this for video files, where every frame counts.
  • Drawing objects are built once and reused on every frame.
  • The dependency surface is deliberately narrow. import cvflair takes about 0.3 s; the install is around 170 MB, nearly all of it opencv and numpy.
  • Models stay outside the package. No weights and no model code are bundled.

Measured numbers and the reasoning behind them: API and internals.

Development

git clone https://github.com/kbycode/cvflair.git
cd cvflair
pip install -e ".[dev]"

pytest              # no camera required
ruff check .
mypy                # the package ships py.typed, so the claim is checked

Details and the contribution flow: CONTRIBUTING.md

Licence

MIT -- see LICENSE. Both dependencies are permissively licensed (opencv-python Apache 2.0, numpy BSD).

No YOLO weights and no Ultralytics code are bundled here. If you use Ultralytics, meeting its AGPL-3.0 terms is the responsibility of the project that uses it.

Download files

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

Source Distribution

cvflair-0.14.0.tar.gz (101.2 kB view details)

Uploaded Source

Built Distribution

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

cvflair-0.14.0-py3-none-any.whl (48.1 kB view details)

Uploaded Python 3

File details

Details for the file cvflair-0.14.0.tar.gz.

File metadata

  • Download URL: cvflair-0.14.0.tar.gz
  • Upload date:
  • Size: 101.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cvflair-0.14.0.tar.gz
Algorithm Hash digest
SHA256 4dac1425018ec89200d7d529b0fd9bbcd91a7e7f5462fa7a9d9106d13ed8d5f4
MD5 1bc7a7b8f4e5556b2c757b943fb5ffe6
BLAKE2b-256 7a56a8ae0429a4557f478203094b54977ffa43296ef004d8dc25013bdda74d07

See more details on using hashes here.

Provenance

The following attestation bundles were made for cvflair-0.14.0.tar.gz:

Publisher: release.yml on kbycode/cvflair

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

File details

Details for the file cvflair-0.14.0-py3-none-any.whl.

File metadata

  • Download URL: cvflair-0.14.0-py3-none-any.whl
  • Upload date:
  • Size: 48.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cvflair-0.14.0-py3-none-any.whl
Algorithm Hash digest
SHA256 232e056973958ee396852aa5864461815b469653195de18f5fab98cb05430207
MD5 6f6e83b6f9752d9eb662d88d7b4bfae5
BLAKE2b-256 e456e5133a06edf79efcf432c922bde00dd50160c23be9a17477805cfc436bcf

See more details on using hashes here.

Provenance

The following attestation bundles were made for cvflair-0.14.0-py3-none-any.whl:

Publisher: release.yml on kbycode/cvflair

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

Supported by

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