cvflair
Bilgisayarlı görü tespitlerini üç satırda, hazır temalarla ekrana çizen ince bir katman.
Çizim işini supervision yapar; cvflair kamera
döngüsünü ve tema ayarlarını üstlenir. Model bağımsızdır: supervision'ın Detections
nesnesini üreten her kaynak (YOLO, MediaPipe, InsightFace veya özel bir model) tema
tarafından çizilebilir.
Aynı tespitler, üç tema. Animasyon tools/make_demo_gif.py ile üretildi — sentetik
sahne, kamera gerekmiyor.
Durum: Faz 1 tamam (kamera döngüsü, üç tema, testler), Faz 2 başladı (model bağlama). Paket henüz PyPI'da yayınlanmadı.
Kurulum
Python 3.10 veya üzeri gerekir (bu alt sınır supervision'dan geliyor).
git clone https://github.com/kbycode/cvflair.git
cd cvflair
pip install -e .
Yayınlandıktan sonra: pip install cvflair
YOLO ile kullanmak için Ultralytics extra'sı: pip install -e ".[yolo]"
(ayrıntı ve lisans notu için aşağıdaki Lisans bölümü).
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 | sv.Detections döndüren kendi fonksiyonun — MediaPipe, InsightFace, özel model |
Son seçenek kütüphaneyi model-agnostik yapan yer:
import supervision as sv
from cvflair import Camera
def detect(frame) -> sv.Detections:
... # kendi modelin
return sv.Detections(xyxy=..., class_id=..., confidence=...)
cam = Camera(source=0, theme="pastel")
for frame, detections in cam.stream(model=detect):
cam.show(frame, detections)
Çı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 | |
neon |
sınıf başına canlı renk, yuvarlak köşe, koyu hâle ile parlama hissi | |
pastel |
yumuşak tonlar, geniş yuvarlama, koyu etiket yazısı — atölye/projeksiyon |
Yol haritasındaki cyberpunk ve hud temaları Faz 2'de gelecek.
Özel bir tema, Theme doğrudan kurulup Camera'ya verilerek tanımlanır:
import supervision as sv
from cvflair import Camera, Theme
my_theme = Theme(
name="my-theme",
palette=sv.ColorPalette.from_hex(["#39FF14", "#FF00E5"]),
box_style="corner", # "box" | "round" | "corner"
thickness=2,
glow=True,
text_scale=0.6,
)
cam = Camera(source=0, theme=my_theme)
Temaları 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 |
UltralyticsDetector(model, **kwargs) |
Ultralytics çıktısını sv.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_droppedile sayılır). Böylece işleme yavaşladığında gecikme birikmez; ekranda hep en güncel kare olur. - Annotator'lar bir kere kurulur.
Themenesnesi oluşturulurkensupervisionannotator'ları 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. - Çizim matematiği yeniden yazılmadı. Her piksel
supervisiontarafından çiziliyor; cvflair sadece yapılandırma ve akış katmanı. - 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 (stream(model=...)) |
tamam |
| Faz 2 | PyPI paketi, Türkçe dokümantasyon sitesi, tema playground, cyberpunk/hud |
sırada |
| Faz 3 | GitHub Actions (lint + test), issue şablonları, örnek galerisi | planlandı |
Lisans
MIT — bkz. LICENSE. Bağımlılıkların hepsi izin verici lisanslı
(supervision MIT, 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cvflair-0.2.0.tar.gz.
File metadata
- Download URL: cvflair-0.2.0.tar.gz
- Upload date:
- Size: 26.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
441c1ba1a5270470cd504bfb6389daa4412bf3d45c2aa6432af003cf3323eef7
|
|
| MD5 |
785feb9677cfe95b24ba8822b8b20456
|
|
| BLAKE2b-256 |
ac0747e8426318e16f5492ac453582bc7f58f2698a77139c65fb200700548362
|
File details
Details for the file cvflair-0.2.0-py3-none-any.whl.
File metadata
- Download URL: cvflair-0.2.0-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a9f027a53af24640ec9820d218adf41f2f013f22be53a0f60d4a9d6fc303c76
|
|
| MD5 |
0472c5ce521f6ecdc4c26877a2a50620
|
|
| BLAKE2b-256 |
84eea635b499fd75422a1a46aa13cecdc7f2337cb43890ee6391c35953e3158d
|