Reserved placeholder for pyw-vision (vision utilities)
Project description
pyw-vision ๐๏ธ
Computer vision utilities & helpers per l'ecosistema pythonWoods.
Overview
pyw-vision fornisce utilities e helpers per computer vision, con focus su semplicitร d'uso e performance. Parte dell'ecosistema pythonWoods, si integra perfettamente con gli altri moduli per soluzioni complete di image processing e analisi visiva.
Features
๐ผ๏ธ Image Processing
- Resize & Transform: Ridimensionamento intelligente con aspect ratio
- Filters & Effects: Blur, sharpen, brightness, contrast
- Format Conversion: Supporto multi-formato (JPEG, PNG, WebP, TIFF)
- Batch Processing: Elaborazione efficiente di grosse quantitร di immagini
๐ฏ Object Detection
- YOLO Integration: Supporto per YOLOv5/v8 con model caching
- Custom Models: Caricamento di modelli personalizzati
- Bounding Boxes: Utilities per gestione e rendering bbox
- Confidence Filtering: Filtri automatici per detection quality
๐ Feature Extraction
- Keypoints Detection: SIFT, ORB, Harris corners
- Descriptors: Feature matching e similarity
- Template Matching: Ricerca pattern in immagini
- Contour Analysis: Shape detection e analysis
๐ Analysis Tools
- Image Metrics: Histogram, statistics, quality metrics
- Comparison: SSIM, MSE, perceptual difference
- Color Analysis: Palette extraction, dominant colors
- Geometric: Perspective correction, distortion removal
Installation
# Base installation
pip install pyw-vision
# Con supporto deep learning (YOLOv8, PyTorch)
pip install pyw-vision[ml]
# Computer vision completo (include motion detection)
pip install pyw-cv # Bundle: pyw-vision + pyw-motion
Quick Start
Basic Image Processing
from pyw.vision import Image, ImageProcessor
# Carica e processa immagine
img = Image.from_file("photo.jpg")
# Chain processing
processed = (img
.resize(width=800, keep_aspect=True)
.enhance_contrast(1.2)
.apply_blur(radius=2)
.convert_format("webp")
)
processed.save("output.webp", quality=85)
Object Detection
from pyw.vision import ObjectDetector
# Setup detector con model caching automatico
detector = ObjectDetector.yolo_v8(model_size="medium")
# Detection su singola immagine
results = detector.detect("image.jpg", confidence=0.5)
for detection in results:
print(f"Object: {detection.class_name} ({detection.confidence:.2f})")
print(f"Bbox: {detection.bbox}")
# Batch detection
batch_results = detector.detect_batch([
"img1.jpg", "img2.jpg", "img3.jpg"
], max_workers=4)
Feature Matching
from pyw.vision import FeatureExtractor, FeatureMatcher
# Estrai features da due immagini
extractor = FeatureExtractor.sift(n_features=1000)
features1 = extractor.extract("template.jpg")
features2 = extractor.extract("scene.jpg")
# Match features
matcher = FeatureMatcher(algorithm="flann")
matches = matcher.match(features1, features2)
# Trova homography
homography = matcher.find_homography(matches, min_matches=10)
if homography is not None:
print("Template found in scene!")
Advanced Usage
Custom Image Pipeline
from pyw.vision import ImagePipeline, filters
# Definisci pipeline custom
pipeline = ImagePipeline([
filters.NormalizeLighting(),
filters.RemoveNoise(method="bilateral"),
filters.EnhanceSharpness(factor=1.5),
filters.ColorBalance(auto=True)
])
# Applica a singola immagine
result = pipeline.process("noisy_image.jpg")
# Batch processing con progress
results = pipeline.process_batch(
["img1.jpg", "img2.jpg", "img3.jpg"],
output_dir="processed/",
show_progress=True
)
Smart Cropping
from pyw.vision import SmartCropper
cropper = SmartCropper(
target_ratio=(16, 9),
focus_detection=True # Usa face/object detection
)
# Crop intelligente mantenendo soggetti importanti
cropped = cropper.crop("portrait.jpg")
cropped.save("cropped_16x9.jpg")
# Crop multipli per social media
variants = cropper.crop_variants("image.jpg", formats=[
("instagram_post", 1080, 1080),
("instagram_story", 1080, 1920),
("facebook_cover", 1200, 630)
])
Real-time Processing
from pyw.vision import VideoProcessor
import cv2
# Setup video processor
processor = VideoProcessor(
input_source=0, # Webcam
fps_limit=30
)
@processor.frame_handler
def process_frame(frame):
# Applica detection in real-time
detections = detector.detect(frame, confidence=0.6)
# Disegna bounding boxes
for det in detections:
frame = det.draw_on(frame, color="red", thickness=2)
return frame
# Avvia processing
processor.start()
Integration con pyw-fs
from pyw.vision import Image
from pyw.fs import FileSystem
# Usa filesystem unificato (local/S3/GCS)
fs = FileSystem.from_url("s3://my-bucket/images/")
# Processa immagini remote
for image_path in fs.glob("*.jpg"):
img = Image.from_fs(fs, image_path)
# Genera thumbnail
thumb = img.resize(width=200, keep_aspect=True)
# Salva thumbnail
thumb_path = image_path.replace(".jpg", "_thumb.jpg")
thumb.save_to_fs(fs, thumb_path)
Configuration
from pyw.vision import VisionConfig
from pyw.core import BaseConfig
class MyVisionConfig(BaseConfig):
# Model paths e caching
model_cache_dir: str = "~/.pyw/vision/models"
max_cache_size_gb: float = 5.0
# Default processing settings
default_image_quality: int = 85
max_image_dimension: int = 4096
# Performance
max_workers: int = 4
use_gpu: bool = True
memory_limit_mb: int = 2048
# Applica config globalmente
VisionConfig.set_global(MyVisionConfig())
Performance Optimization
GPU Acceleration
from pyw.vision import accelerate
# Auto-detect e configura GPU
accelerate.setup_gpu(memory_fraction=0.8)
# Check disponibilitร
if accelerate.gpu_available():
print(f"GPU: {accelerate.gpu_info()}")
# Usa GPU per batch processing
detector = ObjectDetector.yolo_v8(device="cuda")
Memory Management
from pyw.vision import memory
# Context manager per gestione memoria
with memory.limit_usage(max_mb=1024):
# Processa immagini grandi
large_img = Image.from_file("huge_image.tiff")
processed = large_img.resize(width=2000)
# Auto-cleanup di model cache
memory.cleanup_model_cache(max_age_days=7)
Profiling
from pyw.vision import profiler
# Profile performance di detection
with profiler.measure("yolo_detection") as p:
results = detector.detect_batch(image_list)
print(f"Detection took {p.elapsed:.2f}s")
print(f"Images/sec: {len(image_list) / p.elapsed:.1f}")
Quality Assurance
Image Quality Metrics
from pyw.vision import quality
# Calcola metriche qualitร
metrics = quality.analyze("image.jpg")
print(f"Sharpness: {metrics.sharpness:.2f}")
print(f"Brightness: {metrics.brightness:.2f}")
print(f"Contrast: {metrics.contrast:.2f}")
print(f"Noise level: {metrics.noise_level:.2f}")
# Compare due immagini
similarity = quality.compare("original.jpg", "processed.jpg")
print(f"SSIM: {similarity.ssim:.3f}")
print(f"PSNR: {similarity.psnr:.1f} dB")
Validation Pipeline
from pyw.vision import validation
# Valida batch di immagini
validator = validation.ImageValidator(
min_resolution=(640, 480),
max_file_size_mb=10,
allowed_formats=["jpg", "png", "webp"]
)
results = validator.validate_batch("input_dir/")
valid_images = [r.path for r in results if r.is_valid]
Testing Support
from pyw.vision.testing import (
generate_test_image, assert_image_equal,
mock_detector, benchmark_pipeline
)
def test_image_processing():
# Genera immagine test
test_img = generate_test_image(
width=800, height=600,
pattern="checkerboard",
noise_level=0.1
)
# Processa
result = processor.enhance(test_img)
# Assertions
assert_image_equal(result, expected_result, tolerance=0.05)
assert result.width == 800
assert result.height == 600
# Mock detector per testing
with mock_detector(fake_detections=[
{"class": "person", "confidence": 0.9, "bbox": [10, 10, 100, 200]}
]) as detector:
results = detector.detect("test.jpg")
assert len(results) == 1
CLI Tools
# Resize batch di immagini
pyw-vision resize input/*.jpg --width=800 --output=resized/
# Object detection con preview
pyw-vision detect image.jpg --model=yolov8m --show-preview
# Estrai frames da video
pyw-vision extract-frames video.mp4 --fps=1 --output=frames/
# Genera report qualitร
pyw-vision quality-report images/ --format=html --output=report.html
# Benchmark performance
pyw-vision benchmark --model=yolov8s --images=test_set/ --iterations=10
Examples
Automated Photo Enhancement
from pyw.vision import PhotoEnhancer
# Setup enhancer con AI
enhancer = PhotoEnhancer(
auto_exposure=True,
noise_reduction=True,
color_enhancement=True,
face_aware=True # Ottimizza per ritratti
)
# Enhance singola foto
enhanced = enhancer.enhance("photo.jpg")
enhanced.save("enhanced.jpg")
# Batch con settings ottimizzati per tipo
settings = {
"portrait": {"face_aware": True, "skin_smoothing": 0.3},
"landscape": {"saturation": 1.2, "clarity": 1.1},
"night": {"denoise": "aggressive", "highlight_recovery": True}
}
for photo_type, photos in photo_collections.items():
enhancer.update_settings(settings[photo_type])
for photo in photos:
enhanced = enhancer.enhance(photo)
enhanced.save(f"enhanced/{photo_type}/{photo.name}")
Security Camera Analysis
from pyw.vision import SecurityAnalyzer
from pyw.logger import get_logger
logger = get_logger("security")
# Setup analyzer
analyzer = SecurityAnalyzer(
person_detection=True,
vehicle_detection=True,
intrusion_zones=["front_door", "parking"],
alert_confidence=0.7
)
# Analizza frame camera
frame = capture_camera_frame()
events = analyzer.analyze(frame, timestamp=datetime.now())
for event in events:
if event.type == "person_detected":
logger.warning(f"Person detected in {event.zone}")
# Invia alert
elif event.type == "vehicle_detected":
logger.info(f"Vehicle detected: {event.details}")
Roadmap
- ๐ค AI Models: Integrazione con modelli Hugging Face, ONNX runtime
- ๐ฅ Video Processing: Advanced video analysis, object tracking
- ๐ฑ Mobile Optimization: Lightweight models per deployment mobile
- โ๏ธ Cloud Integration: Processing su AWS Rekognition, Google Vision API
- ๐ง Custom Training: Tools per training di modelli personalizzati
- ๐ Analytics: Dashboard e reporting avanzati
- ๐ Edge Computing: Ottimizzazioni per Raspberry Pi, edge devices
Architecture
pyw-vision/
โโโ pyw/
โ โโโ vision/
โ โโโ __init__.py # Public API
โ โโโ core/
โ โ โโโ image.py # Image class e processing base
โ โ โโโ detector.py # Object detection
โ โ โโโ features.py # Feature extraction
โ โ โโโ pipeline.py # Processing pipelines
โ โโโ models/
โ โ โโโ yolo.py # YOLO integration
โ โ โโโ opencv.py # OpenCV models
โ โ โโโ custom.py # Custom model loading
โ โโโ filters/
โ โ โโโ enhance.py # Enhancement filters
โ โ โโโ artistic.py # Artistic effects
โ โ โโโ repair.py # Image repair
โ โโโ utils/
โ โ โโโ metrics.py # Quality metrics
โ โ โโโ geometry.py # Geometric operations
โ โ โโโ color.py # Color space operations
โ โโโ cli/ # Command line tools
โโโ tests/ # Test suite completa
Contributing
- Fork & Clone:
git clone https://github.com/pythonWoods/pyw-vision.git - Development setup:
poetry install --with dev && poetry shell - Install test dependencies:
poetry install --extras "ml" - Quality checks:
ruff check . && mypy && pytest --cov - Test con immagini reali: Usa il dataset in
tests/fixtures/ - Documentation: Aggiorna examples per nuove features
- Performance: Benchmark changes con
pytest --benchmark-only - Pull Request: Include esempi e test coverage
Esplora il mondo della computer vision con pythonWoods! ๐ฒ๐๏ธ
Links utili
Documentazione dev (work-in-progress) โ https://pythonwoods.dev/docs/pyw-vision/latest/
Issue tracker โ https://github.com/pythonWoods/pyw-vision/issues
Changelog โ https://github.com/pythonWoods/pyw-vision/releases
ยฉ pythonWoods โ MIT License
Project details
Release history Release notifications | RSS feed
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 pyw_vision-0.0.0.post2.tar.gz.
File metadata
- Download URL: pyw_vision-0.0.0.post2.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a6aec29ac3cfc8d34c309198c44680c2324d75e7755912a7f7d41ace04e0dc8
|
|
| MD5 |
885441314e47c8c0dda3bf329f1605eb
|
|
| BLAKE2b-256 |
469ebc957f27ff0eaf73aeec6f39c2115bbfbc85ccf11c3a560b8d7f5f7113dc
|
File details
Details for the file pyw_vision-0.0.0.post2-py3-none-any.whl.
File metadata
- Download URL: pyw_vision-0.0.0.post2-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
706a314c9efec706132700772138ffb0d0b33f63c827787a800208985a23f971
|
|
| MD5 |
2f81df3025dcdc3309488c3a0838d69b
|
|
| BLAKE2b-256 |
5c1aefee1914cd609f41ea9dfbb05aec1e9f9e469f00ee870850182703525bf0
|