skip to main | skip to sidebar
68 commenti

Perché Facebook e Instagram creano delle copie ASCII delle nostre immagini?

Fate un piccolo esperimento con me: provate a caricare una foto qualsiasi nel vostro profilo Facebook o Instagram. Poi scoprite il suo indirizzo diretto (per esempio in Facebook cliccate sulla foto per visualizzarla, fate clic destro su di essa, scegliete Copia indirizzo immagine o una voce analoga dal menu e incollate questo indirizzo in una scheda nuova del browser).

Ora aggiungete a questo indirizzo, dopo il suffisso jpg, un ulteriore suffisso txt oppure html. Scoprirete che il social network ha creato delle copie della vostra foto, elaborandola per mostrarla tramite caratteri ASCII monocromatici (per il suffisso txt) e colorati (per il suffisso html). Lo segnala l'utente Twitter Mathias Bynens.

Per esempio, ho postato questa foto nel mio profilo Facebook di test:



Vi ho cliccato sopra per visualizzarla:



Poi ho fatto clic destro sulla foto per ottenerne l'indirizzo diretto, che è questo:

https://fbcdn-sphotos-b-a.akamaihd.net/hphotos-ak-xpf1/t31.0-8/12697450_1020866481307852_6576532120590396572_o.jpg



Ho copiato e incollato questo indirizzo in una nuova scheda del browser e ho aggiunto, dopo il suffisso jpg, l'estensione txt, ottenendo questo indirizzo e l'immagine qui sotto, generata usando i caratteri per creare un mosaico simile alla foto di partenza:



Aggiungendo invece html si ottiene questo indirizzo, con questo risultato:


Idem su Instagram: questa foto ha queste due versioni ASCII.




Perché? Come mai due fra i più importanti e trafficati social network spendono risorse per generare copie elaborate nascoste delle immagini caricate dagli utenti? A quanto pare non lo sa nessuno. Se avete una spiegazione o una teoria, segnalatela nei commenti.
Invia un commento
I commenti non appaiono subito, devono essere tutti approvati da un moderatore. Lo so, è scomodo, ma è necessario per tenere lontani scocciatori, spammer, troll e stupidi: siate civili e verrete pubblicati qualunque sia la vostra opinione; gli incivili di qualsiasi orientamento non verranno pubblicati, se non per mostrare il loro squallore.
Inviando un commento date il vostro consenso alla sua pubblicazione, qui o altrove.
Maggiori informazioni riguardanti regole e utilizzo dei commenti sono reperibili nella sezione apposita.
NOTA BENE. L'area sottostante per l'invio dei commenti non è contenuta in questa pagina ma è un iframe, cioè una finestra su una pagina di Blogger esterna a questo blog. Ciò significa che dovete assicurarvi che non venga bloccata da estensioni del vostro browser (tipo quelle che eliminano le pubblicità) e/o da altri programmi di protezione antimalware (tipo Kaspersky). Inoltre è necessario che sia permesso accettare i cookie da terze parti (informativa sulla privacy a riguardo).
Commenti
Commenti (68)
Si vorranno tutelare per capire se quella foto è stata mai postata sul loro profilo... oppure per avere una prova che quella foto che qualcuno ha scaricato e pubblicato altrove "appartiene" a Facebook/Instagram
A me, su FB, non va.

Anche perché dopo l'estensione jpg ho un sacco di parametri passati in GET che se rimuovo non carica più la foto. Se cambio e metto .txt non esce niente.

Ho provato con diverse immagini.
Presumo sia il metodo utilizzato per effettuare ricerche per immagini simili. Una sorta di indicizzazione.
La foto tua di esempio viene caricata su https://fbcdn-sphotos-b-a.akamaihd.net..., tutte quelle che ho guardato io sono su https://scontent-mxp1-1.xx.fbcdn.net...... non cambio il caricamento diretto da smartphone piuttosto che da PC. Su questo hosting non riesco a ottenere il txt o l'html.

La foto MIA di esempio è questa https://www.facebook.com/photo.php?fbid=10208784840160624&set=a.10207664932123623.1073741825.1301542100&type=3&theater cliccando sul suo url puro ottengo un link che non finisce con jpg, in ogni caso il txt alla fine o subito dopo il jpg non genera il file di testo.
non so se è il caso di postare questi link, vedi tu
Deve essere qualche sorta di funzione di conversione, ho provato ad aggiungere altre estensioni (anche deliberatamente vintage) e il risultato e' stato questo:

.PNG: presenta la versione in PNG del file
.BMP: presenta la versione in JPG del file
.TIF: presenta la versione in JPG del file
.GIF: presenta la versione in PNG del file

Queste estensioni invece restituiscono l'errore "Invalid Request": PDF, GEM, TGA, CDR, AI, RAW, TEST, /etc/passwd, PIC, PPM, WEBP, SVG, HDR
una specie di hash?
Effettivamente è un po' sconcertante... a meno che non vogliano lasciare una porta aperta ad utenti che utilizzino un terminale VT100 oppure con Mosaic, il che però non mi sembra molto credibile...
Sparo la mia: potrebbero essere utilizzate per indicizzare e quindi ricercare più facilmente i contenuti presenti nelle immagini stesse.
Leggevo giusto poco fa a come la gente fa nascere le teorie del complotto: il nostro cervello ci inganna facendoci credere ci sia una intenzione umana o non banale per eventi apparentemente grossi.

Si tratterà di un easter egg: probabilmente le copie non sono copie residenti su disco ma generate al volo con delle semplici regole di URL redirect che mappano verso uno script di ASCII art generator (per quanto, mantenerle su disco occuperebbe uno spazio di pochi KB).
forse per inserire al loro interno messaggi?
Perché queste reappresentazioni testuali sono più semplici da elaborare. Si tratta di una specie di linguaggio intermedio su cui ad esempio è più agevole cercare pattern, o immagini simili ingrandite o rimpicciolite, usando algoritmi. Si tratta cioè di una specie di firma digitale che contiene l'essenza dell'immagine tralasciando tutti gli altri orpelli grafici. Quello che non mi spiego è perché questi files siano disponibili pubblicamente. Mi sarei apsettato che fossero un prodotto intermedio (privato, non pubblico) degli algoritmi di ricerca.
Potrebbe essere un modo per facilitare l'inserimento dei tagli suo visi, o una sorta di cache delle immagini a bassa qualità.. Però non capisco i motivi.
Sulla documentazione per i programmatori non c'è nulla?
Può essere che non le memorizzino, ma sia il risultato di una elaborazione just in time?
Il suffisso aggiuntivo potrebbe essere usato come parametro e l'immagine essere il risultato di una elaborazione eseguita sull'immagine memorizzata prima che venga inviata al browser.
Tecnologia per non vedenti?
Sorry, letto male l'articolo... anziché "generare" avevo "immaginato" memorizzare
PS ho provato... ma ricevo solo un errore
Mi sembra plausibile che le versioni ASCII e HTML siano piu' semplici per l'identificazione di figure nelle immagini, operazioni di apprendimento e categorizzazione con machine learning e simili
Non so, potrebbe facilitare il riconoscimento facciale per il tag o di alcuni elementi dell'immagine per catalogare le immagini?
Probabilmente ha a che vedere con features tipo face-recognition e simili...
La butto lì, un po' per easter egg e un po' per ricerca.

Di certo è una cosa interessante.
Magari semplificare le immagini in quel modo le può rendere più "riconoscibili" da un software? Tipo qualcosa che si occupi di copyright o di trovare determinati elementi? Comunque interessante, grazie della segnalazione.
A me non funziona, l'indirizzo che recupero dalle foto contiene dopo il suffisso jpg il ? seguito da una stringa alfanumerica. Rimuovendola non mi visualizza l'immagine, senza alcuna notifica di errore. Inserendo il suffisso txt idem.
Probabilmente sono generati al volo nel momento in cui l'url viene richiesto, e in ogni caso non ci vogliono tante risorse per farli. Per quanto riguarda la motivazione, credo sia solo un gioco. Google aveva ASCIIzzato tutto Google maps come pesce d'aprile di qualche anno fa.

Marco
Potrebbero star lavorando a qualche software di riconoscimento immagini, un po' come Google che gia' e' in grado di fare la ricerca per immagini?

Magari convertono le immagini in versione ASCII in modo da poter effettuare un confronto piu' "diretto"?

Devo dire che comunque, su foto meno contrastate, l'effetto e' pessimo...
Ho pensato a quattro ipotesi:
1 (tecnica) per creare un'anteprima che pesi meno di 1kb e che sia visibile anche da interfaccia testuale.
2 (umanitaria) Per portare le foto dei social anche in quei posti dove la connessione internet è pessima senza sovraccaricare il traffico di rete
3 (anticopia) per confrontare foto differenti per capire se sono copie senza sprecare risorse di calcolo
4 (cattiva) per conservare legalmente una copia anche se l'utente volesse eliminarla
Mmmmm, le passano ad un AI per verificare se riconosce l'immagine originale ?
Sarà qualche esperimento da sfoderare all'occasione, come quando si sono inventati la fuffa delle foto ricoperte dalla bandiera arcobaleno o cose simili.

Si inventano una sequela di queste cose e poi se ne hanno l'occasione li tirano fuori per qualche becera campagna pulisci coscienza
A buon senso avrebbe senso utilizzarle per connessioni molto lente, come quelle che immagino ci siano nei paesi più poveri. Incidentalmente è anche dove facebook ha più possibilità di espandersi.
Immagino per lo stesso motivo che con Google puoi fare un "do a barrel roll".
Butto la mia: per ottimizzare lo spazio disco sui server e una più facile catalogazione delle foto nel database.
Spiegazione: su questi social network vengono caricate milioni di foto molte delle quali sono semplicemente richiami della stessa foto, salvandola con formati diversi dal jpg il sistema riesci a catalogarla più facilmente e richiamarla (eventualmente ricostruirla)
E' solo una supposizione al volo
Ciao
Questo commento è stato eliminato dall'autore.
A me non funziona, o forse sbaglio qualcosa. Gli indirizzi delle immagini sono di questo tipo:

https://scontent-ams3-1.xx.fbcdn.net/hphotos-xpa1/v/t1.0-9/226204_1070825135471_1505_n.jpg?oh=b9943d79dcd8d21791ab3cdec820e2b4&oe=573F3979

tagliando la parte dopo il suffisso .jpg ottengo un indirizzo che non visualizza nulla. Se sostituisco il suffisso .jpg con .txt mantendendo la stringa seguente (?oh=b9943d79dcd8d21791ab3cdec820e2b4&oe=573F3979) ancora non visualizzo nulla.

Concordo con la tesi: più semplice l'analisi tramite software, tag, riconoscimento facciale, ecc
Aggiornamento:
sulle mie foto non funziona, ma su foto di miei amici spagnoli o americani funziona.
Ho provato anche a fare una vpn verso altri paesi (Germania, USA) sperando di finire su una content cache diversa, ma la cosa non cambia.
Mi sentirei di escludere tutte le teorie basate su machine-learning, tipo riconoscimento dei visi e persino hashing (una stringa identificativa dell'immagine). A meno che non stiano lavorando ad algoritmi fantastici e rivoluzionari, non è la prassi e dubito fortemente funzioni meglio dei cari, vecchi pixel.
Per quanto riguarda l'utilizzo di immagini con connessioni lente, con un codice ascii ha 7 bit di base e quello mi sembra è Unicode, quindi almeno 8 bit, più 8 bit di codifica del colore e non sono sicuro che l'evidenziazione sia sempre in nero, dubito che quest'immagine occupi meno spazio di un bel jpeg scalato.
Inizialmente non funzionava neanche a me. Poi ho visualizzato l'immagine a schermo intero e da lì ho preso l'indirizzo. Probabilmente FB memorizza diverse versioni dell'immagine a risoluzioni diverse e solo quella con i maggiori dettagli è convertita in txt e html.
La cosa inquietante sarebbe se uno inserisse una immagine già convertita ASCIIart e cambiando l'url ritrovasse il sorgente.
Dubito fortemente che si tratti di una tecnica di indicizzazione o per confronti automatici: non funzionano cosi', c'e' poco che si possa fare con una versione ascii art di un'immagine. Vista la presenza anche di altri formati di conversione, secondo me semplicemente hanno un pacchetto software che processa tutte le immagini e genera una serie standard di formati. Per qualche motivo tra questi formati ci sono gli ascii art, forse come easter egg. L'ipotesi che si tratti di un'anteprima leggerissima potrebbe anche starci per il formato txt, ma non per il formato html visto che il file prodotto e' enorme (molto piu' della jpg corrispondente) e peraltro appesantisce terribilmente i browser.
Viene generata al volo solo se viene messa l'estensione, è una easter egg, non lo fanno sistematicamente per tutte le immagini
Be, credo possano essere esperimenti per cercare di riconoscere dei pattern nelle foto , o per motivi di catalogazione, o magari per altri motivi, tipo la censura.....
Io voto per Luigi Rosa.

Mi pare sensato implementare una funzione di conversione tra formati all'interno di FB: in tal modo, se la tecnologia o le esigenze cambiano, sarà molto semplice convertire le immagini: basterà cambiare l'estensione.

Chissà se la stessa cosa si può fare anche coi video.
Quindi, a completamento del mio commento precedente, quelle immagini non ci sono ma vengono create "on demand" dal server. Cosicché se FB verrà reso disponibile per un apparecchio che supporta, per esempio, solo i caratteri ASCII le foto saranno visualizzabili lo stesso.
La conversione di una immagine in ASCII (o HTML, che è l'ASCII con i caratteri colorati) è una procedura che computazionalmente non è molto intensiva. Inoltre le richieste per generare queste immagini sono probabilmente irrisorie, indi a livello di carico computazionale inesistente (se comparato a tutto quello che fa Facebook).

Le immagini per Facebook sono probabilmente la più grossa bestia nera: vengono caricate circa 4000 immagini al secondo (e questo è un dato del 2013), per un totale giornaliero di 300 milioni.
Se da una parte è un carico immenso (spazio disco, elaborazione, costo server, duplicazione geografica... etc etc) dall'altra è una immensa fonte di campioni per fare ricerca.
La ricerca però dubito sia fatta su versioni convertite in ASCII, insomma ci sono mille cose che si possono fare con le immagini e la versione ASCII è talmente arbitraria (non esiste 1 maniera per fare la conversione ma decine di algoritmi) che non so che valore possa avere. Chi ne capisce qualcosa di elaborazione e riconoscimento immagini probabilmente può spiegarlo molto meglio di cosi.

Penso che la versione ASCII non sia salvata (e anche se lo fosse non ha alcun peso rispetto all'immagine originale).
Siccome non è pubblicizzato è probabilmente una idea nella direzione dell'accesso a Facebook (internet?) per tutti.
Facebook è da anni orientato alla distribuzione di internet, fin dalla fondazione di Internet.org.
L'idea di una versione dell'immagine a peso ridotto favorirebbe la fruizione di immagini anche da parte di chi ha una connessione lenta in un luogo in pieno digital divide.

Ora, l'idea era questa. Poi ho fatto un controllo.
Prendendo l'immagine di Paolo ad esempio ecco la dimensione delle varie versioni
JPG 293kB
TXT 21.5kB (7% l'originale)
HTML 804kB (274% l'originale)
PNG 2.7MB (943% l'originale)

Direi che è impensabile che vengano salvate tutte le versioni. Sono generate al volo ad ogni richiesta e non salvate.
Tutto partendo dalla JPEG originale.
Se cosi non fosse ogni immagine occuperebbe il 1225% in più di spazio disco, e contando 300 milioni di immagini caricate al giorno sarebbe un costo motivato da quale ragione? un inside joke?

Suppongo esista una sola versione originale (in molte copie in giro per il mondo) e i server la restituiscono in vari formati generandola al volo (poi magari per immagini molto richieste in uno specifico formato viene tenuta una cache).

Spero d'aver dato un contributo alla discussione.
Ciao
Simone
Perché? Come mai due fra i più importanti e trafficati social network spendono risorse per generare copie elaborate nascoste delle immagini caricate dagli utenti? A quanto pare non lo sa nessuno. Se avete una spiegazione o una teoria, segnalatela nei commenti.

Forse trasformare le figura in ascci rende piu' semplice riconoscere immagini uguali o simili ... oppure una ommagine ritagliata...
il passaggio dall'immagine in asciii fa perderre molte "informazioni" ma rende piu' semplice il confronto fra differenti immagini.
Come fate ad esser sicuri che i vari formati siano memorizzati e non solo generati al momento?
Magari è una funzione che cercano di implementare per differenziare fra vari formati ed hanno lasciato il .txt.
Che so magari usano imagemagik semplicemente.

Ho detto una cavolata?
A parte il fatto che neppure a me funziona, ma tenuto conto di quando notato da Luigi Rosa, la spiegazione più probabile mi pare che usino una libreria per la conversione delle immagini che le fornisce in diversi formati tra i quali ANCHE ASCII e html, e invece di rimuovere o disabilitare quella parte, l'hanno lasciato "sai mai che serva prima o poi"
Faccio 2 ipotesi: la prima (assolutamente poco probabile) per chi usa un browser con capacità di solo testo, la seconda perché usano una libreria o un prodotto di terzi per gestire le immagini che prevede anche il formato txt e quindi questo non è altro che un effetto collaterale.

Nota: la mia impressione è che vengano calcolate just-in-time.
Stesso problema di sopra
L'unica spiegazione plausibile, ammesso che non sia un easter egg, è che venga utilizzato per mappare in modo testuale contenuti tradizionalmente difficili o impossibili da trattare (per indicizzazione, ricerca, scansione di immagini) via codice. In pratica riduce le immagini binari a file di testo a mo' di matrice... forse.
O Paolo vuole provare a generare una notizia virale ma fake :D
Può essere il side effect di qualche parte abbandonata del codice: magari quando l'hanno fatta serviva a qualche cosa, poi hanno cambiato quella funzione ed il codice è rimasto là.
Domanda potenzialmente stupida e da non esperto, rivolta a tutti quelli che hanno risposto che serve ad indicizzare:

non è più efficace fare una trasformata di fourier (FFT)?
Oppure il buon Paolo ha pubblicato con largo anticipo l'articolo che preparato per il primo d'aprile!
è la tecnica per riconoscere le tette e censurarle meglio
Le immagini si indicizzano con le strutture piramidali, non ci vedo un grande vantaggio nel convertirle in ashii
Staranno allenando qualche Convolutional Neural Network e renderanno pubblici degli output, magari la procedura è automatica se l'algoritmo trova un'immagine "interessante" e ne crea automaticamente la conversione, oppure come suggeriscono alcuni, la conversione viene fatta sul momento di richiesta dell'url (però mi sembra di avere capito che ad alcuni non funziona).
Comunque sia mi sembra un po' in stile Deep Dream Generator della Google, il cui fine sembra più artistico che reale ma non è così. Più che altro il fatto che rendano disponibili le immagini "convertite" mi fa pensare o che è una distrazione ("bug") oppure è voluto quindi easter egg.
Sono d'accordo con Simone Cingano sul fatto che siano generate al volo.
La mia teoria è che esista (o che sia allo studio) una versione di facebook servita come stream di testo (come un'applicazione riga di comando per capirsi). Scopo? Mah, archiviazione su supporti legacy? Analisi automatizzata dello stream in tempo reale per scovare trend? L'immagine ascii è leggera e averla in testo, assieme al resto dello stream non richiede più di una sola richiesta (anziché una richiesta per ciascuna risorsa come quando si naviga dal browser). Quindi una sola connessione potrebbe essere in grado di ospitare lo stream in tempo reale di milioni di persone senza sovraccaricare un server, anzi...
...inoltre in uno stream siffatto la rimozione di immagini utente non intaccherebbe lo stream passato e potrebbe avere il valore di log storico.
La copia in jpg è per gli esseri umani.
Il txt è per i rettiliani, che sono ancora indietro.
Quella in html è per il Birdemberger...

Facile, no? (Zuckerberg, ti abbiamo scoperto!!!!!11!!!!)
Se è vero è una nerdata paurosa!
Roba da anni '80

---Alez
Ritengo che la conversione sia fatta al volo e sia possibile in diversi formati perché esistono diverse piattaforme e diversi dispositivi di output (CSS docet).
Neanche a me funziona pero' forse e' un metodo per fare un backup che occupi meno spazio.
Sabry: ma le versioni "testuali" ne occupano molto di più di spazio, le uniche meno ingombranti sono quelle, inutili, in bianco e nero.
Qualcuno lo ha chiesto a Mark? :)
Sono un programmatore web da 15 anni, e penso di avere la spiegazione.

Funziona così:
Uno dei pattern di programmazione più diffusi è il Model-View-Controller, che porta alla separazione del codice di elaborazione dalla sua presentazione finale. Significa che l'output lo decidi alla fine.

Molti framework utilizzano il concetto di "filtri" in output, dove in questo caso l'estensione implica l'utilizzo di un certo tipo di output.
Anche le semplici pagine html si possono vedere come l'esecuzione di uno script con output html. Ad esempio "profilo.html" potrebbe essere l'output in html dello script/azione/funzione "profilo". Se non sbaglio nella documentazione di facebook (ma anche di google etc) ci sono diversi esempio di oggetti che cambiano output semplicemente cambiando estensione. Succede spesso con .json e .xml.

Quindi penso sia semplicemente il fatto che hanno implementato un tipo di output/filtro "jpg to ascii" e quello sia forse solo uno dei tanti possibili modi di usarlo.

Potrebbero anche averlo fatto per noia, chi lo sa :)
Per chi pensa che il fatto di stare sul dominio "cdnqualcosa" significhi essere già salvata, provate a cambiare alcuni degli altri numeri dei link postati nell'articolo (quelli prima del nome del file).
La CDN può fungere da proxy, e quando una cosa non ce l'ha la richiede indietro.

Provando a cambiare un numero alla volta anche solo dalla richiesta dell'immagine ho verificato che alla prima richiesta impiega 200ms e alle successive 45ms.

Quindi è compatibile con l'ipotesi "on the fly" + cache sulla CDN.
Sche sciocco non averlo notato prima, questa "CDN" serve le immagini elaborate al volo e messe in cache:
/t51.2774-15/sh0.08/e35/p640x640/

Cosa saranno mai
t 51.277-15
sh 0.08
e 35
p 640x480
?

Sembrano i termini fotografici per esposizione, "shutter" e dimensioni. Cambiando i valori si riesce ad ottenere un'immagine sovraesposta :)
(Non tutte le dimensioni ed i valori sono accettati)
@Lobotomia, se prima clicchi "opzioni" - "visualizza a schermo intero" e poi fai la procedura funziona. Quel link è per la modalità teatro ed è un po' diverso.
Per usare lynx? https://en.wikipedia.org/wiki/Lynx_(web_browser)