Face detection/recognition: - Replace YuNet + SFace with InsightFace buffalo_l (RetinaFace + ArcFace) - 512-d ArcFace embeddings (was 128-d SFace), migration 0006 resizes column - Remove YOLO person-bbox workaround — RetinaFace is accurate enough - Detection threshold 0.65 cleanly separates real faces (0.72+) from false positives on dogs/paintings (0.56-0.61) Content-type classification: - CLIP zero-shot classifier using native PyTorch text encoder + ONNX image encoder for high-quality text-image similarity - Categories: photograph, screenshot, document, receipt, meme, artwork - Writes Tag(kind=content_type) per photo via photo_tags - Margin-based confidence: top-1 vs top-2 score difference - New ClassifierSettings in config (enabled, min_confidence) - Wired into vision_fanout pipeline Tested: 6 real faces from 4 photos (zero false positives), 11/13 photos classified (8 photograph, 2 artwork, 1 meme). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
"""
|
|
Celery configuration and app initialization
|
|
"""
|
|
from celery import Celery
|
|
from app.config import settings
|
|
|
|
# Create Celery app
|
|
celery_app = Celery(
|
|
'mulita',
|
|
broker=settings.celery_broker_url,
|
|
backend=settings.celery_result_backend,
|
|
include=['app.tasks.scan', 'app.tasks.thumbs', 'app.tasks.vision']
|
|
)
|
|
|
|
# Configure Celery
|
|
celery_app.conf.update(
|
|
task_serializer='json',
|
|
accept_content=['json'],
|
|
result_serializer='json',
|
|
timezone='UTC',
|
|
enable_utc=True,
|
|
task_routes={
|
|
'app.tasks.thumbs.*': {'queue': 'high'},
|
|
'app.tasks.scan.*': {'queue': 'low'},
|
|
'app.tasks.vision.*': {'queue': 'vision'},
|
|
'embed_photo': {'queue': 'vision'},
|
|
'ocr_photo': {'queue': 'vision'},
|
|
'detect_objects': {'queue': 'vision'},
|
|
'extract_faces': {'queue': 'vision'},
|
|
'classify_content': {'queue': 'vision'},
|
|
'vision_fanout': {'queue': 'vision'},
|
|
},
|
|
task_default_queue='default',
|
|
task_default_exchange='default',
|
|
task_default_exchange_type='direct',
|
|
task_default_routing_key='default',
|
|
broker_connection_retry_on_startup=True,
|
|
) |