Litterae.eu
Humanities & IT


Maggiori velocità e precisione per la libreria Face Recognition

L'esperimento di cui ho dato conto qualche giorno fa è stato immaginato mentre preparavo uno strumento per velocizzare il processo e raffinare ulteriormente la precisione di riconoscimento facciale della libreria face_recognition (per brevità FR).
FR già di suo ha un livello di accuratezza molto elevato: dopo un po' di impiego arriva al 98% circa di precisione. Il che significa che, tra falsi positivi e mancate rilevazioni, sbaglia circa due volte su cento. Risultato già ottimo, ma su larga scala forse sarebbe ulteriormente da migliorare; ad esempio, 2% su un milione di immagini significa infatti ventimila errori. Non proprio una quisquilia.
Inoltre il modo di impiego suggerito dalla documentazione disponibile, ossia mappare e confrontare tutte le foto nella cartella B con tutte quelle della cartella A, è un po' lento, poiché ogni volta il computer deve ripetere interamente il processo da capo; nel caso di qualche centinaio di foto si va già nell’ordine di ore.

Per fortuna un esempio di implementazione di FR in un piccolo script in Python mi è venuto in soccorso, mostrando la possibilità di salvare la mappatura di un viso in un piccolo file di testo.
FR infatti traduce ogni viso in un vettore di 128 numeri; salvando i vettori in una tabella e lavorando su quella, si evita alla libreria di rimappare ogni volta quanto già mappato, risparmiando parecchio tempo. Questo dunque il primo compito dello strumento di cui sopra.
L'estrazione dei vettori per FR è di per sé abbastanza rapida e, una volta estratti, si possono confrontare tra loro al posto delle fotografie vere e proprie; a questo punto la comparazione è quasi istantanea.
Il confronto tra vettori consiste nello stabilire la distanza tra l'uno e l'altro attraverso il calcolo del coseno di similitudine (che lascio spiegare a chi sa farlo molto meglio di me). FR già compie questa operazione quando confronta le fotografie; si tratta dunque di farla eseguire pari pari a uno script esterno che lavora direttamente sui vettori. Essendo lo script indipendente da FR, può essere anche in un linguaggio diverso da Python; nel mio caso ho utilizzato PHP.

FR è preimpostata con una tolleranza del 6%: vale a dire che il riconoscimento facciale scatta se la libreria rileva una somiglianza almeno del 94% tra le mappe di due volti. Nella pratica questo può tradursi in una serie di falsi positivi: ad esempio nel caso di due persone A e B piuttosto somiglianti tra loro, FR può rispondere che la faccia da analizzare appartiene sia alla persona A che alla persona B. Indicando allo script di ripetere ricorsivamente il confronto del vettore del volto da identificare con tutti i vettori del volto A e tutti quelli di B fino a trovare il vettore che, attraverso il calcolo del coseno di similitudine, risulta più prossimo, il livello di precisione si avvicina drasticamente al 100%. E questo era il secondo compito del mio strumento.
Ecco dunque che mi sono ritrovato tra le mani una sorta di sintonizzatore per face_recognitiuon, un FR Tuner, che ne accelera e migliora le prestazioni, operando direttamente sulle sequenze di numeri da essa generate come mappature di fotografie con volti.


Site designed by litterae.eu. © 2004-2024. All rights reserved.
Info GDPR EU 2016/679: no cookies used, no personal data collected.