Skip to main content

cvflair

PyPI CI Python 3.10+ İndirme License: MIT

Bilgisayarlı görü tespitlerini üç satırda, hazır temalarla ekrana çizen ince bir katman.

Kamera döngüsü, temalar ve çizim tek pakette; numpy ve opencv dışında bağımlılığı yok. Model bağımsızdır: kutu üreten her kaynak (YOLO, MediaPipe, InsightFace veya özel bir model) aynı temayla çizilir.

cvflair demo

Aynı tespitler, dört tema. tools/make_demo_gif.py ile üretildi: docs/city.png üzerine çizilen kutular. Başka bir görsel için --background <yol>.

Sekiz çerçeve biçimi, dört hazır tema — hepsi tek Theme(...) satırıyla. Hiçbirini kurmadan denemek için: tema playground → Ayarları oynat, hazır Python kodunu kopyala; sayfa tamamen tarayıcıda çalışır.

çerçeve biçimleri

Durum: kamera döngüsü, dört tema, sekiz çerçeve biçimi ve model bağlama hazır. PyPI'da: cvflair.

Kurulum

Python 3.10 veya üzeri gerekir.

pip install cvflair

YOLO ile kullanmak için Ultralytics extra'sı — ayrıntı ve lisans notu için aşağıdaki Lisans bölümü:

pip install "cvflair[yolo]"

Depodan geliştirme kurulumu:

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

Hızlı başlangıç

from cvflair import Camera

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

Kamera açılır, kareler ayrı bir thread'de okunur, pencere q veya ESC ile kapanır — release() çağırmaya, while True kurmaya gerek yok.

Model verilmeyen bu akışta ekranda ham kare görünür: tema ancak ortada tespit varken çizim yapar. Temayı modelsiz, canlı görmek için: python examples/demo_fake_detections.py — kamera görüntüsü üzerine hareketli sahte kutular çizer ve temaları 3 saniyede bir değiştirir.

Modelle kullanım

stream()'e bir model verildiğinde her adım (kare, tespitler) çifti döndürür ve tema otomatik uygulanır:

from cvflair import Camera

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

model üç şeyden biri olabilir:

Değer Anlamı
"yolov8n.pt" (ağırlık yolu) Ultralytics ile yüklenir — cvflair[yolo] gerekir
Hazır bir Ultralytics modeli YOLO(...) nesnesi doğrudan verilebilir, çıktısı dönüştürülür
Herhangi bir çağrılabilir Kutu döndüren herhangi bir fonksiyon — MediaPipe, InsightFace, özel model

Son seçenek kütüphaneyi model-agnostik yapan yer:

from cvflair import Camera, Detections

def detect(frame) -> Detections:
    ...  # özel model çağrısı
    return Detections(xyxy=[[10, 20, 120, 260]], class_id=[0], names=["kisi"])

cam = Camera(source=0, theme="pastel")
for frame, detections in cam.stream(model=detect):
    cam.show(frame, detections)

Elde supervision varsa onun Detections nesnesi de doğrudan verilebilir; cvflair alan adlarına göre okur, dönüştürme gerekmez.

Çıkarım bu döngüde çalışır, okuma thread'inde değil: bir kare işlenirken okuyucu kuyruktaki kareyi tazelemeye devam eder, dolayısıyla bir sonraki tur birikmiş kareyle değil en güncel kareyle başlar.

Ultralytics'e ek ayar geçirmek için UltralyticsDetector doğrudan kullanılabilir:

from cvflair import Camera, UltralyticsDetector
from ultralytics import YOLO

detector = UltralyticsDetector(YOLO("yolov8n.pt"), conf=0.4, device="cpu", classes=[0])
cam = Camera(source=0, theme="neon")
for frame, detections in cam.stream(model=detector):
    cam.show(frame, detections)

Etiket metni doğrudan da verilebilir: cam.show(frame, detections, labels=[...]). Pencere yönetimi uygulamaya aitse cam.annotate(frame, detections) yalnızca çizim yapar.

Temalar

Tema Görünüm
minimal ince beyaz çerçeve, sade etiket — ekran kaydı ve profesyonel demo için minimal
neon sınıf başına canlı renk, yuvarlak köşe, koyu hâle ile parlama hissi neon
pastel yumuşak tonlar, geniş yuvarlama, koyu etiket yazısı — atölye/projeksiyon pastel
cyberpunk ince çerçeve + kalın beyaz köşeler, yüksek kontrast — hedef kilitleme görünümü cyberpunk

Çerçeve biçimleri

Görselleri yukarıda. box_style sekiz değerden birini alır:

Değer Görünüm Ayarları
box düz dikdörtgen thickness
round yuvarlak köşeli dikdörtgen roundness
corner yalnızca köşe çentikleri corner_length
dashed kesikli çerçeve dash_length, gap_length
dashed_corner kesikli çerçevenin üstüne dolu köşe ayraçları (kesikli + köşe karışımı) corner_length, dash_length, gap_length
bracket yuvarlak dirsekli köşe ayracı (köşe + yuvarlak karışımı) corner_length, roundness
crosshair kenar ortası çentikleri + merkez artısı arm_length, center_size
target ince çerçeve + kalın köşeler corner_length, edge_thickness

Hepsi cvflair.annotators içinde, OpenCV çizim çağrılarıyla tanımlıdır; renk paleti ve ColorLookup davranışı sekizinde de aynıdır.

dashed_corner, bracket, crosshair ve target ikinci bir renk kabul eder; köşe ayraçları, dirsekler ve merkez artısı o renge geçer — hibrit biçimlerin iki katmanı böyle ayrışır:

theme = Theme(
    palette=["#00F0FF"],
    accent_palette="#FF206E",
    box_style="target",
    thickness=3,
)

Yol haritasındaki hud teması (FPS/skor paneli) Faz 3'te gelecek.

Özel bir tema, Theme doğrudan kurulup Camera'ya verilerek tanımlanır:

from cvflair import Camera, Theme

my_theme = Theme(
    name="my-theme",
    palette=["#39FF14", "#FF00E5"],
    box_style="corner",     # bkz. Çerçeve biçimleri
    thickness=2,
    glow=True,
    text_scale=0.6,
)
cam = Camera(source=0, theme=my_theme)

Ayarları tarayıcıda deneyip hazır Theme(...) kodunu kopyalamak için: tema playground — kurulum gerektirmez, tamamen istemci tarafında çalışır, ayarlar bağlantıda taşınır.

Temaları yerelde görmenin iki yolu:

python examples/demo_fake_detections.py   # canlı kamera + hareketli sahte tespitler
python examples/theme_preview.py          # kamerasız, her temayı bir PNG'ye çizer

API özeti

Üye Ne yapar
Camera(source, theme, width, height, fps, window_name, capture_factory) Kaynağı ve temayı bağlar; kamerayı henüz açmaz
cam.start() / cam.close() Cihazı açar ve okuma thread'ini başlatır / her şeyi bırakır
cam.stream(timeout, model=None) Kareleri üretir; model verilirse (kare, tespitler) çifti. İlk kullanımda start(), bitince close() eder
cam.read(timeout) En güncel tek kareyi döndürür, kaynak bittiyse None
cam.show(frame, detections, labels) Temayı uygular, pencerede gösterir; çıkış istendiğinde False döner
cam.annotate(frame, detections, labels) Sadece çizer, pencere açmaz
cam.theme Okunur/yazılır; cam.theme = "minimal" çalışır
cam.frames_read / cam.frames_dropped Okunan ve tüketici yetişemediği için atılan kare sayısı
get_theme(ad) / available_themes() Tema adını çözer / mevcut adları listeler
Detections(xyxy, class_id, confidence, names, tracker_id) Kutu taşıyıcısı; from_ultralytics ve from_arrays yardımcılarıyla
UltralyticsDetector(model, **kwargs) Ultralytics çıktısını Detections'a çevirir; conf, iou, device gibi ayarları taşır
resolve_detector(model) Ağırlık yolu / model / çağrılabilir → detektör; stream() bunu kullanır

Camera bağlam yöneticisi olarak da kullanılabilir: with Camera() as cam: ...

Nasıl çalışıyor

  • Kareler ayrı thread'de okunur. Okuyucu, tüketiciyi beklemez.
  • Kuyruk tek slotlu. Yeni kare gelince bekleyen eski kare düşürülür (frames_dropped ile sayılır). Böylece işleme yavaşladığında gecikme birikmez; ekranda hep en güncel kare olur.
  • Annotator'lar bir kere kurulur. Theme nesnesi oluşturulurken çizim nesneleri hazırlanır ve her karede yeniden kullanılır — döngü içinde annotator kurmak bu tür işlerde en sık görülen gereksiz maliyettir.
  • Bağımlılık yüzeyi kasten dar. Yalnızca numpy ve opencv. import cvflair ~0.3 saniye sürüyor; kurulum ~170 MB (neredeyse tamamı opencv + numpy).
  • Model paketin dışında. stream(model=...) verilen şeyi bir çağrılabilire çevirir; ağırlıklar ilk yinelemede yüklenir. Hiçbir model kodu veya ağırlığı pakete gömülü değil.

Geliştirme

python -m venv .venv
.venv\Scripts\activate
pip install -e ".[dev]"
pytest
ruff check .

Testler kamera gerektirmez: Camera'ya capture_factory üzerinden sahte bir VideoCapture verilir, temalar da sentetik kareler üzerinde doğrulanır.

Dokümantasyon görselleri de kamerasız üretilir:

python tools/make_demo_gif.py    # docs/demo.gif
python examples/theme_preview.py # examples/output/theme-*.png

Yol haritası

Faz İçerik Durum
Faz 1 Kamera döngüsü, minimal/neon/pastel temaları, README, demo GIF, testler tamam
Faz 2 Model bağlama, PyPI paketi, tema playground tamam
Faz 2 Türkçe dokümantasyon sitesi, cyberpunk/hud temaları sırada
Faz 3 GitHub Actions (lint + test), issue şablonları, örnek galerisi planlandı

Lisans

MIT — bkz. LICENSE. Bağımlılıkların ikisi de izin verici lisanslı (opencv-python Apache 2.0, numpy BSD).

YOLO ağırlıkları veya Ultralytics kodu bu pakete gömülü değildir; Ultralytics'in kullanılması hâlinde AGPL-3.0 koşulları onu kullanan projenin sorumluluğundadır.

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.4.0.tar.gz (42.8 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.4.0-py3-none-any.whl (23.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: cvflair-0.4.0.tar.gz
  • Upload date:
  • Size: 42.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.2

File hashes

Hashes for cvflair-0.4.0.tar.gz
Algorithm Hash digest
SHA256 ee786d3644b7b576aba4cab234bb8c2b44d8f86c708ff0d1d63f3c19b4aa5da2
MD5 f36fadb982352ef4ede677f18db326fc
BLAKE2b-256 aede7e1cde34b28687235dc1f16d806796cced67ee52da5b4b5dd577674e11c5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: cvflair-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 23.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.2

File hashes

Hashes for cvflair-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1305bd87c01ced0d55ec30954dabd3069b091c82fa7a5f0e5d2f66f49714111b
MD5 e515f678b266731a14562a96b65b0a1c
BLAKE2b-256 bd80ef2cee3257330984984d5f8e3161843eb459c9b032deb7a4dffa344fe7b0

See more details on using hashes here.

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