Cum funcționează scannerul nostru VIN?
Introducerea manuală a numărului VIN este unul dintre acele mici,
enervante taskuri care, în caz de greșeală, duc la pierderi reale. A fost 8 sau B?
5 sau S? Un singur caracter greșit și raportul de istoric al vehiculului se întoarce gol – sau, și mai
rău, descrie mașina altcuiva.
De aceea am construit un scanner VIN care funcționează integral în browserul
telefonului tău. Fără instalarea unei aplicații, fără trimiterea de fotografii. În acest articol
îți arătăm ce se întâmplă de fapt în cele două-trei secunde dintre momentul în care
îndrepți camera spre numărul VIN și momentul în care vezi rezultatul – inclusiv câteva lucruri
care ne-au surprins în timpul dezvoltării.
Două rețele neuronale, o singură sarcină
Când atingi „Scanează”, browserul tău descarcă două modele AI de mici dimensiuni (în total aproximativ 13 MB – salvate în cache după prima vizită) și le rulează local prin WebAssembly. Fiecare are un rol foarte specific. rolă. Căutătorul. Primul model este un detector de obiecte din familia YOLO, pe care l-am antrenat să facă exact un singur lucru: să găsească numărul VIN în cadrul camerei. Nu „să găsească text” – ci să găsească VIN. A văzut numere VIN pe plăcuțe la parbriz, etichete pe montantul ușii, ștanțate direct în metalul gol de pe turnurile amortizoarelor, precum și pe documente de înmatriculare tipărite, așa că recunoaște diferența dintre un număr VIN și o plăcuță de înmatriculare sau un număr de piesă întâmplător. Important este că nu desenează pur și simplu un chenar în jurul VIN-ului – returnează un chenar rotit, astfel încât cunoaște unghiul exact al textului, chiar și atunci când ții telefonul strâmb sau fotografiezi compartimentul motorului din lateral. Cititorul. Banda de pixeli decupată și îndreptată ajunge apoi la al doilea model: o rețea de recunoaștere a textului din familia PaddleOCR, pe care am ajustat-o special pentru numerele VIN. Un model OCR universal trebuie să ia în calcul mii de caractere – al nostru cunoaște doar 33.
De ce doar 33 de caractere? O curiozitate din 1981
Literele I, O și Q sunt interzise în numerele VIN. Norma ISO din 1981 le-a exclus
tocmai pentru că pot fi prea ușor confundate cu cifrele 1 și 0 – pe metal ștanțat, pe
autocolante decolorate și (ironic) în OCR.
Am înscris această regulă direct în alfabetul modelului-cititor. El este fizic
incapabil să afișeze O – dacă un caracter pare rotund, cel mai apropiat răspuns
permis este 0 și exact asta raportează. Întreaga clasă de erori OCR clasice
pur și simplu nu poate apărea. Acesta este cel mai mare avantaj individual al
adaptării la numerele VIN în locul folosirii unui motor OCR gata făcut.
O singură fotografie e ghicit. Video-ul este dovadă.
Într-un stadiu timpuriu am luat o decizie care a modelat întregul scanner: nu avea niciodată încredere într-un singur cadru. Camera ta furnizează un nou cadru de câteva ori pe secundă, așa că, în loc să mizăm totul pe o singură captură, scannerul citește numărul VIN iar și iar și permite cadrelor să voteze. Rezultatul este acceptat abia atunci când cadrele independente sunt de acord – iar pragul de „concordanță” este flexibil:
- Dacă aceleași 17 caractere apar de două ori și suma de control integrată a VIN-ului este corectă, acceptăm rezultatul aproape imediat.
- Nu există sumă de control? (Mai multe despre asta mai jos.) Atunci așteptăm a treia confirmare.
- Dacă ramele încă nu cad de acord asupra unui singur caracter, fiecare candidat este
ponderat în funcție de cât de sigur a fost cititorul – caracter cu caracter.
Această ultimă regulă și-a dovedit valoarea în timpul testelor. În unul dintre
clipurile noastre de test – un document de înmatriculare în lumină puternică – reflexia a făcut
ca
0din numărul de serie să arate ca8în mai mult de jumătate din cadre. Doar repetarea ar fi ales răspunsul greșit. Dar siguranța modelului în privința acelor8era în mod constant mai mică decât în cazul citirilor curate de0, iar logica de vot este a observat. Scannerul pur și simplu a așteptat cu o secundă mai mult până când dovezile s-au stabilizat – și a returnat numărul VIN corect.
Suma de control care funcționează doar la unele mașini
Numerele VIN conțin un mecanism ascuns de autocontrol: poziția 9 este cifra de control calculată pe baza celorlalte 16 caractere. Este un semnal excelent de verificare – atunci când funcționează. Există însă un aspect important: ea este obligatorie doar pentru vehiculele vândute în America de Nord. Majoritatea numerelor VIN de pe piața europeană nici nu o folosesc. De aceea, scannerul nostru tratează cifra de control ca pe un bonus, niciodată ca pe o cerință obligatorie. Când se potrivește, putem accepta rezultatul mai repede. Când nu se potrivește, nu este o eroare – probabil este pur și simplu o mașină europeană, iar sarcina este preluată de sistemul de votare pe cadre.
Numărul tău VIN nu părăsește niciodată telefonul
Merită spus clar: cadrele din cameră sunt procesate integral pe dispozitivul tău. Modelele de inteligență artificială sunt descărcate în browserul tău; imaginile tale nu sunt trimise nicăieri. Nu există niciun server care să efectueze recunoașterea, nicio fotografie stocată în cloud. Singurul lucru care părăsește telefonul tău este numărul VIN final, din 17 caractere – și doar atunci când treci la pagina cu raportul. Nu a fost doar o decizie legată de confidențialitate. Datorită acestui lucru, scannerul este și rapid (fără drumuri dus-întors la server pentru fiecare cadru) și funcționează cu semnal slab într-o parcare subterană – adică exact acolo unde cel mai des stai lângă numărul VIN.
Cum arată în practică
În testele noastre, numerele VIN de pe parbriz, etichetele de pe uși, VIN-ul ștanțat pe turnul amortizorului și chiar certificatul de înmatriculare – scannerul identifică de obicei numărul VIN corect în una până la patru secunde. Câteva sfaturi sincere despre cum să accelerezi acest proces:
- Lumina este cel mai important factor. Butonul pentru lanternă nu există fără motiv – numerele VIN ștanțate în compartimentul motor le adoră.
- Apropie-te. Numărul VIN ar trebui să umple aproximativ cadrul auxiliar.
- Nu urmări imobilitatea perfectă. Nu ai nevoie de o mână perfect stabilă – sistemul de votare a fost proiectat exact pentru micile mișcări pe care le face o mână reală.
Sub capotă, pe scurt
Pentru cei curioși din punct de vedere tehnic: detecția funcționează pe un model bazat pe YOLO exportat în ONNX, recunoașterea este un model PaddleOCR ajustat, cu un alfabet limitat la VIN-uri, iar ambele rulează într-un singur mediu de execuție WebAssembly (ONNX Runtime) în interiorul unui web worker, astfel încât pagina rămâne receptivă. Corecția perspectivei dintre cele două modele – îndreptarea benzii rotite cu numărul VIN – folosește aceeași matematică pe care o utilizează aplicația ta de scanare a documentelor. Restul este o inginerie atentă în jurul unui singur principiu: citiri ieftine, efectuate frecvent, verificate prin concordanță.
Să învățăm scannerul cum arată un VIN
Recent am adăugat un al treilea „model” – și nu este o rețea neuronală. Este o hartă statistică a modului în care arată VIN-urile reale, construită din peste o jumătate de milion de VIN-uri autentice din registrele auto europene și americane.
Iată ideea. Un VIN nu este un șir aleatoriu – are o gramatică. Primele trei
caractere identifică producătorul, următoarele opt codifică modelul, anul și
uzina, iar fiecare producător respectă propriile tipare rigide (Volkswagen
adoră WVWZZZ…, BMW are propriul dialect). Așa că, atunci când OCR-ul citește
WVW2ZZ…, modelul nostru de limbaj știe că un 2 în acel loc este de mii de
ori mai puțin probabil decât un Z – și preferă în tăcere citirea pe care
producătorul ar fi ștanțat-o de fapt.
În loc să lăsăm rețeaua de citire să aleagă singurul caracter cel mai probabil la fiecare poziție și să sperăm la ce e mai bine, scannerul explorează acum mai multe citiri candidate deodată (o tehnică numită beam search) și punctează fiecare citire atât după ce spun pixelii, cât și după ce spune gramatica VIN-ului. Câștigul este cel mai mare exact acolo unde scanarea este cea mai grea: VIN-urile ștanțate în metal gol, unde un caracter vecin se strecoară în decupaj sau un caracter uzat dispare. Pe cel mai dificil clip de test al nostru, proporția de cadre citite perfect a crescut de la aproximativ 1 din 9 la 3 din 4.
O lecție din testare merită împărtășită: un cititor mai inteligent este un cititor mai consecvent – inclusiv atunci când greșește în mod consecvent. La început, scannerul îmbunătățit citea greșit o cifră uzată în același fel cadru după cadru, iar cadrele se puneau bucuroase de acord asupra răspunsului greșit. Soluția a fost să ridicăm ștacheta: cu modelul de limbaj activ, sistemul de vot cere acum o confirmare independentă suplimentară înainte de a accepta un rezultat. Acuratețea e plăcută; acuratețea demnă de încredere este produsul adevărat.
Și în acord cu tot ce s-a spus mai sus: modelul de limbaj este un fișier de 190 KB care se descarcă împreună cu celelalte modele și rulează în întregime pe telefonul tău. VIN-ul tău tot nu părăsește niciodată dispozitivul.
Încearcă singur: îndreaptă telefonul spre colțul geamului oricărei mașini și scanează numărul VIN.