Gemini 2.5 Flash-Lite è il modello a cui mi rivolgo quando devo tirar fuori del testo da uno screenshot o da una foto storta. È la variante più piccola della famiglia Gemini, proprietaria di Google DeepMind, e il free tier di AI Studio basta per il volume di immagini che gli passo in una settimana tipo: foto di etichette MAC address dietro gli access point, screenshot di terminal con output non selezionabile, asset tag stampati su rack e switch da archiviare in inventory, qualche pagina di documentazione cartacea che mi capita in mano da un fornitore.

Lo uso con attenzione, però, perché la policy di Google sul free tier è tutto fuorché amichevole. Sul punto torno alla fine, ed è la parte più importante di questo articolo.

Setup con google-genai SDK

Servono due cose: una API key da AI Studio (https://aistudio.google.com/apikey) e il pacchetto Python ufficiale google-genai. La key la tengo nel file di credenziali caricato dalla shell, in modo da non averla mai in chiaro.


pipx install google-genai
export GEMINI_API_KEY="..."

A questo punto un OCR su un PNG è una manciata di righe:


python3 -c "
from google import genai
client = genai.Client()
resp = client.models.generate_content(
    model='gemini-2.5-flash-lite',
    contents=[
        {'inline_data': {
            'mime_type': 'image/png',
            'data': open('etichetta.png', 'rb').read()
        }},
        'Estrai tutto il testo da questa immagine, mantenendo a capo e elenchi. Non aggiungere commenti.'
    ]
)
print(resp.text)
"

Per file più grandi di qualche MB conviene caricarli prima con client.files.upload(...) e passare il file handle, ma per le foto normali da fotocamera l’inline base64 va benissimo.

Un esempio reale: MAC address da un’etichetta sgranata

Sabato dovevo recuperare il MAC address da una foto sgranata di un’etichetta dietro un access point in un sottotetto poco illuminato. Scatto al volo col cellulare appeso a una scala: JPEG da circa 3 MB con la sequenza esadecimale leggibile a fatica anche zoomando. Mi serviva il MAC per registrare una reservation DHCP, e rifare la foto sarebbe stato fastidiosissimo.

Ho scaricato l’immagine, ho lanciato lo snippet di sopra, e in meno di un secondo mi è uscito il MAC esatto, con anche modello e serial number letti dalla stessa etichetta. Su font OCR-B compresso e illuminato di sbieco, Flash-Lite ha tenuto duro dove tesseract sullo stesso file mi aveva restituito una stringa con tre caratteri sbagliati.

Cosa fa bene

Su testo stampato pulito, font da macchina, anche su sfondi rumorosi o con riflessi, la resa è solida. Sui layout in colonne e tabelle conserva la struttura senza dover rimettere a mano i ritorni a capo. Sui codici alfanumerici (MAC, serial, asset tag) mi ha quasi sempre tolto le castagne dal fuoco rispetto a un OCR locale. Latenza nell’ordine del secondo, e i prompt vengono interpretati senza isterismi: “trascrivi solo l’IP” o “trascrivi il blocco di output, niente altro” funzionano.

Cosa fa meno bene

Sulla calligrafia umana è ondeggiante: con grafia pulita se la cava, con grafia frettolosa inventa parole plausibili invece di ammettere di non riuscire a leggere. Su scansioni di documenti vecchi con macchie e sbavature gli risulta più facile inventare il testo che dovrebbe esserci che dichiararsi incerto, ed è il fallimento più sgradevole. Sui layout multi-colonna molto fitti può fondere righe di colonne diverse. Sulle immagini con poco testo e molti dettagli grafici tende a descrivere la scena invece di estrarre, e va imboccato con un prompt esplicito.

Privacy: il punto critico

Qui devo essere franco. Sul free tier di AI Studio, i dati che invio (prompt, immagini, output) vengono usati da Google per migliorare i propri modelli, e non esiste un opt-out nativo sul free: l’unica via per non farli usare è passare al paid tier con un prepay minimo. Esiste inoltre un periodo di abuse monitoring di 55 giorni durante il quale i log restano conservati. Il free tier è contrattualmente vietato a chi opera in EEA, UK e Svizzera per servire utenti di quelle aree, quindi se l’app è destinata a un pubblico europeo il free non è una scelta legale.

Il modello in sé è proprietary closed, non self-hostabile: una chiamata a Flash-Lite vuol dire necessariamente un round-trip verso Google, con le regole di Google.

Cosa non gli mando

Per coerenza con quanto sopra, non gli passo mai screenshot con IP privati di reti che gestisco, hostname interni, password o token in chiaro, output di log non pubblici, asset di clienti, contenuti riservati. Se l’immagine ha porzioni sensibili, le copro a colpi di rettangolo nero prima di mandarla, oppure ripiego sul fallback locale.

Il fallback è doppio: per OCR puro su immagini semplici uso tesseract sul portatile, gratis e offline; per immagini più ostiche dove serve un minimo di “comprensione” del layout, mi rivolgo a un modello vision-capable locale via Ollama sul server di casa. Latenza più alta, qualità un po’ sotto Flash-Lite sulle calligrafie, ma tutto resta in casa.

In pratica

Flash-Lite lo apro quando il testo da estrarre è pubblico per natura (etichette di hardware in commercio, screenshot di output che finiranno comunque sul blog, foto di pagine di datasheet reperibili online) e voglio una resa che tesseract non mi dà. Per tutto ciò che ha contesto sensibile, anche solo di striscio, tesseract o Ollama in casa, senza eccezioni. La comodità non vale lo scambio.


Immagine generata con Cloudflare Workers AI / FLUX.

Articolo originale su rpi.temporiti.net