Torna al catalogo
Season 33 20 Episodi 1h 19m 2026

OpenCV: Computer Vision Deep Dive

v4.x — Edizione 2026. Un viaggio completo nel mondo della computer vision con OpenCV. Dalle operazioni fondamentali sulle matrici e l'elaborazione classica delle immagini fino all'avanguardia del deep learning, alle architetture YOLO e all'Agentic AI.

Visione Artificiale Elaborazione delle Immagini Deep Learning per la Scienza
OpenCV: Computer Vision Deep Dive
In Riproduzione
Click play to start
0:00
0:00
1
L'anima di OpenCV: i pixel come matrici
Esploriamo il modello mentale alla base di OpenCV, in cui le immagini vengono trattate come array di dati multidimensionali. Gli ascoltatori impareranno come la manipolazione delle matrici NumPy si traduca in cambiamenti visivi sullo schermo.
3m 55s
2
Convolution Kernels: filtraggio e edge detection
Esplora la matematica del filtraggio spaziale utilizzando i kernel di convoluzione. Questo episodio analizza come lo scorrimento di una minuscola griglia numerica su un'immagine permetta di ottenere sfocatura, nitidezza e edge detection.
3m 45s
3
Tracciare i confini: contorni e geometria
Passiamo dai pixel grezzi a forme coerenti estraendo confini continui. Impara a calcolare bounding box, convex hull e proprietà geometriche direttamente dai contorni dell'immagine.
3m 29s
4
Feature Detectors: keypoint e neural matching
Scopri come gli algoritmi identificano ancore visive distinte, note come keypoint, per tracciare gli oggetti attraverso diverse prospettive. Tratteremo il neural feature matching per compiti complessi di allineamento delle immagini.
4m 23s
5
Geometria nel mondo reale: costruire uno scanner per documenti
Un episodio fondamentale che combina i concetti precedenti in una pipeline pratica. Gli ascoltatori impareranno come l'edge detection, i contorni e le perspective transform creino uno scanner per documenti funzionante.
3m 47s
6
Il lato sperimentale: opencv_contrib
Esploriamo il repository opencv_contrib, il banco di prova per gli algoritmi all'avanguardia. Scopri come i moduli sperimentali di computer vision vengono esaminati prima di entrare nella libreria core.
3m 34s
7
Il motore di inferenza: il modulo DNN di OpenCV
Un'introduzione al modulo Deep Neural Network (DNN). Vedremo come OpenCV aggiri i pesanti framework di ML per eseguire forward pass ultra-veloci su modelli IA pre-addestrati.
4m 05s
8
La stirpe di YOLO: object detection veloce
Ripercorriamo l'evoluzione dell'architettura You Only Look Once (YOLO). Gli ascoltatori comprenderanno il cambio di paradigma architetturale che ha reso possibile la previsione dei bounding box in tempo reale.
3m 34s
9
YOLOv26: detection end-to-end NMS-Free
Un'analisi approfondita dell'innovativa architettura YOLOv26. Scopri come l'eliminazione della Non-Maximum Suppression (NMS) e l'integrazione dell'ottimizzatore MuSGD creino deployment edge a latenza ultra-bassa.
4m 02s
10
YOLO-World: zero-shot detection open vocabulary
Liberati dalle categorie fisse e predefinite. Questo episodio illustra come YOLO-World utilizzi il mapping Vision-Language per rilevare oggetti completamente nuovi senza alcun addestramento aggiuntivo del modello.
3m 47s
11
Dal classico al deep: l'evoluzione della facial recognition
Ripercorri la storia della facial recognition dai primi metodi statistici come PCA ed Eigenfaces ai moderni modelli di embedding basati sul deep learning. Comprendi come i vettori definiscano l'identità.
3m 46s
12
Percezione persistente: algoritmi di object tracking
Rilevare un oggetto è solo metà dell'opera; tracciarne il movimento nel tempo è la vera sfida. Scopri gli algoritmi di multi-object tracking e l'assegnazione degli ID attraverso i frame video.
4m 09s
13
Vision-Language Models per la segmentazione
Esploriamo come i Vision-Language Models (VLM) stiano spingendo i confini oltre i bounding box, consentendo una segmentazione semantica pixel-perfect basata puramente su prompt in linguaggio naturale.
4m 08s
14
Alchimia dei pixel: alpha blending e color spaces
Uno sguardo al lato matematico della fotografia computazionale. Comprendi i canali alpha, le equazioni di image blending e perché il color space HSV è superiore all'RGB per la logica della computer vision.
3m 51s
15
Camera Calibration: gestire la lens distortion
Tutti gli obiettivi fisici delle telecamere distorcono la realtà. Impara a calcolare le matrici intrinseche della telecamera e i coefficienti di distorsione radiale per 'raddrizzare' matematicamente il mondo per una robotica accurata.
4m 22s
16
Stereo Vision: trovare la profondità con due telecamere
Confrontando i lievi spostamenti visivi tra due obiettivi, possiamo calcolare le distanze fisiche esatte. Questo episodio tratta la geometria epipolare e le disparity maps.
4m 02s
17
Deep Monocular Metric Depth
Esploriamo come le moderne reti neurali profonde abbiano imparato a dedurre una profondità metrica 3D altamente accurata da immagini 2D completamente piatte a obiettivo singolo, infrangendo la regola tradizionale della stereo vision.
4m 04s
18
IA sull'Edge: deployment su microcontrollori
I modelli non vengono sempre eseguiti su enormi GPU in cloud. Scopri come la quantization, la conversione INT8 e l'architecture pruning consentano a modelli di visione complessi di funzionare su microcontrollori IoT a basso consumo.
4m 46s
19
Radiance Fields: 3D Gaussian Splatting
La grafica 3D tradizionale utilizza i wireframe, ma la computer vision moderna utilizza i radiance fields. Analizziamo la tecnologia all'avanguardia del 3D Gaussian Splatting per la ricostruzione fotorealistica degli ambienti.
3m 55s
20
Il loop Vision-Action: Agentic AI
Nel finale della nostra serie, diamo un'occhiata alla destinazione finale della computer vision: l'Agentic AI. Scopri come la percezione visiva viene integrata con i modelli di azione per creare lavoratori digitali autonomi.
3m 41s

Episodi

1

L'anima di OpenCV: i pixel come matrici

3m 55s

Esploriamo il modello mentale alla base di OpenCV, in cui le immagini vengono trattate come array di dati multidimensionali. Gli ascoltatori impareranno come la manipolazione delle matrici NumPy si traduca in cambiamenti visivi sullo schermo.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Deep Dive sulla Computer Vision, episodio 1 di 20. La maggior parte dei developer pensa a un'immagine come a un file compresso fermo su un hard drive. Ma nel momento in cui passi quel file a una libreria di computer vision, perde il suo formato e diventa un'enorme griglia di numeri in attesa del calcolo matriciale. Capire esattamente come sono strutturati questi numeri è l'anima di OpenCV: i pixel come matrici. Quando carichi un'immagine con OpenCV, la funzione read preleva il file dal disco e lo converte all'istante in un array NumPy multidimensionale. Questa è la parte che conta. OpenCV in Python non usa un object immagine proprietario. Si basa interamente su NumPy. Dato che un'immagine è solo un array standard, ogni operazione matematica che puoi applicare a un array può essere applicata direttamente alla tua immagine. Diamo un'occhiata alla struttura di questo array. Se carichi un'immagine a colori standard, ottieni una matrice tridimensionale. La prima dimensione è l'altezza, che rappresenta il numero di righe. La seconda dimensione è la larghezza, che rappresenta il numero di colonne. La terza dimensione contiene i canali del colore. Se hai un'immagine larga ottocento pixel e alta seicento pixel, la shape del tuo array sarà di seicento righe, ottocento colonne e tre canali. Ogni intersezione tra una riga e una colonna contiene un pixel. E per le immagini standard, ogni canale del colore all'interno di quel pixel contiene un valore intero da zero a duecentocinquantacinque, che rappresenta l'intensità di quel colore. Qui c'è una trappola molto comune. La maggior parte dei software di grafica e dei web browser rappresenta i colori nel formato Red, Green, Blue, noto come RGB. OpenCV no. Per ragioni storiche che risalgono ai primi hardware delle fotocamere, OpenCV memorizza i canali del colore in ordine inverso: Blue, Green, Red, o BGR. Se provi a visualizzare un'immagine OpenCV in un'altra libreria senza fare lo swap di questi canali, i tuoi rossi sembreranno blu e i tuoi blu sembreranno rossi. Non è un bug nel tuo codice. Ricorda solo che il valore all'index zero del canale è blu, all'index uno è verde e all'index due è rosso. Dato che le immagini sono semplicemente degli array NumPy, manipolarle si basa sulla sintassi standard di Python. Non ti servono funzioni OpenCV specializzate per fare il crop di un'immagine. Ti basta fare lo slice dell'array. Supponi di avere il feed di una telecamera di sicurezza in alta definizione, e ti interessa solo una region di cento per cento pixel dove si trova una porta. Puoi estrarre una Region of Interest, o ROI, usando il normale slicing dell'array. Specifichi la riga iniziale e la riga finale, seguite dalla colonna iniziale e dalla colonna finale. In termini matematici, fai lo slice prima sull'asse Y, poi sull'asse X. Questo restituisce all'istante un array NumPy più piccolo che contiene solo i dati dei pixel della porta. Una volta fatto lo slice del tuo array o modificato i suoi pixel, di solito vuoi salvare il risultato. OpenCV gestisce questa operazione con una semplice funzione write. Fornisci un file path di destinazione e passi il tuo array NumPy. OpenCV legge l'estensione del file che hai richiesto, come punto JPG, e gestisce in automatico la complessa compressione necessaria per trasformare di nuovo quella matrice di numeri in un file immagine standard. La singola cosa più utile che puoi fare quando impari la computer vision è smettere di pensare alle immagini come a delle tele visive, e iniziare a trattarle come sistemi di coordinate pieni di dati numerici raw. Se ti piacciono questi deep dive, puoi supportare lo show cercando DevStoriesEU su Patreon. Per questo episodio è tutto. Grazie per l'ascolto, e continua a sviluppare!
2

Convolution Kernels: filtraggio e edge detection

3m 45s

Esplora la matematica del filtraggio spaziale utilizzando i kernel di convoluzione. Questo episodio analizza come lo scorrimento di una minuscola griglia numerica su un'immagine permetta di ottenere sfocatura, nitidezza e edge detection.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 2 di 20. Applicare un filtro blur a una foto può sembrare un effetto visivo complesso, ma dal punto di vista computazionale si tratta semplicemente di sostituire ogni singolo pixel con la media matematica dei suoi vicini immediati. Il meccanismo alla base di questo processo è ciò che tratteremo oggi: Convolution Kernels: Filtering e Edge Detection. Quando senti la parola convoluzione, potresti pensare immediatamente alle Convolutional Neural Networks. Dobbiamo separare questi concetti fin da subito. In una rete di deep learning, un modello determina i valori all'interno dei suoi filtri durante un massiccio processo di training. Oggi parliamo della convoluzione bidimensionale classica. Questi kernel sono matrici matematiche fisse e hardcoded, che esistono da decenni. Non imparano. Calcolano e basta. Un kernel è semplicemente una piccola griglia di numeri. Una dimensione comune è un quadrato tre per tre. La convoluzione è il processo in cui prendi questa piccola griglia e la fai scorrere su tutta l'immagine, un pixel alla volta. Ad ogni passaggio, allinei il centro del tuo kernel con uno specifico pixel dell'immagine. Poi, moltiplichi ogni numero nel tuo kernel per il valore del pixel dell'immagine che si trova esattamente sotto di esso. Sommi tutti e nove i risultati, e quella somma finale diventa il nuovo singolo valore per il pixel centrale nella tua immagine di output. Lo fai per ogni singolo pixel. I numeri che metti dentro quella piccola griglia dettano esattamente cosa succede a tutta l'immagine. Se riempi il kernel con frazioni che sommate danno uno, ottieni un blur. Il Gaussian blur è un tipo specifico di kernel in cui il valore centrale ha il peso maggiore, e i valori diminuiscono man mano che ti sposti verso i bordi della griglia. Questo crea una media ponderata localizzata. Questa è la parte che conta. Non applichiamo il blur alle immagini per renderle artistiche. Lo applichiamo per distruggere il noise. Il sensore di una fotocamera registra minuscole fluttuazioni casuali di luce. Se provi ad analizzare la struttura rigida di un'immagine con quel noise presente, i tuoi algoritmi falliranno. Il Gaussian blur attenua il noise irregolare preservando le forme generali. Una volta sparito il noise, di solito vuoi trovare gli oggetti reali nel frame. Pensa a un sistema di telecamere progettato per leggere le targhe. Prima di poter leggere i caratteri, devi isolare la targa rettangolare dal paraurti dell'auto. Per un computer, un edge è semplicemente una transizione improvvisa da pixel scuri a pixel chiari, o viceversa. Per trovare queste transizioni nette, sostituiamo la matrice di blur con una matrice di edge detection, come il kernel di Sobel. Un kernel di Sobel verticale è progettato specificamente per trovare gli edge verticali. È una griglia tre per tre che contiene una colonna di numeri negativi a sinistra, una colonna di zeri al centro e una colonna di numeri positivi a destra. Mentre questo kernel scorre su un'area a tinta unita, come un paraurti grigio liscio, i numeri negativi e positivi si moltiplicano per lo stesso valore di grigio. Si annullano a vicenda. La somma è zero, il che si traduce in un pixel nero nell'immagine di output. Le aree a tinta unita scompaiono. Ma quando il kernel atterra proprio sul confine verticale tra quel paraurti scuro e una targa bianca e luminosa, la matematica cambia. I numeri negativi si moltiplicano per i pixel scuri, producendo un valore piccolo. I numeri positivi si moltiplicano per i pixel bianchi e luminosi, producendo un valore enorme. Non si annullano più. La somma finale è un numero positivo molto alto, che crea un pixel bianco e luminoso nella tua immagine di output esattamente dove si trova l'edge. Eseguendo questa operazione su tutta l'immagine, il paraurti svanisce nel nero, lasciando dietro di sé un netto contorno bianco della targa. Hai appena trasformato dei dati di colore raw in geometria strutturale. Il concetto fondamentale è che un kernel di convoluzione classico non è altro che una regola matematica locale applicata globalmente, che detta come ogni singolo pixel debba reagire ai suoi vicini immediati. Grazie per aver passato qualche minuto con me. Alla prossima, stammi bene.
3

Tracciare i confini: contorni e geometria

3m 29s

Passiamo dai pixel grezzi a forme coerenti estraendo confini continui. Impara a calcolare bounding box, convex hull e proprietà geometriche direttamente dai contorni dell'immagine.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 3 di 20. Hai bisogno del contorno esatto di un oggetto su un nastro trasportatore. Il tuo primo istinto potrebbe essere quello di caricare un'enorme rete neurale di semantic segmentation. Ma calcolare quel contorno usando la geometria standard è ordini di grandezza più veloce, computazionalmente più economico e non richiede una GPU. Questo è esattamente ciò che Drawing Boundaries: Contours and Geometry ti permette di fare. Un errore comune è trattare edge e contour come la stessa cosa. Sono strutture dati fondamentalmente diverse. Un edge detector ti fornisce una mappa binaria di pixel bianchi disorganizzati e disconnessi dove cambia l'intensità. Un contour è una curva matematica continua che unisce tutti i punti consecutivi lungo un confine con lo stesso colore o intensità. Gli edge sono solo punti isolati su uno schermo. I contour formano forme chiuse e misurabili. Immagina un sistema di controllo qualità in fabbrica che ispeziona un ingranaggio metallico. Hai già convertito il feed della telecamera in un'immagine binaria in bianco e nero. L'ingranaggio è completamente bianco su sfondo nero. Per ottenere il confine matematico di quell'ingranaggio, passi questa immagine alla funzione di contour finding. OpenCV lo fa scansionando l'immagine riga per riga. Quando l'algoritmo incontra un confine tra pixel bianchi e neri, lo traccia lungo quel bordo, registrando le coordinate in un array. Per risparmiare memoria, comprime l'output, memorizzando solo i punti di inizio e fine dei segmenti rettilinei anziché ogni singolo pixel. Questo processo cattura anche le relazioni spaziali. L'ingranaggio ha un bordo esterno, ma ha anche un foro al centro per l'asse. L'algoritmo dei contour costruisce una gerarchia. Registra il confine esterno come parent contour, e il foro interno come child contour. Questo ti permette di analizzare o ignorare selettivamente le forme interne in base alle tue esigenze. Ora che hai l'ingranaggio come confine connesso, puoi estrarre la sua geometria. Puoi calcolare l'area del contour. Questo è un calcolo matematico dell'area totale dei pixel all'interno della curva chiusa. Un ingranaggio fabbricato perfettamente avrà un'area specifica e nota. Se un ingranaggio ha un dente rotto, l'area del suo contour scende sotto la tua soglia accettabile. Segnali il difetto all'istante. A volte hai bisogno di capire la forma generale di un oggetto ignorando i suoi dettagli intricati. Ed è qui che diventa interessante. Puoi calcolare il convex hull di un contour. Pensa al convex hull come a un elastico teso strettamente attorno all'esterno del tuo oggetto. Per l'ingranaggio, il contour standard traccia perfettamente ogni singolo dente e avvallamento. Il convex hull ignora gli avvallamenti. Si estende in linea retta dalla punta di un dente alla punta del successivo. Confrontando il contour originale con il convex hull, identifichi le anomalie strutturali. Gli spazi vuoti tra l'elastico e il contour effettivo dell'ingranaggio sono chiamati convexity defects. Misurare questi difetti ti dice esattamente quanto sono profondi i denti dell'ingranaggio e se qualcuno è usurato, il tutto tramite puro calcolo geometrico. I contour colmano il divario tra l'image processing di basso livello e l'analisi degli oggetti di alto livello, trasformando una griglia di stupidi pixel in forme geometriche strutturate che puoi validare rigorosamente. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
4

Feature Detectors: keypoint e neural matching

4m 23s

Scopri come gli algoritmi identificano ancore visive distinte, note come keypoint, per tracciare gli oggetti attraverso diverse prospettive. Tratteremo il neural feature matching per compiti complessi di allineamento delle immagini.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 4 di 20. I visual tracker più robusti non memorizzano l'aspetto di un intero oggetto. Piuttosto, si agganciano ad angoli matematicamente distinti e gradienti ad alto contrasto che rimangono costanti indipendentemente dall'illuminazione. Ottenere questo risultato è il dominio dei Feature Detector: Keypoint e Neural Matching. Prima di esaminare i meccanismi, dobbiamo distinguere tutto questo dall'object detection. L'object detection applica ampie categorie semantiche. Disegna una bounding box e ti dice che c'è un edificio nell'inquadratura. Il feature matching è strettamente strutturale. Non sa cosa sia un edificio. Trova un'intersezione specifica e identica di due mattoni in due immagini diverse. Pensa di dover creare un'applicazione di panorama stitching. Hai due foto sovrapposte di un muro di mattoni, scattate da angoli leggermente diversi. Per fare lo stitch in modo perfetto, il software deve allineare matematicamente la sovrapposizione. Lo fa individuando feature locali distintive nella prima immagine, trovando le stesse feature nella seconda immagine e accoppiandole. Il primo passo è la detection. Il sistema scansiona l'immagine alla ricerca di keypoint. Un keypoint è una specifica posizione di un pixel che si distingue dall'ambiente circostante. Aree piatte come un cielo sereno o un muro bianco sono inutili, perché ogni pixel è esattamente identico all'altro. L'algoritmo va a caccia di texture elevate, angoli netti e linee che si intersecano. Tradizionalmente, gli algoritmi si basavano su formule matematiche hand-crafted per trovare questi contorni. Gli approcci moderni utilizzano le convolutional neural network. Dai in pasto l'immagine alla rete, e questa restituisce in output una probability map che indica quanto è probabile che un dato pixel sia un keypoint stabile. Una volta che la rete identifica un punto, come l'angolo di una specifica cornice di una finestra, ha bisogno di un modo per descriverlo. Questo è il descriptor. La rete neurale genera un vettore ad alta dimensionalità, un embedding, che cattura il pattern visivo dei pixel che circondano immediatamente quel keypoint. Un descriptor robusto rimane matematicamente simile anche se la seconda foto viene scattata su una scala diversa, ruotata o in condizioni di illuminazione differenti. Ecco l'intuizione fondamentale. Avere una lista di punti e le loro descrizioni è solo metà del puzzle. Devi ancora fare il match tra i punti della tua prima immagine e i punti della seconda. Storicamente, calcolavi semplicemente la distanza tra i vettori e sceglievi quello più vicino. Ma i pattern ripetuti, come centinaia di mattoni identici su un muro, causano gravi errori di mismatching. È qui che entrano in gioco i modelli di neural matching. Invece di valutare un singolo keypoint in isolamento, un neural matcher analizza le relazioni spaziali tra tutti i keypoint contemporaneamente. In sostanza, impara che un angolo specifico potrebbe sembrare uguale ad altri cinquanta angoli di mattoni, ma è l'unico situato esattamente tra la cornice di una finestra e una specifica ombra. Passando i descriptor e le loro posizioni geometriche attraverso dei layer di self-attention, il sistema scarta i falsi positivi e restituisce in output coppie di matching estremamente accurate. In una tipica pipeline, per prima cosa passi entrambe le immagini attraverso una rete di feature extraction. Questo restituisce due set di keypoint e due set di descriptor. Successivamente, passi entrambi i set di dati in una matching network. La matching network calcola le similarità contestuali e restituisce una lista di coppie valide, scartando i keypoint che non sono presenti in entrambi i frame. Usi quindi quelle coppie di coordinate matchate per calcolare la trasformazione geometrica necessaria per fare il warp e lo stitch perfetto delle due foto. Il passaggio da formule hand-crafted ai neural embedding significa che il feature matching ora può gestire variazioni estreme di illuminazione e punti di vista estremi che in passato mandavano completamente in tilt i vecchi algoritmi. Grazie per l'ascolto, happy coding a tutti!
5

Geometria nel mondo reale: costruire uno scanner per documenti

3m 47s

Un episodio fondamentale che combina i concetti precedenti in una pipeline pratica. Gli ascoltatori impareranno come l'edge detection, i contorni e le perspective transform creino uno scanner per documenti funzionante.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 5 di 20. Le app mobile per scansionare documenti sembrano una complessa magia dell'AI. Inquadri un foglio di carta con il telefono e all'istante si appiattisce trasformandosi in un documento digitale perfetto. Ma il core engine dietro a tutto questo non è una neural network che prevede i dettagli mancanti. È basato su un trucco matematico di quindici anni fa che coinvolge una matrice di trasformazione tre per tre. Questo episodio tratta la Real-World Geometry: costruire un document scanner. Immagina uno scontrino stropicciato sul tavolo di un ristorante. Scatti una foto da un'angolazione obliqua. A causa della prospettiva, lo scontrino appare come un trapezio distorto, circondato dalla texture del tavolo. Per estrarre il documento, il primo passo è isolarlo dal background. Converti l'immagine in grayscale e applichi un leggero blur. Questo attenua il noise nei dettagli, come le pieghe della carta o le venature del legno del tavolo, mantenendo intatti i boundaries principali. Quindi, esegui la Canny edge detection. Questo evidenzia i bruschi cambiamenti di intensità, lasciandoti con un contorno luminoso dello scontrino su un background scuro. Successivamente, devi trasformare questi edge sparsi in una forma definita. Trovi i contours nell'edge map. L'immagine conterrà molti contours, e la maggior parte di essi sono piccoli artefatti inutili. Li ordini per area, mantenendo solo quelli più grandi. Poi, iteri su questi grandi contours e approssimi la loro forma poligonale. Stai cercando uno specifico indizio strutturale. Se trovi una forma che può essere approssimata con esattamente quattro punti, hai trovato il boundary del tuo scontrino. Quei quattro punti definiscono gli angoli del tuo documento nella foto originale inclinata. Ora arriviamo al passaggio cruciale del flattening del documento. Un malinteso comune è che questo processo utilizzi l'AI per indovinare o allucinare i dati mancanti. Non è così. Una perspective transform è un puro warping matematico delle coordinate dei pixel da un piano all'altro. Per eseguire questo, hai bisogno di due set di quattro punti. Il primo set sono i quattro angoli che hai appena trovato sullo scontrino. Il secondo set rappresenta dove dovrebbero trovarsi quegli angoli nell'immagine finale perfetta. Per ottenere il secondo set, calcoli la width e la height massime dello scontrino distorto usando la formula della distanza tra i punti originali. Definisci quindi un nuovo rettangolo perfetto che parte dalle coordinate zero zero, estendendosi esattamente a quella width e height. Con questi due set di punti, calcoli una perspective transformation matrix. Questa matrice definisce esattamente di quanto ogni pixel deve spostarsi, allungarsi o comprimersi per passare dalla forma a trapezio inclinata alla forma a rettangolo piatto. Infine, applichi questa matrice all'immagine originale ad alta risoluzione. La matematica tira letteralmente i quattro angoli verso l'esterno e li raddrizza, facendo il warping di tutti i pixel interni insieme a loro. Il risultato è un'immagine bidimensionale perfettamente top-down del tuo scontrino, pronta per il processing. Ecco il punto chiave. Non hai bisogno del deep learning per correggere la prospettiva. Finché riesci a isolare quattro angoli, una semplice operazione con le matrici farà perfettamente il remap della geometria di qualsiasi superficie piatta. Grazie per l'ascolto. Spero tu abbia imparato qualcosa di nuovo.
6

Il lato sperimentale: opencv_contrib

3m 34s

Esploriamo il repository opencv_contrib, il banco di prova per gli algoritmi all'avanguardia. Scopri come i moduli sperimentali di computer vision vengono esaminati prima di entrare nella libreria core.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Deep Dive sulla Computer Vision, episodio 6 di 20. Quando un nuovo algoritmo di tracking diventa una funzione standard nella libreria principale di OpenCV, spesso ha già passato anni a essere testato sul campo dai ricercatori in uno spazio separato e parallelo. Se ti limiti solo alle release di default, ti perdi le tecniche più recenti del settore. Quello spazio parallelo è il repository opencv_contrib. Molti developer vedono la parola contrib e pensano che il codice sia rotto, non testato o che sia strettamente un software in beta. È un malinteso. Il codice in questo repository spesso è altamente ottimizzato e usato attivamente in ambienti molto esigenti. La differenza riguarda esclusivamente la stabilità dell'API, non la qualità del codice. La libreria core di OpenCV impone rigide garanzie di backward-compatibility a lungo termine. Se una funzione entra nella release principale, i suoi input, output e il suo comportamento devono rimanere stabili per anni. Ma la ricerca sulla Computer Vision si muove a una velocità impressionante. I ricercatori hanno bisogno di un posto dove pubblicare nuovi algoritmi, rinominare i parametri e modificare le data structure in base al feedback del mondo reale. Il repository opencv_contrib fornisce esattamente questo ambiente. Funziona da incubatore. I maintainer di questi moduli extra possono rompere l'API tra una release e l'altra. Possono rinominare le funzioni o cambiare il modo in cui un algoritmo si inizializza senza violare le regole rigide della libreria core. Col tempo, un modulo potrebbe rivelarsi universalmente utile. La sua API si stabilizza, gli edge case vengono risolti e la community inizia ad affidarcisi pesantemente. Quando succede, i maintainer di OpenCV migrano il codice. Spostano fisicamente il modulo fuori dal repository opencv_contrib e fanno il merge direttamente nel repository principale di OpenCV. Questo processo di promozione garantisce che la libreria core assorba solo tecnologie stabili e collaudate. Considera uno scenario concreto. Stai sviluppando un progetto di realtà aumentata e vuoi usare il modulo di tracking ArUco per rilevare marker fiduciali quadrati in un feed video in tempo reale. Questo modulo contiene funzioni altamente specializzate e all'avanguardia. Per usarlo, fai la build del tuo ambiente OpenCV dai sorgenti. Cloni il repository principale sulla tua macchina locale, e poi cloni il repository opencv_contrib proprio lì di fianco. Quando configuri il tuo build tool, passi una variabile di path specifica che punta alla cartella modules all'interno del repository contrib. Il build system legge questo flag e compila la libreria core, ma va anche a pescare nella cartella contrib, compila il modulo ArUco e lo linka direttamente nei tuoi binari finali. Non ti ritrovi con due librerie separate. Ottieni un'unica installazione unificata di OpenCV che include sia la base solidissima che i moduli sperimentali che hai scelto. Se ti piace il podcast e vuoi dare una mano a sostenerlo, puoi cercare DevStoriesEU su Patreon: è sempre molto apprezzato. La vera forza di questa architettura sta nel capire la sua duplice natura: il repository principale protegge le tue pipeline di produzione dalle breaking change, mentre il repository contrib ti consegna oggi la ricerca sulla Computer Vision di domani. Per questo episodio è tutto. Alla prossima!
7

Il motore di inferenza: il modulo DNN di OpenCV

4m 05s

Un'introduzione al modulo Deep Neural Network (DNN). Vedremo come OpenCV aggiri i pesanti framework di ML per eseguire forward pass ultra-veloci su modelli IA pre-addestrati.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 7 di 20. Puoi estrarre il cervello da un enorme server di training PyTorch, esportarlo come singolo file ed eseguirlo a velocità incredibile in puro C++ senza installare PyTorch. Quando passi dal training di un modello al suo deploy nel mondo reale, i tuoi requisiti passano dalla flessibilità alla velocità pura. È proprio qui che entra in gioco l'Inference Engine, il modulo DNN di OpenCV. Una trappola comune in cui cadono gli ingegneri è dare per scontato che se un modello è stato trainato usando TensorFlow, anche la macchina di deploy di destinazione debba avere una pesante installazione di TensorFlow per poterlo eseguire. Questo è falso. OpenCV esegue l'inference in modo completamente nativo. Il modulo DNN è un inference engine dedicato e altamente ottimizzato per il forward-pass. Non fa backpropagation. Non calcola i gradienti. Non fa il training dei modelli. Il suo unico compito è prendere una rete pre-trainata, acquisire un'immagine e darti una risposta il più velocemente possibile, al massimo delle capacità dell'hardware. OpenCV offre loader nativi per i formati di modello standard. Puoi caricare modelli Caffe, protocol buffer di TensorFlow, configurazioni Darknet e file ONNX direttamente nella tua applicazione. Ecco il punto chiave. Quando chiami una funzione come readNet, OpenCV analizza il formato del file esterno e ricostruisce il grafo della rete neurale usando le sue implementazioni interne dei layer in C++. Le dipendenze esterne vengono completamente eliminate. La tua applicazione si linka solo a OpenCV. Immagina una smart camera embedded in C++ progettata per rilevare i pedoni per strada. Non vuoi un enorme runtime Python che consumi la tua memoria limitata, e di certo non vuoi gigabyte di librerie di deep learning che occupino spazio di archiviazione su un dispositivo edge. Invece, fai il training del tuo rilevatore di pedoni su un potente cluster GPU ed esporti i pesi finali in un file ONNX. E poi carichi questo singolo file nello storage della tua telecamera. Nella tua applicazione C++, usi il modulo DNN per caricare il file ONNX. Successivamente, acquisisci un frame dal sensore della telecamera. Le reti neurali non possono elaborare direttamente le immagini raw. Devi convertire quel frame in un array strutturato quadridimensionale, comunemente chiamato blob. OpenCV fornisce una funzione dedicata per costruire questo blob, che gestisce il resize dell'immagine, lo swap dei canali colore e l'applicazione della mean subtraction o dello scaling specifici richiesti dal modello originale. Passi questo blob preparato all'input layer della rete. Quindi chiami la funzione forward. Il modulo DNN prende il controllo, spingendo i dati attraverso ogni convolutional layer, activation function e pooling layer. Dato che a questo punto OpenCV possiede l'intero execution graph, può ottimizzare i calcoli in modo aggressivo. Fonde i layer adiacenti dove possibile per ridurre la memory bandwidth e sfrutta automaticamente l'accelerazione hardware nativa. La funzione forward finisce e restituisce un array finale che contiene le coordinate dei bounding box e i confidence score per i pedoni che ha trovato. Tieni i tuoi framework pesanti in laboratorio per il training e usa il modulo DNN di OpenCV per un deploy leggero e senza dipendenze in produzione. Grazie per averci fatto compagnia. Spero tu abbia imparato qualcosa di nuovo.
8

La stirpe di YOLO: object detection veloce

3m 34s

Ripercorriamo l'evoluzione dell'architettura You Only Look Once (YOLO). Gli ascoltatori comprenderanno il cambio di paradigma architetturale che ha reso possibile la previsione dei bounding box in tempo reale.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Deep Dive sulla Computer Vision, episodio 8 di 20. Prima dell'arrivo dei sistemi moderni, gli object detector dovevano scansionare una singola immagine decine di volte a diverse scale solo per trovare un target. Era un processo incredibilmente lento e computazionalmente pesante. Poi una nuova architettura ha rivoluzionato il settore facendo tutto il lavoro in un'unica, velocissima passata matematica. Oggi vediamo la linea evolutiva di YOLO: Fast Object Detection. Per capire perché You Only Look Once, o YOLO, ha cambiato tutto, guarda allo standard precedente. Le vecchie pipeline multi-stage si basavano sulle region proposal. Generavano centinaia di ipotesi su dove potesse trovarsi un oggetto, facevano un crop di quelle aree e poi facevano girare un image classifier su ogni singola patch isolata. Facevi girare reti complesse in un loop. Era disconnesso, difficile da ottimizzare e fondamentalmente lento. Alcuni sviluppatori confondono YOLO con la image classification standard, che si limita ad assegnare una label a un'immagine intera. YOLO fa molto di più. Restituisce in output bounding box spaziali precise insieme alle class probability. Ti dice cos'è l'oggetto e dove si trova esattamente nello spazio fisico. YOLO ha ottenuto questo risultato riformulando completamente l'object detection. Invece di una pipeline multi-stage, ha trasformato la detection in un singolo problema di regressione. La logica passa direttamente dai pixel raw dell'immagine alle coordinate delle bounding box e alle class probability in un unico step continuo. Ecco l'intuizione chiave. YOLO prende l'immagine in input e la divide in una griglia uniforme. Se il centro di un oggetto cade in una specifica cella della griglia, quella cella diventa responsabile della detection dell'oggetto. Ogni cella della griglia predice simultaneamente un numero fisso di bounding box. Per ogni box, restituisce in output le coordinate del centro, la larghezza e l'altezza. Restituisce in output anche un confidence score, che dice al sistema quanto è sicuro che il box contenga effettivamente un oggetto. Contemporaneamente, la cella predice le class probability. Calcola se l'oggetto è un'auto, un camion o una persona. Il network poi moltiplica la box confidence per la class probability. Questa singola operazione matematica filtra tutte le ipotesi deboli sull'intera griglia, lasciando solo le bounding box altamente accurate. Considera una telecamera di un casello autostradale ad alta velocità. Le auto viaggiano a centotrenta chilometri all'ora. Hai bisogno di un network single-pass per disegnare le bounding box intorno alle targhe prima che l'auto esca dal frame. Un detector multi-stage avrebbe del lag, facendo crop e analizzando patch isolate di asfalto mentre l'auto sfreccia via. YOLO processa l'intero frame in una sola volta. Applica la griglia, predice la geometria e calcola le probabilità in un singolo forward pass della rete neurale. Dato che YOLO processa l'intera immagine in un'unica passata, comprende intrinsecamente il contesto globale della scena. I modelli più vecchi spesso scambiavano patch di background per oggetti perché vedevano solo crop isolati. Inquadrando la detection come un singolo problema di regressione su una griglia, YOLO forza il network a imparare rappresentazioni generalizzate degli oggetti nel loro contesto completo. Grazie per aver passato qualche minuto con me. Alla prossima, stammi bene.
9

YOLOv26: detection end-to-end NMS-Free

4m 02s

Un'analisi approfondita dell'innovativa architettura YOLOv26. Scopri come l'eliminazione della Non-Maximum Suppression (NMS) e l'integrazione dell'ottimizzatore MuSGD creino deployment edge a latenza ultra-bassa.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 9 di 20. Per un decennio, il più grande bottleneck nell'object detection in real-time non è stato la rete neurale in sé. Era l'algoritmo macchinoso e scritto a mano, utilizzato per ripulire le sue predizioni disordinate e sovrapposte. La soluzione a questo problema è YOLOv26, in particolare la sua architettura di detection end-to-end NMS-free. Per capire questo cambiamento, devi guardare come i detector tradizionali finiscono il loro lavoro. Si basano sulla Non-Maximum Suppression, o NMS. L'NMS è uno step di post-processing lento. Quando un modello standard analizza un oggetto, non predice un solo bounding box. Predice decine di box sovrapposti attorno allo stesso oggetto. L'NMS interviene per assegnare uno score a questi box, calcolare il loro overlap, eliminare i duplicati e lasciare solo il box migliore. Questo processo di pulizia è intrinsecamente sequenziale e gira quasi sempre sulla CPU. Immagina di fare il deploy di un modello di vision su un NVIDIA Jetson Orin per un robot di smistamento in un magazzino. Devi rilevare centinaia di pacchi in rapido movimento a 60 frame al secondo. La GPU sfreccia attraverso i layer della rete neurale. Poi, la pipeline va in stallo. La CPU va in crisi cercando di eseguire l'NMS su migliaia di coordinate raw di box sovrapposti. Il tuo frame rate crolla a causa della pulizia, non dell'inferenza. YOLOv26 elimina completamente questo bottleneck fornendo un'inferenza NMS-free nativa. Passi un'immagine alla rete, e la rete restituisce in output esattamente un box per oggetto. Lo script di post-processing è sparito. Per rendere ciò possibile, l'architettura di YOLOv26 elimina un componente chiamato Distribution Focal Loss, o DFL. Nelle iterazioni precedenti, la DFL veniva utilizzata per modellare i bordi di un bounding box come una distribuzione statistica continua. Aiutava il modello a intuire dove potessero trovarsi bordi sfocati o oscurati, ma naturalmente incoraggiava la rete a restituire in output più ipotesi sovrapposte. Rimuovere la DFL cambia radicalmente il comportamento della rete. Senza di essa, durante il training il modello viene pesantemente penalizzato se predice più di un box per oggetto. Questo forza la rete a essere assolutamente decisa. Tuttavia, rimuovere la DFL crea un nuovo problema. Forzare la rete a restituire in output esattamente un hard boundary rende il processo di training altamente instabile. Il loss landscape diventa ripido e caotico. Per risolvere questo problema, YOLOv26 integra l'optimizer MuSGD nella sua training pipeline. MuSGD stabilizza il processo di apprendimento regolando dinamicamente il momentum in base alla varianza dei gradienti. Quando il training incontra una parte ripida e caotica del loss landscape, MuSGD smorza gli update dei pesi in modo che il modello non deragli. Quando il percorso del gradiente è stabile, accelera. Questo specifico optimizer è ciò che permette all'architettura di convergere su una singola predizione rigorosa senza collassare. Il risultato in fase di deployment è enorme. Quando esporti un modello YOLOv26 in TensorRT per quel robot da magazzino, l'intera pipeline rimane sulla GPU. La rete elabora il frame e restituisce direttamente in output le coordinate finali del pacco. La CPU è completamente liberata per altri task di controllo del robot. Ecco il punto chiave. Il codice più veloce è quello che non viene mai eseguito. Spostando l'onere della deduplicazione da uno script di post-processing a runtime indietro alla fase di ottimizzazione del training, YOLOv26 sblocca un'efficienza hardware che prima era impossibile. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
10

YOLO-World: zero-shot detection open vocabulary

3m 47s

Liberati dalle categorie fisse e predefinite. Questo episodio illustra come YOLO-World utilizzi il mapping Vision-Language per rilevare oggetti completamente nuovi senza alcun addestramento aggiuntivo del modello.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Deep Dive sulla Computer Vision, episodio 10 di 20. I tradizionali object detector soffrono di una grave forma di visione a tunnel. Possono tracciare perfettamente auto, persone e biciclette, ma chiedigli di trovare una tazza di caffè rovesciata e sono completamente ciechi, limitati alle poche classi su cui sono stati esplicitamente addestrati in laboratorio. Per risolvere questo problema, non devi etichettare migliaia di tazze rovesciate. Ti servono YOLO-World e la Zero-Shot Detection Open-Vocabulary. Considera uno scenario specifico. Gestisci un sistema di sicurezza per un negozio. Devi cercare nei feed video live una borraccia hydroflask blu o un golden retriever smarrito. Con un detector standard a vocabolario fisso, dovresti fermare il sistema, raccogliere immagini di golden retriever nel tuo negozio, disegnare manualmente dei bounding box intorno a loro, riaddestrare il modello e fare un nuovo deploy. Con YOLO-World, ti basta digitare il prompt di testo nel sistema. Trova l'oggetto all'istante, in modalità zero-shot. Questo non è un modello generativo text-to-image. Non crea immagini. È anche profondamente diverso dal semplice aggiungere una nuova classe a un dataset esistente. La detection open-vocabulary si basa su una profonda comprensione semantica del linguaggio. Mappa direttamente i prompt di testo linguistici ai bounding box visivi. Il sistema prende due input: un'immagine e un set di prompt di testo. Usa una vision backbone per estrarre le feature visive dall'immagine. Contemporaneamente, usa un text encoder per tradurre i tuoi prompt di testo in vettori matematici, chiamati embedding. È qui che la cosa si fa interessante. Questi due flussi di dati distinti devono essere combinati. YOLO-World gestisce la cosa usando una struttura chiamata RepVL-PAN. Che sta per Reparameterizable Vision-Language Path Aggregation Network. L'acronimo è denso, ma la funzione è semplice. RepVL-PAN fonde le feature dell'immagine e del testo. Inietta il significato semantico del tuo prompt di testo direttamente nella feature map visiva a diverse scale. Mentre la rete elabora i pixel, viene guidata attivamente dal text embedding. Il modello impara a farlo durante la sua fase di training iniziale attraverso un meccanismo chiamato region-text contrastive loss. Il modello genera dei bounding box ed estrae le feature visive da quelle regioni. Poi confronta queste feature visive con i text embedding. La contrastive loss penalizza pesantemente il modello se le feature visive di un box non si allineano con il text embedding corretto. E lo premia quando corrispondono. Questo forza la rete ad allineare con precisione la sua rappresentazione visiva ai concetti linguistici su enormi dataset di coppie immagine-testo. Impara cosa significano blu, hydroflask e bottiglia come concetti generali, invece di memorizzare una singola categoria rigida. Quando esegui il modello in produzione, il workflow è incredibilmente pulito. Per prima cosa, definisci una lista di vocaboli custom contenente i tuoi oggetti target. Passi quella lista attraverso il text encoder una volta per generare i tuoi text embedding. Poi, dai in pasto i tuoi frame video live alla vision backbone. L'architettura RepVL-PAN fonde i dati visivi in ingresso con i tuoi text embedding precalcolati. Infine, il modello restituisce bounding box e confidence score basati su quanto le regioni visive corrispondono alle tue parole. Il vero potere di YOLO-World è disaccoppiare il detector da un dataset rigido, permettendoti di usare il linguaggio naturale come una query eseguibile in tempo reale per il mondo fisico. Grazie per averci seguito. Alla prossima!
11

Dal classico al deep: l'evoluzione della facial recognition

3m 46s

Ripercorri la storia della facial recognition dai primi metodi statistici come PCA ed Eigenfaces ai moderni modelli di embedding basati sul deep learning. Comprendi come i vettori definiscano l'identità.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 11 di 20. Per un'IA moderna, la tua identità non è definita dalla forma del tuo naso o dalla distanza tra i tuoi occhi. Piuttosto, la tua identità è definita dalla tua esatta posizione in uno spazio geometrico a 128 dimensioni. Classic to Deep: Facial Recognition Evolution spiega come siamo arrivati a questo modello. Innanzitutto, dobbiamo separare due concetti che spesso vengono confusi. La face detection consiste nell'individuare dove si trova un volto in un'immagine. Disegna una bounding box attorno ai pixel che sembrano una testa umana. La face recognition consiste nell'identificare a chi appartiene il volto all'interno di quella bounding box. Questo episodio si concentra esclusivamente sulla recognition. Per decenni, l'approccio standard è stato statistico. Se hai sviluppato un sistema nei primi anni Duemila, probabilmente hai utilizzato una tecnica chiamata Eigenfaces. Gli Eigenfaces si basano su un algoritmo chiamato Principal Component Analysis, o PCA. Parti da un dataset di immagini di volti e appiattisci ciascuna immagine in un enorme array monodimensionale di intensità di pixel grezze. La PCA analizza quindi l'intero dataset per individuare le direzioni di massima varianza. Trova i pattern matematici sottostanti che differenziano un volto dall'altro. Quando visualizzi queste componenti principali, sembrano volti spettrali e sfocati. Per riconoscere una nuova persona utilizzando gli Eigenfaces, il sistema proietta la nuova immagine grezza in questo sottospazio delle componenti principali e calcola la distanza dai volti noti nel database. Questo funziona in ambienti altamente controllati, ma fallisce nel mondo reale. Un'ombra su una guancia o una leggera inclinazione della testa alterano completamente i valori grezzi dei pixel. L'algoritmo vede un pattern di luce diverso e non riesce a riconoscerti. Ecco l'intuizione chiave. Il deep learning ha completamente abbandonato l'idea di confrontare la varianza dei pixel grezzi. I sistemi moderni utilizzano le Convolutional Neural Networks per generare gli embedding. Un embedding è un vettore denso di numeri che rappresenta le feature di alto livello di un volto. Queste reti vengono addestrate su milioni di immagini utilizzando penalità matematiche avanzate, come la loss ArcFace. Durante il training, la rete è costretta ad avvicinare nello spazio geometrico i vettori di embedding della stessa persona, allontanando al contempo i vettori di persone diverse. Immagina una serratura di sicurezza per la porta di un ufficio dotata di telecamera. Quando un visitatore si avvicina, il sistema rileva e fa il crop del volto, quindi passa quell'immagine ritagliata alla rete neurale. La rete restituisce un singolo array di 128 numeri floating-point. Quello è il vettore di embedding. Il sistema calcola quindi la semplice distanza euclidea tra il vettore del visitatore e un database di vettori di dipendenti autorizzati. Non confronta pixel o illuminazione. Misura semplicemente la distanza in linea retta tra due punti in uno spazio a 128 dimensioni. Se la distanza da un vettore di un dipendente è inferiore a una soglia predefinita, la porta si sblocca. Il sistema è robusto perché la rete ha imparato a ignorare ombre, occhiali e lievi rotazioni della testa durante il training. L'evoluzione dagli Eigenfaces ai deep embedding è il passaggio dall'analisi di come la luce colpisce un volto alla mappatura dell'identità concettuale di una persona in un sistema di coordinate misurabile. Se vuoi aiutarci a non rimanere senza caffè e supportare lo show, puoi cercare DevStoriesEU su Patreon. Per questo episodio è tutto. Grazie per l'ascolto, e continua a sviluppare!
12

Percezione persistente: algoritmi di object tracking

4m 09s

Rilevare un oggetto è solo metà dell'opera; tracciarne il movimento nel tempo è la vera sfida. Scopri gli algoritmi di multi-object tracking e l'assegnazione degli ID attraverso i frame video.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 12 di 20. Eseguire una rete neurale pesante su ogni singolo frame di un video ad alta risoluzione è uno spreco di risorse computazionali. I sistemi intelligenti fanno la detection di un oggetto una sola volta, e poi usano equazioni fisiche velocissime per prevedere dove si muoverà dopo. Questo è il dominio della Persistent Perception: gli algoritmi di Object Tracking. Immagina un sistema di monitoraggio del traffico di una smart city. Devi contare i veicoli unici che attraversano un incrocio trafficato. Un modello di object detection analizza un singolo istante congelato nel tempo. Se esegui una detection pura su un video a trenta frame al secondo, un'auto ferma al semaforo rosso per dieci secondi genera trecento bounding box separate e scollegate. Senza una logica di tracking, il tuo sistema conta trecento auto. La detection trova l'oggetto. Il tracking associa matematicamente quell'oggetto al suo stato passato nel tempo. Per risolvere il problema della telecamera del traffico, ti serve un multi-object tracker per mantenere un ID persistente per ogni veicolo. I tracker moderni, come quelli implementati usando Roboflow e OpenCV, dividono questo problema in due fasi matematiche distinte. La prima fase è la prediction, e la seconda fase è l'association. Quando un'auto entra nel feed della telecamera, il detector iniziale disegna una bounding box. Il tracker estrae le coordinate del centro, la larghezza e l'altezza di quella box, e le assegna un intero univoco, come l'ID 42. Quando arriva il frame video successivo, il tracker non scansiona immediatamente l'immagine. Invece, usa un modello matematico, tipicamente un Kalman Filter, per eseguire la state estimation. Valutando come l'ID 42 si è mosso nei frame precedenti, il filtro calcola la velocità del veicolo. Poi proietta queste proprietà fisiche in avanti per prevedere esattamente dove dovrebbe trovarsi la bounding box per l'ID 42 nel nuovo frame. Ora hai due set di dati per il frame corrente. Hai le box previste generate dallo state estimator, e le box effettive appena trovate dal detector. Ecco l'intuizione chiave. Il tracker deve conciliare questi due set per mantenere gli ID coerenti senza analizzare di nuovo i pixel effettivi. Costruisce una matrice confrontando ogni box prevista con ogni box appena rilevata. La metrica principale usata per questo confronto è l'Intersection over Union, o IoU. Questa misura quanto l'area geometrica prevista si sovrappone all'area geometrica rilevata. Se la posizione prevista per l'ID 42 si sovrappone pesantemente a una bounding box appena rilevata, il sistema conclude che sono lo stesso veicolo. Un metodo di ottimizzazione, tipicamente l'Hungarian algorithm, risolve questa matrice per trovare gli accoppiamenti uno a uno più logici in tutto l'incrocio. La nuova detection eredita l'ID 42, e il tracker aggiorna il suo modello di velocità con le nuove coordinate confermate. Questo loop di prediction e association gestisce intrinsecamente le ostruzioni visive temporanee. Se un autobus blocca la visuale della nostra auto per alcuni frame, il detector non riesce a trovarla. Tuttavia, lo state estimator continua a prevedere il movimento dell'auto dietro l'autobus in base alla sua ultima traiettoria nota. L'ID viene mantenuto vivo in uno stato pending. Quando l'auto emerge e il detector segnala una bounding box che si allinea con la blind prediction in corso del tracker, l'ID viene immediatamente ricollegato. Colmando il divario tra frame indipendenti, il multi-object tracking trasforma uno stream di immagini statiche in una mappa coerente di entità in movimento. Il tracking permette alla tua applicazione di smettere di chiedersi cosa c'è nel frame, e iniziare a capire come si comportano le cose nel tempo. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
13

Vision-Language Models per la segmentazione

4m 08s

Esploriamo come i Vision-Language Models (VLM) stiano spingendo i confini oltre i bounding box, consentendo una segmentazione semantica pixel-perfect basata puramente su prompt in linguaggio naturale.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 13 di 20. Abbiamo passato anni ad addestrare l'IA a disegnare bounding box attorno agli oggetti, ma i box sono goffi e pieni di rumore di fondo. L'obiettivo reale è chiedere a un sistema, in linguaggio naturale, di disegnare una silhouette pixel-perfect attorno ai contorni esatti di un oggetto, anche se non è mai stato addestrato esplicitamente su quell'oggetto prima d'ora. Questo ci porta ai Vision-Language Model per la segmentation. I modelli tradizionali di image segmentation sono rigidi. Mappano i pixel su una lista fissa e chiusa di categorie come auto, persona o albero. Se vuoi segmentare qualcosa al di fuori di questa lista, devi raccogliere un dataset enorme e addestrare un modello completamente nuovo. I Vision-Language Model, o VLM, superano questo limite fondendo i Large Language Model con dei visual encoder per eseguire una open-world segmentation. Inserisci un'immagine e una string di testo arbitraria, e il modello restituisce una mask densa a livello di pixel di ciò che hai descritto. Pensa a un drone agricolo automatizzato che sorvola un vigneto. Un agricoltore non vuole dei generici box intorno alle piante. Ha bisogno di una mappa precisa dell'infezione. Invia quindi al drone un prompt con la string di testo foglie di vite malate. Il VLM elabora il feed visivo e il text prompt insieme. Comprende il significato semantico di malato e foglie di vite dal suo training linguistico, allinea quel significato con le feature visive dell'immagine e restituisce in output una mask. Questa mask isola solo il fogliame infetto fino all'esatto pixel, ignorando completamente le foglie sane, il terreno e le ombre. Questo ci porta a come il modello esegue effettivamente questa logica. L'approccio di base è il text prompting a zero-prediction, spesso chiamato zero-shot. In questa modalità, il modello si affida interamente all'enorme dataset su cui è stato originariamente addestrato. Il text prompt passa attraverso un text encoder, trasformandosi in una rappresentazione matematica della tua richiesta. Contemporaneamente, l'immagine passa attraverso un vision encoder, che scompone l'immagine in una griglia di feature visive. Il modello calcola quindi la similarità tra la tua rappresentazione testuale e ogni singola feature visiva in quella griglia. Gli score di similarità elevati diventano la tua mask. Il punto cruciale qui è che i pesi del modello rimangono completamente frozen. Stai estraendo una complessa pixel mask usando solo la potenza dell'allineamento linguistico. Ecco l'intuizione chiave. La zero-prediction è potente, ma si basa su un training ampio e general-purpose. A volte, il dominio visivo è semplicemente troppo specializzato. Se una specifica malattia delle foglie di vite sembra identica a un'innocua carenza nutrizionale, il VLM frozen potrebbe fare fatica a distinguerle basandosi puramente su una descrizione testuale. È qui che passi al visual fine-tuning. Invece di limitarti a cambiare il text prompt, aggiorni i pesi effettivi dei componenti visivi del modello usando un piccolo dataset di immagini altamente specifiche, con mask create manualmente. Stai insegnando esplicitamente al vision encoder le sfumature della texture visiva della malattia, invece di affidarti solo all'ampia comprensione concettuale della parola malattia da parte del language model. La zero-prediction tratta il VLM come un reasoning engine out-of-the-box guidato interamente dalle parole, mentre il visual fine-tuning lo tratta come una potente foundation che alteri permanentemente per padroneggiare uno specifico dominio visivo. Il vero potere della segmentation moderna non riguarda più la raccolta di milioni di pixel etichettati; è sapere quando guidare un modello frozen con un text prompt intelligente, e quando spendere compute per alterare i suoi pesi visivi. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
14

Alchimia dei pixel: alpha blending e color spaces

3m 51s

Uno sguardo al lato matematico della fotografia computazionale. Comprendi i canali alpha, le equazioni di image blending e perché il color space HSV è superiore all'RGB per la logica della computer vision.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 14 di 20. Mentre noi umani pensiamo al colore come a un mix di rosso, verde e blu, cercare di programmare un computer per tracciare un oggetto usando l'RGB è un incubo nel momento in cui una nuvola copre il sole. La soluzione sta nel modo in cui rappresentiamo e combiniamo matematicamente i pixel. Oggi parliamo di Pixel Alchemy: Alpha Blending e Color Spaces. Il problema principale del color space RGB è che accoppia le informazioni sul colore direttamente con la luminanza. Se un'ombra cade su un oggetto verde brillante, i valori dei suoi pixel rossi, verdi e blu cambiano tutti in modo significativo. Per un algoritmo di thresholding standard, un oggetto verde in ombra sembra completamente diverso da uno illuminato. Per risolvere questo problema, trasformi l'immagine dall'RGB al color space HSV. HSV sta per Hue, Saturation e Value. La Hue rappresenta il colore di base stesso come un angolo su un cilindro cromatico. La Saturation rappresenta l'intensità di quel colore, e il Value rappresenta la luminosità. Isolando le informazioni pure sul colore in quel singolo canale Hue, la tua pipeline di computer vision diventa estremamente resistente ai cambi di illuminazione. Puoi configurare la tua logica per cercare una specifica tonalità di verde, e la troverà sia che la stanza sia ben illuminata o in penombra. Questa robustezza è fondamentale quando costruisci qualcosa come un sistema automatizzato di green-screen per una trasmissione. Vuoi fare un blend perfetto di una mappa meteo dinamica dietro a un presentatore. Per prima cosa, prendi il feed della telecamera e lo converti in HSV. Poi definisci un range di hue verdi che corrispondono al fondale fisico. Per ogni pixel che rientra in quel range di hue verdi, dai in output uno zero. Per tutto il resto, come il presentatore, dai in output un uno. Questo crea una mask binaria. Questa mask funge da tuo alpha channel. Ecco il punto chiave. Spesso gli ascoltatori parlano dell'alpha come se fosse un colore, quasi come una tintura trasparente. Non lo è. L'alpha è puramente un peso numerico, un valore scalare tra zero e uno che detta l'opacità in un'equazione di interpolazione lineare. L'image blending è semplicemente aritmetica pixel per pixel. Per combinare il presentatore in foreground e la mappa meteo in background, usi un'equazione specifica. Per ogni pixel, il colore di output finale è uguale al pixel in foreground moltiplicato per il valore alpha, più il pixel in background moltiplicato per uno meno il valore alpha. Pensa alla matematica di quello scenario green-screen. Dove si trova il presentatore, l'alpha è uno. Il pixel in foreground viene moltiplicato per uno, preservando perfettamente il presentatore. Il pixel della mappa meteo in background viene moltiplicato per uno meno uno, che fa zero. La mappa meteo scompare esattamente in quel punto. Al contrario, dove si trova il green-screen, l'alpha è zero. Il pixel verde in foreground si moltiplica per zero, cancellando completamente lo schermo fisico. Il pixel della mappa meteo in background si moltiplica per uno meno zero, che fa uno, rendendo la mappa meteo completamente visibile. Se vuoi un bordo morbido e anti-aliased attorno al presentatore, usi valori alpha frazionari come zero virgola cinque lungo il contorno. Questo fa la media tra i pixel in foreground e in background per evitare contorni netti e frastagliati. La singola cosa più utile da ricordare è che le immagini in memoria sono solo matrici, e la manipolazione dei pixel è solo aritmetica matriciale; scegliere il giusto sistema di coordinate, come l'HSV, rende quell'aritmetica robusta e prevedibile anziché fragile. Grazie per aver passato qualche minuto con me. Alla prossima, stammi bene.
15

Camera Calibration: gestire la lens distortion

4m 22s

Tutti gli obiettivi fisici delle telecamere distorcono la realtà. Impara a calcolare le matrici intrinseche della telecamera e i coefficienti di distorsione radiale per 'raddrizzare' matematicamente il mondo per una robotica accurata.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 15 di 20. Ogni fotografia che hai mai scattato è una sottile bugia, distorta dal vetro curvo dell'obiettivo. Nella robotica, questa leggera distorsione fa la differenza tra afferrare una palla e mancarla completamente. Risolvere questo divario richiede la Camera Calibration: gestire la distorsione della lente. Monti una webcam fisheye economica e con una forte distorsione su un braccio robotico. Il sistema deve calcolare la distanza esatta in millimetri per afferrare in sicurezza una fragile tazza di caffè. Se elabori direttamente il raw video feed, la tua geometria è completamente sbagliata. La lente piega la luce in ingresso, il che significa che un pixel vicino al bordo del frame rappresenta una distanza nel mondo reale drasticamente diversa rispetto a un pixel esattamente al centro. Se il robot si fida di quei raw pixel, distruggerà la tazza. Dobbiamo correggere due tipi principali di distorsione della lente. Il primo è la distorsione radiale. La luce si piega maggiormente ai bordi di una lente rispetto al suo centro. Questo fa sembrare curve le linee rette, spesso gonfiandole verso l'esterno a barilotto o stringendole verso l'interno. Il secondo è la distorsione tangenziale. Questa si verifica in fase di produzione quando la lente non è montata in modo perfettamente parallelo al sensore d'immagine, facendo sembrare alcune aree dell'immagine più vicine di altre. Per risolvere questo problema, ci serve un punto di riferimento geometrico noto. Lo standard del settore è un semplice pattern a scacchiera piatto, stampato su un supporto rigido. Una scacchiera fornisce linee intersecanti nitide e ad alto contrasto, rendendo estremamente facile per un algoritmo di detection individuare con precisione gli angoli interni. Cosa ancora più importante, avendola stampata noi, conosciamo le dimensioni fisiche esatte dei quadrati. Gli sviluppatori spesso confondono i parametri intrinseci ed estrinseci quando lavorano con i dati di calibrazione. È facile metterli tutti insieme e considerarli semplicemente dei camera settings. Ecco il punto chiave. I parametri estrinseci non descrivono affatto l'hardware della camera. Definiscono la posizione fisica e la rotazione della camera nel mondo 3D rispetto alla scena. I parametri intrinseci, d'altra parte, definiscono le proprietà fisiche interne della lente e del sensore. Incapsulano la focal length e l'optical center. La intrinsic matrix è unica per quella specifica camera fisica e rimane costante indipendentemente da dove si muove il braccio robotico. Il processo di calibrazione funziona mappando punti 3D noti su pixel 2D osservati. Per prima cosa, scatti una dozzina o più di foto della scacchiera da diverse angolazioni e distanze usando la tua webcam. Successivamente, esegui una funzione di corner detection su quelle immagini. Costruisci una lista di dove queste coordinate di pixel 2D atterrano nelle immagini, e le associ a un array di coordinate 3D del mondo reale di quegli stessi angoli. Le coordinate 3D sono semplicemente una griglia piatta basata sulla dimensione nota del tuo quadrato, con l'asse Z impostato a zero. Passi entrambi i set di coordinate nella funzione di camera calibration. L'algoritmo calcola la trasformazione matematica necessaria per mappare i punti 3D sulle tue immagini 2D. Restituisce la tua intrinsic camera matrix, i vettori estrinseci di rotazione e traslazione per ogni immagine, e un set di distortion coefficients. Questi coefficienti gestiscono sia il warp radiale che quello tangenziale. Una volta che hai questi coefficienti e la intrinsic matrix, li passi a una funzione di undistortion. Ogni nuovo frame che il tuo robot vede viene matematicamente stirato e riportato a una vera proiezione rettilinea. Le linee rette tornano ad essere rette. Il tuo braccio robotico ora può misurare i millimetri esatti, allungarsi e afferrare in sicurezza la tazza. La intrinsic matrix è il layer fondamentale della geometria della Computer Vision, che trasforma un array di pixel distorto in un sistema di coordinate matematicamente affidabile. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
16

Stereo Vision: trovare la profondità con due telecamere

4m 02s

Confrontando i lievi spostamenti visivi tra due obiettivi, possiamo calcolare le distanze fisiche esatte. Questo episodio tratta la geometria epipolare e le disparity maps.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 16 di 20. Prendendo in prestito l'esatto trucco biologico che i nostri due occhi umani usano per percepire lo spazio tridimensionale, un computer può calcolare all'istante la distanza da un oggetto usando solo la geometria di base. Questa è la Stereo Vision: trovare la profondità con due telecamere. Una singola dashcam registra una proiezione bidimensionale piatta del mondo. Perde completamente le informazioni sulla profondità. Senza contesto, non può stabilire con certezza se l'auto che precede è piccola e vicina, oppure grande e lontana. Per costruire un Advanced Driver Assistance System, o ADAS, in grado di prevenire davvero una collisione con un'auto in frenata, hai bisogno della distanza fisica reale. Puoi ottenerla montando due dashcam perfettamente allineate. La distanza fisica tra le loro lenti è chiamata baseline. Per trovare la distanza dall'auto che precede, il sistema deve trovare lo stesso identico punto su quell'auto sia nell'immagine della telecamera sinistra che in quella della telecamera destra. Cercare un punto dell'immagine sinistra in tutta l'immagine destra è decisamente troppo lento per la guida in real time. È qui che entra in gioco la geometria epipolare. Trasformando matematicamente, o rettificando, le due immagini in modo che le loro lenti siano virtualmente allineate sullo stesso identico piano, semplifichi la ricerca. Uno specifico fanale posteriore trovato sulla riga duecento nell'immagine di sinistra, ora esisterà sempre e solo sulla riga duecento nell'immagine di destra. Questo percorso di ricerca orizzontale è chiamato linea epipolare. Il sistema deve solo scansionare a sinistra e a destra lungo una singola riga. Quando il sistema trova il pixel corrispondente lungo quella linea, misura la differenza nelle loro posizioni orizzontali. Questa differenza è chiamata disparity. Spesso le persone confondono la disparity con la profondità, ma sono inversamente proporzionali. Gli oggetti che cambiano drasticamente posizione tra le due inquadrature sono fisicamente più vicini alle lenti. Se l'auto in frenata davanti a te salta di quaranta pixel tra la vista di sinistra e quella di destra, è molto vicina. Se una montagna all'orizzonte si sposta di un solo pixel, è lontana. Un'alta disparity significa bassa profondità. Ecco il punto chiave. Non vuoi solo la distanza da un singolo fanale posteriore. Vuoi una disparity map densa, ovvero un valore di profondità per quasi ogni pixel nel frame. OpenCV gestisce questo aspetto utilizzando il block matching, nello specifico un algoritmo chiamato Semi Global Block Matching. Invece di cercare di abbinare un singolo pixel ambiguo, prende un piccolo blocco di pixel dall'immagine di sinistra. Quindi fa scorrere quel blocco lungo la linea epipolare orizzontale nell'immagine di destra, confrontando le intensità dei pixel fino a trovare il miglior match matematico. Lo fa su tutta l'immagine, applicando delle penalità per i salti improvvisi nella disparity, in modo da mantenere la mappa risultante fluida e fisicamente realistica. Una volta che hai la disparity map, convertirla nella profondità del mondo reale è un singolo calcolo. Moltiplichi la lunghezza focale delle telecamere per la distanza fisica della baseline tra di esse, e dividi quel risultato per il valore di disparity del pixel. La matematica è assoluta. Non stai tirando a indovinare basandoti sulle ombre o sulle dimensioni dell'oggetto. Finché le tue telecamere rimangono rigidamente calibrate e allineate, questo calcolo geometrico ti fornisce la distanza precisa dal veicolo che precede in millisecondi. Il bello di uno stereo rig calibrato è che bypassa la necessità di identificare cos'è un oggetto prima di sapere dove si trova. Per questo episodio è tutto. Grazie per l'ascolto, e continua a costruire!
17

Deep Monocular Metric Depth

4m 04s

Esploriamo come le moderne reti neurali profonde abbiano imparato a dedurre una profondità metrica 3D altamente accurata da immagini 2D completamente piatte a obiettivo singolo, infrangendo la regola tradizionale della stereo vision.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 17 di 20. Per decenni, gli ingegneri di computer vision hanno creduto che ti servissero due telecamere per calcolare la distanza reale. Ti serviva la visione stereoscopica per triangolare i punti nello spazio. Oggi, i modelli AI possono percepire la distanza fisica da una singola immagine piatta interpretando ombre, texture e scala, proprio come fa un pittore. Questa innovazione si chiama Deep Monocular Metric Depth. Spesso le persone confondono la relative depth con la metric depth. La relative depth è semplicemente sapere che un divano si trova davanti a un muro. È un ordinamento di layer visivi. La metric depth significa sapere che il divano si trova esattamente a due virgola quattro metri dall'obiettivo della telecamera. Fino a poco tempo fa, estrarre misurazioni metriche assolute da una singola foto era considerato matematicamente impossibile. Una singola immagine 2D perde ogni scala intrinseca. Un oggetto potrebbe essere piccolo e vicino all'obiettivo, oppure enorme e lontano. I modelli di deep learning aggirano completamente il classico problema di geometria. Invece di triangolare i punti tra due lenti, network come DepthPro imparano da enormi dataset che contengono milioni di immagini accoppiate a depth map 3D di ground-truth. Quando passi una singola immagine standard al network, questo non cerca disparità stereo. Valuta i cue monoculari. Analizza i gradienti delle texture, notando dove le superfici sembrano più lisce man mano che si allontanano. Elabora l'illuminazione contestuale, l'occlusione e la scala fisica nota degli oggetti riconoscibili. Il modello poi costruisce una predizione densa, pixel per pixel, della distanza assoluta. Ecco l'intuizione chiave. Le architetture moderne ottengono questo risultato senza conoscere i camera intrinsics. Non devi passare al network la lunghezza focale, il field of view o la dimensione del sensore della fotocamera che ha scattato la foto. Il network deduce la lunghezza focale direttamente dal contenuto visivo dell'immagine stessa. Questo crea una soluzione zero-shot. Dai in pasto al modello una foto scattata da una lente qualsiasi, non calibrata, e lui ti restituisce in output una depth map assoluta e precisa. Pensa a un'applicazione di augmented reality su uno smartphone standard. Un utente vuole vedere se un nuovo tavolo da pranzo ci sta in casa sua. Si mette in una stanza vuota e punta la sua singola fotocamera posteriore verso il pavimento. L'AR classica ti richiede di muovere il telefono per generare parallasse e costruire lentamente una mappa spaziale. Con la deep monocular metric depth, l'applicazione processa un singolo frame statico all'istante. La rete neurale calcola il volume esatto e le dimensioni dello spazio sul pavimento in millisecondi. L'applicazione poi renderizza un tavolo virtuale nel camera feed, scalato perfettamente rispetto al mondo reale, piantato sul pavimento all'esatta profondità. Sotto il cofano, ottenere questo risultato richiede enormi receptive field nell'architettura della rete neurale. Il modello usa i Vision Transformer per catturare il contesto globale. Guarda l'intera immagine in una volta sola per capire la geometria generale della stanza. Poi combina questa visione d'insieme con un processing locale ad alta risoluzione. Questo duplice approccio permette al modello di produrre depth boundary nitidi attorno a edge complessi, come le gambe sottili di una sedia o le foglie di una pianta da appartamento. Evita completamente gli artefatti sfocati e di bleeding edge che affliggevano i precedenti modelli di depth estimation. Il cambiamento fondamentale è la capacità di estrarre misurazioni spaziali assolute da un singolo frame immagine completamente non calibrato. Per questo episodio è tutto. Grazie per l'ascolto, e continuate a sviluppare!
18

IA sull'Edge: deployment su microcontrollori

4m 46s

I modelli non vengono sempre eseguiti su enormi GPU in cloud. Scopri come la quantization, la conversione INT8 e l'architecture pruning consentano a modelli di visione complessi di funzionare su microcontrollori IoT a basso consumo.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Deep Dive sulla Computer Vision, episodio 18 di 20. I deploy di intelligenza artificiale più impressionanti di oggi non girano in enormi server farm climatizzate. Girano su chip di silicio da due dollari, alimentati da una batteria da orologio, in mezzo al nulla. Portare reti neurali complesse su questi minuscoli dispositivi richiede un approccio completamente diverso, il che ci porta all'AI sull'Edge: Deploy su microcontrollori. I microcontrollori sono incredibilmente limitati. Stiamo parlando di dispositivi con kilobyte di RAM, pochi megabyte di flash storage e rigidi limiti energetici. I modelli standard di computer vision utilizzano numeri floating-point a 32 bit per i loro weights e le loro activations. Un modello tipico ha bisogno di centinaia di megabyte solo per essere caricato in memoria. Se provi a farlo girare su un microcontrollore di base, andrà subito in crash per esaurimento della memoria. Pensa a una fototrappola alimentata a batteria e ricaricata a energia solare, posizionata nel profondo di una foresta. Il suo compito è individuare un leopardo delle nevi a rischio di estinzione. Se la fototrappola svegliasse il suo trasmettitore radio per inviare ogni foto attivata dal movimento a un cloud server per l'analisi, la batteria si scaricherebbe in un giorno. Il dispositivo deve far girare l'object detector in locale. Deve elaborare il video feed direttamente sul silicio e svegliare il trasmettitore, che consuma molta energia, solo per inviare un alert quando identifica specificamente il leopardo. Per far stare un modello di computer vision su un chip così piccolo, devi ridurlo drasticamente. Lo fai principalmente attraverso due tecniche: il pruning e la quantization. Il pruning è esattamente quello che sembra. Analizzi la rete neurale addestrata e rimuovi le connessioni che hanno il minor impatto sulla prediction finale. In pratica, stai tagliando i rami secchi dall'architettura della rete, in modo che avvengano meno calcoli per frame. La seconda tecnica, la quantization, è dove avviene la vera riduzione delle dimensioni. Questa è la parte che conta. La quantization riduce la precisione numerica del modello. Invece di memorizzare ogni weight come un float a 32 bit, mappi quei valori su un intero a 8 bit, un processo comunemente noto come conversione INT8. Il trade-off principale qui è semplice. Stai intenzionalmente buttando via precisione numerica. Per farlo correttamente, fai passare un dataset di calibrazione attraverso il modello per tracciare i valori minimi e massimi dei weights. Poi scali quel range floating-point per farlo rientrare esattamente nei 256 possibili valori di un intero a 8 bit. Questo sacrifica una minuscola frazione di accuracy del modello in cambio di una massiccia riduzione del memory footprint e del tempo di esecuzione. Un modello INT8 occupa esattamente un quarto dello storage di un modello a 32 bit. Inoltre, i microcontrollori gestiscono la matematica con numeri interi molto più velocemente e con molta meno energia rispetto alla matematica floating-point. Molti microcontrollori a basso consumo non dispongono affatto di hardware dedicato per le operazioni floating-point. Questo significa che la matematica floating-point deve essere emulata via software, il che è incredibilmente lento e prosciuga la batteria. Con un modello INT8 quantizzato in modo aggressivo, quando la fototrappola cattura un'immagine, la rete neurale moltiplica e somma piccoli valori interi in singoli cicli di clock hardware. Il microcontrollore può valutare l'immagine in millisecondi, confermare che non c'è nessun leopardo delle nevi e tornare all'istante in uno stato di deep sleep per risparmiare energia. Il processo di deploy vero e proprio inizia su una normale macchina desktop. Addestri il tuo modello su un dataset standard. Una volta addestrato, fai girare uno script di conversione che applica il pruning e la quantization INT8. L'output è solitamente un flat byte array esportato come un blocco di codice C header contenente i weights compressi. Lo compili direttamente nel firmware del tuo microcontrollore insieme ai driver della fotocamera. Non c'è un sistema operativo e non c'è un file system da cui caricare i modelli a runtime. È pura logica compilata in esecuzione direttamente sul bare metal. Il vincolo fondamentale in questo ambiente cambia il modo in cui valuti il successo. Su un microcontrollore, la tua metrica principale non è più la precisione di picco, è il numero di inferenze accurate che puoi eseguire per millijoule di energia della batteria. Se vuoi aiutarci a portare avanti lo show, puoi sostenerci cercando DevStoriesEU su Patreon. Questo è tutto per questo episodio. Grazie per l'ascolto, e continua a sviluppare!
19

Radiance Fields: 3D Gaussian Splatting

3m 55s

La grafica 3D tradizionale utilizza i wireframe, ma la computer vision moderna utilizza i radiance fields. Analizziamo la tecnologia all'avanguardia del 3D Gaussian Splatting per la ricostruzione fotorealistica degli ambienti.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Computer Vision Deep Dive, episodio 19 di 20. I videogiochi tradizionali renderizzano i mondi disegnando milioni di minuscoli triangoli piatti. L'ultima rivoluzione nella computer vision abbandona completamente i triangoli, renderizzando la realtà come una densa cloud di milioni di blob matematici sovrapposti e luminosi. Questo è Radiance Fields: 3D Gaussian Splatting. Un agente immobiliare cammina per una casa registrando un normale video con lo smartphone. Devi processare quel girato grezzo per creare un virtual tour 3D fotorealistico e completamente navigabile, con riflessi e illuminazione dinamici. Per alcuni anni, l'approccio standard è stato Neural Radiance Fields, o NeRF. Un NeRF mappa lo spazio usando una neural network implicita. Per generare un'immagine, spara un raggio matematico attraverso la scena e fa una query alla neural network in centinaia di punti lungo quel raggio per chiedere che colore e densità ci siano in quel punto. Produce risultati eccellenti, ma fare query a una deep neural network per milioni di pixel è estremamente lento. Il 3D Gaussian Splatting abbandona la neural network implicita. Al contrario, usa una struttura esplicita simile a una point cloud. La pipeline inizia con un algoritmo standard di structure-from-motion che analizza il video dello smartphone per tracciare la posizione della videocamera e costruire una point cloud 3D sparsa della casa. L'algoritmo quindi sostituisce ogni singolo punto in quella cloud con una gaussiana 3D. Puoi pensare a una gaussiana 3D come a un ellissoide colorato e semitrasparente. Ogni gaussiana contiene un set specifico di parametri. Ha una coordinata centrale nello spazio 3D. Ha una matrice di covarianza, che ne detta la scala e la rotazione, allungandola in un disco piatto o in un lungo sigaro a seconda della geometria che rappresenta. Ha un valore di opacità. Infine, memorizza i dati sul colore usando le Spherical Harmonics. Ecco l'intuizione chiave. Le Spherical Harmonics sono funzioni matematiche che codificano il colore in modo direzionale. Quando guardi la gaussiana da una certa angolazione, potrebbe riflettere una finestra luminosa. Da un'altra angolazione, mostra la texture scura di un pavimento. È questo che dà al virtual tour finale la sua illuminazione fotorealistica e view-dependent. La point cloud iniziale è disordinata, quindi il sistema entra in un loop di ottimizzazione. Proietta, o splatta, queste gaussiane 3D su una vista 2D della videocamera per renderizzare un'immagine. Sottrae questa immagine renderizzata dalla fotografia reale scattata dall'agente immobiliare per calcolare l'errore. L'algoritmo quindi usa quell'errore per aggiornare i parametri delle gaussiane. Durante questa ottimizzazione, il sistema gestisce attivamente la popolazione di gaussiane. Se un blob diventa troppo grande e si sovrappone a troppi dettagli, l'algoritmo lo divide in parti più piccole. Se un'area con texture complesse ha bisogno di più risoluzione, l'algoritmo clona le gaussiane esistenti per aumentare la densità. Se un blob diventa completamente trasparente o irrilevante, il sistema lo elimina. Dato che la scena finale è interamente composta da data point espliciti, renderizzarla è eccezionalmente veloce. L'hardware grafico si limita a ordinare gli ellissoidi da dietro in avanti e a miscelare i loro colori per formare l'immagine finale. La svolta del 3D Gaussian Splatting è dimostrare che una cloud caotica di blob matematici espliciti può catturare luce e geometria complesse molto più velocemente di una densa neural network. Grazie per l'ascolto. Stammi bene, alla prossima.
20

Il loop Vision-Action: Agentic AI

3m 41s

Nel finale della nostra serie, diamo un'occhiata alla destinazione finale della computer vision: l'Agentic AI. Scopri come la percezione visiva viene integrata con i modelli di azione per creare lavoratori digitali autonomi.

Download
Ciao, sono Alex di DEV STORIES DOT EU. OpenCV: Deep Dive sulla computer vision, episodio 20 di 20. Per decenni, gli algoritmi di computer vision sono stati completamente passivi. Potevano disegnare un bounding box attorno a una tazza su un tavolo, ma finiva lì. Oggi il sistema non si limita a vedere la tazza: usa quei dati visivi per allungare la mano e afferrarla. Il ponte tra il vedere e il fare è il Vision-Action Loop, guidato dall'AI agentica. Prima di entrare nei dettagli tecnici, dobbiamo tracciare una linea netta tra due tecnologie che sembrano simili ma fanno lavori completamente diversi. Uno standard Vision-Language Model, o VLM, è descrittivo. Gli passi uno screenshot, e lui ti restituisce un testo che ti dice cosa c'è sullo schermo. Un modello Vision-Language-Action, o VLA, è esecutivo. Passi a un VLA uno screenshot e un obiettivo, e lui ti restituisce dei comandi eseguibili. Non si limita a descrivere la user interface, ma ci interagisce attivamente. L'AI agentica trasforma una vision pipeline in un organo sensoriale per un motore decisionale. Questo opera in un ciclo continuo di percezione, ragionamento e azione. Per prima cosa, il sistema fa un'osservazione visiva dell'ambiente in cui si trova. Potrebbe essere il camera feed di un robot o la cattura in real-time del desktop di un computer. Dopodiché, l'agente elabora questo stato visivo insieme a un prompt o a un obiettivo specifico. Analizza le relazioni spaziali, legge il testo e identifica gli elementi interattivi. Quando il modello identifica un elemento, mappa la comprensione semantica, ovvero sapere che uno specifico rettangolo verde è un pulsante di submit, in uno spazio di coordinate geometriche. Infine, invece di restituire una descrizione, il modello genera un action payload. Spesso si tratta di un comando strutturato che contiene le coordinate esatte dello schermo, la regolazione di un motore hardware o un'API call. Una volta eseguita l'azione, l'ambiente cambia. L'agente fa una nuova osservazione visiva, controlla se l'azione precedente è andata a buon fine e calcola lo step successivo. Ed ecco il punto chiave. I dati visivi non sono più un vicolo cieco: sono il meccanismo di grounding per l'uso autonomo dei tool. Vediamo uno scenario concreto: un assistente contabile digitale automatizzato. L'obiettivo è autorizzare un pagamento. L'agente inizia catturando lo schermo. Il vision model elabora la scansione di una fattura in PDF, estraendo il nome del fornitore e l'importo totale. Il reasoning engine sa che deve loggare questi dati. Genera un'azione per spostare il mouse sull'icona del software di contabilità nella taskbar e cliccarci sopra. Lo schermo si aggiorna. L'agente fa un'altra osservazione visiva per verificare che l'applicazione sia aperta. Scansiona la nuova interfaccia, individua il campo di autorizzazione del pagamento, mappa la posizione visiva sulle coordinate dello schermo, digita l'importo e clicca sul pulsante di submit. La vision pipeline invia costantemente aggiornamenti di stato all'agente, in modo che sappia esattamente quando eseguire l'azione successiva e, cosa ancora più importante, quando fermarsi. La computer vision si è evoluta da un tool di analisi standalone al livello sensoriale per i sistemi autonomi. Se la tua pipeline si limita ad analizzare un'immagine e poi si ferma, stai usando solo metà della tecnologia. Dato che questo è il nostro ultimo episodio, ti incoraggio a esplorare la documentazione ufficiale dei modelli VLA, a provare a costruire un semplice feedback loop hands-on, o a visitare devstories dot eu per suggerire gli argomenti per la nostra prossima serie. Per questo episodio è tutto. Grazie per averci ascoltato, e continua a sviluppare!