Logo ScanVIN.app Scan VIN
Lingua
Seleziona la lingua
Il cambio della lingua manterrà la sottopagina corrente.

Come funziona il nostro scanner VIN?

Come funziona il nostro scanner VIN? Digitare manualmente il numero VIN è uno di quei piccoli, fastidiosi compiti che, in caso di errore, causano perdite reali. Era un 8 o una B? 5 o S? Un solo carattere sbagliato e il rapporto sulla storia del veicolo torna vuoto – oppure, cosa ancora peggiore, descrive l’auto di qualcun altro. Per questo abbiamo creato uno scanner VIN che funziona interamente nel browser del tuo telefono. Senza installare app, senza inviare foto. In questo articolo mostreremo cosa succede davvero nei due o tre secondi tra il momento in cui punti la fotocamera sul numero VIN e quello in cui vedi il risultato – inclusi alcuni aspetti che ci hanno sorpreso durante lo sviluppo.

Due reti neurali, un solo compito

Quando tocchi “Scansiona”, il tuo browser scarica due piccoli modelli di IA (in totale circa 13 MB – memorizzati nella cache dopo la prima visita) e li esegue in locale tramite WebAssembly. Ognuno di essi ha un ruolo molto specifico. Il Cercatore. Il primo modello è un rilevatore di oggetti della famiglia YOLO, che abbiamo addestrato per fare esattamente una cosa: trovare il numero VIN nel fotogramma della fotocamera. Non “trovare del testo” – trovare il VIN. Ha visto numeri VIN su targhette sul cruscotto visibili dal parabrezza, adesivi sul montante della porta, punzonati sul metallo nudo sulle torrette degli ammortizzatori e su documenti di immatricolazione stampati, quindi riconosce la differenza tra un numero VIN, una targa o un numero di parte casuale. È importante sottolineare che non disegna semplicemente un riquadro attorno al VIN – restituisce un riquadro ruotato, così conosce l’angolo esatto del testo, anche quando tieni il telefono inclinato oppure fotografi il vano motore di lato.

Lettore. La striscia di pixel ritagliata e raddrizzata viene quindi inviata a un secondo modello: una rete di riconoscimento del testo della famiglia PaddleOCR, che abbiamo ottimizzato specificamente per i numeri VIN. Un modello OCR universale deve tenere conto di migliaia di caratteri – il nostro ne conosce solo 33.

Perché solo 33 caratteri? Una curiosità dal 1981

Le lettere I, O e Q sono vietate nei numeri VIN. La norma ISO del 1981 le ha escluse proprio perché è troppo facile confonderle con le cifre 1 e 0 – sul metallo punzonato, sulle etichette scolorite e (ironia della sorte) nell’OCR. Abbiamo inserito questa regola direttamente nell’alfabeto del modello-lettore. Esso è fisicamente incapace di restituire O – se un carattere appare circolare, la risposta consentita più vicina è 0 ed è proprio quella che segnala. Un’intera classe di errori OCR classici semplicemente non può verificarsi. Questo è il singolo vantaggio più grande dell’ottimizzazione per i numeri VIN invece di usare un motore OCR generico.

Una singola foto è un’ipotesi. Il video è una prova.

In una fase iniziale abbiamo preso una decisione che ha plasmato l’intero scanner: mai fidarsi di un singolo fotogramma. La fotocamera fornisce un nuovo fotogramma più volte al secondo, quindi invece di puntare tutto su un singolo scatto, lo scanner legge il numero VIN ripetutamente e permette ai fotogrammi di votare. Il risultato viene accettato solo quando i fotogrammi indipendenti sono concordi – e la soglia di “concordanza” è flessibile:

  • Se gli stessi 17 caratteri compaiono due volte e il checksum integrato del VIN è corretto, accettiamo il risultato quasi immediatamente.
  • Nessun checksum? (Maggiori dettagli qui sotto.) In tal caso attendiamo una terza conferma.
  • Se i fotogrammi continuano a non concordare su un singolo carattere, ogni candidato viene pesato in base a quanto il lettore fosse sicuro – carattere per carattere. Quest’ultima regola ha dimostrato il proprio valore durante i test. In una delle nostre clip di prova – un documento di immatricolazione in piena luce – un riflesso ha fatto sì che lo 0 nel numero di serie sembrasse un 8 in oltre metà dei fotogrammi. Il solo ripetere avrebbe scelto la risposta errata. Ma il livello di sicurezza del modello riguardo a quegli 8 era costantemente inferiore rispetto alle letture pulite di 0 e la logica di voto è se ne è accorto. Lo scanner ha semplicemente aspettato un secondo in più finché le evidenze si stabilizzassero – e ha restituito il numero VIN corretto.

Una cifra di controllo che funziona solo in alcune auto

I numeri VIN contengono un meccanismo nascosto di autocontrollo: la posizione 9 è la cifra di controllo calcolata a partire dagli altri 16 caratteri. È un ottimo segnale di verifica – quando funziona. C’è però un problema: è obbligatoria solo per i veicoli venduti in Nord America. La maggior parte dei VIN del mercato europeo non la utilizza affatto. Per questo il nostro scanner tratta la cifra di controllo come un bonus, mai come un requisito. Quando coincide, possiamo accettare il risultato più rapidamente. Quando non coincide, non è un errore – probabilmente si tratta semplicemente di un’auto europea e il carico ricade sul sistema di voto dei frame.

Il tuo numero VIN non lascia mai il telefono

Vale la pena dirlo chiaramente: i frame della fotocamera vengono elaborati interamente sul tuo dispositivo. I modelli di IA vengono scaricati nel tuo browser; le tue immagini non vengono mai inviate da nessuna parte. Non c’è alcun server che esegue il riconoscimento, nessuna foto archiviata nel cloud. L’unica cosa che lascia il tuo telefono è il numero VIN finale, di 17 caratteri – e solo quando prosegui alla pagina del rapporto. Non è stata una decisione dettata esclusivamente dalla privacy. In questo modo lo scanner è anche veloce (nessun andirivieni verso il server per ogni frame) e funziona anche con segnale debole in un parcheggio sotterraneo – cioè esattamente dove più spesso ti trovi accanto al numero VIN.

Come si presenta in pratica

Nei nostri test, i numeri VIN sul parabrezza, gli adesivi sulla porta, il VIN punzonato sulla torretta dell’ammortizzatore e persino il libretto di circolazione – lo scanner di solito individua il numero VIN corretto in uno-quattro secondi. Alcuni consigli sinceri per velocizzare il tutto:

  • L’illuminazione è l’aspetto più importante. Il pulsante della torcia esiste per un motivo – i numeri di telaio (VIN) punzonati nel vano motore le adorano.
  • Avvicinati. Il numero VIN dovrebbe più o meno riempire il riquadro di inquadratura.
  • Non cercare l’immobilità assoluta. Non hai bisogno di una mano perfettamente ferma – il sistema di votazione è stato progettato proprio per i piccoli movimenti che compie una mano reale.

Sotto il cofano, in breve

Per chi è curioso dal punto di vista tecnico: la rilevazione funziona su un modello basato su YOLO esportato in ONNX, il riconoscimento è un modello PaddleOCR ottimizzato con un alfabeto limitato ai VIN, ed entrambi vengono eseguiti in un unico ambiente di runtime WebAssembly (ONNX Runtime) all’interno di un web worker, grazie al quale la pagina rimane reattiva. La correzione della prospettiva tra i due modelli – raddrizzare la striscia con il numero VIN ruotata – è la stessa matematica utilizzata dalla tua app per la scansione dei documenti. Tutto il resto è un’accurata ingegneria costruita attorno a un unico principio: letture economiche, eseguite spesso, verificate tramite la coerenza.

Insegnare allo scanner che aspetto ha un VIN

Di recente abbiamo aggiunto un terzo «modello» – e non è una rete neurale. È una mappa statistica dell’aspetto dei VIN reali, costruita a partire da oltre mezzo milione di VIN autentici provenienti dai registri automobilistici europei e statunitensi.

Ecco l’idea. Un VIN non è una stringa casuale – ha una grammatica. I primi tre caratteri identificano il produttore, gli otto successivi codificano il modello, l’anno e lo stabilimento, e ogni casa automobilistica segue i propri schemi rigidi (Volkswagen adora WVWZZZ…, BMW ha il suo dialetto). Così, quando l’OCR legge WVW2ZZ…, il nostro modello linguistico sa che un 2 in quel punto è migliaia di volte meno probabile di una Z – e preferisce in silenzio la lettura che il produttore avrebbe effettivamente impresso.

Invece di lasciare che la rete di lettura scelga il singolo carattere più probabile in ogni posizione sperando per il meglio, lo scanner ora esplora più letture candidate contemporaneamente (una tecnica chiamata beam search) e valuta ciascuna sia in base a ciò che dicono i pixel sia in base a ciò che dice la grammatica del VIN. Il vantaggio è massimo proprio dove la scansione è più difficile: i VIN impressi nel metallo nudo, dove un carattere vicino si intrufola nel ritaglio o un carattere consumato scompare. Nel nostro clip di test più difficile la percentuale di fotogrammi letti perfettamente è passata da circa 1 su 9 a 3 su 4.

Una lezione emersa dai test merita di essere condivisa: un lettore più intelligente è un lettore più coerente – anche quando sbaglia in modo coerente. All’inizio lo scanner aggiornato leggeva male una cifra consumata allo stesso modo fotogramma dopo fotogramma, e i fotogrammi si trovavano volentieri d’accordo sulla risposta sbagliata. La soluzione è stata alzare l’asticella: con il modello linguistico attivo, il sistema di voto ora richiede un’ulteriore conferma indipendente prima di accettare un risultato. L’accuratezza è cosa buona; un’accuratezza affidabile è il vero prodotto.

E in linea con tutto quanto sopra: il modello linguistico è un file da 190 KB che si scarica insieme agli altri modelli e viene eseguito interamente sul tuo telefono. Il tuo VIN continua a non lasciare mai il tuo dispositivo.

Prova tu stesso: punta il telefono verso l’angolo del parabrezza di qualsiasi auto e scansiona il numero VIN.

Scansiona il VIN