Potente analisi delle immagini con Google Cloud Vision e Python
Pubblicato: 2022-03-10Di recente ho creato un'app web per gestire le spese personali degli utenti. Le sue caratteristiche principali sono scansionare le ricevute di acquisto ed estrarre i dati per un'ulteriore elaborazione. L'API di Google Vision si è rivelata un ottimo strumento per ottenere un testo da una foto. In questo articolo, ti guiderò attraverso il processo di sviluppo con Python in un progetto di esempio.
Se sei un principiante, non preoccuparti. Avrai solo bisogno di una conoscenza di base di questo linguaggio di programmazione, senza altre competenze richieste.
Cominciamo, vero?
Mai sentito parlare di Google Cloud Vision?
È un'API che consente agli sviluppatori di analizzare il contenuto di un'immagine attraverso i dati estratti. A tale scopo, Google utilizza modelli di machine learning addestrati su un ampio set di dati di immagini. Tutto ciò è disponibile con una singola richiesta API. Il motore dietro l'API classifica le immagini, rileva gli oggetti, i volti delle persone e riconosce le parole stampate all'interno delle immagini.
Per farti un esempio, tiriamo fuori il tanto amato Giphy. Hanno adottato l'API per estrarre i dati dei sottotitoli dalle GIF, il che ha comportato un miglioramento significativo dell'esperienza utente. Un altro esempio è realtor.com, che utilizza l'OCR dell'API Vision per estrarre il testo dalle immagini dei cartelli in vendita presi su un'app mobile per fornire maggiori dettagli sulla proprietà.
Apprendimento automatico a colpo d'occhio
Iniziamo rispondendo alla domanda che molti di voi hanno probabilmente sentito prima: cos'è il Machine Learning?
L'idea generale è quella di sviluppare un modello programmabile che trovi modelli nei dati forniti. Maggiore è la qualità dei dati forniti e migliore è la progettazione del modello utilizzato, il risultato più intelligente sarà prodotto. Con il "apprendimento automatico intuitivo" (come Google chiama il loro Machine Learning tramite i servizi API), puoi facilmente incorporare una parte dell'intelligenza artificiale nelle tue applicazioni.
Letture consigliate : Guida introduttiva all'apprendimento automatico
Come iniziare con Google Cloud
Iniziamo con la registrazione a Google Cloud. Google richiede l'autenticazione, ma è semplice e indolore: dovrai solo archiviare un file JSON che includa la chiave API, che puoi ottenere direttamente da Google Cloud Platform.
Scarica il file e aggiungi il suo percorso alle variabili di ambiente:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/apikey.json
In alternativa, in fase di sviluppo, puoi supportarti con il metodo from_serivce_account_json()
, che descriverò ulteriormente in questo articolo. Per ulteriori informazioni sull'autenticazione, consulta la documentazione ufficiale di Cloud.
Google fornisce un pacchetto Python per gestire l'API. Aggiungiamo l'ultima versione di google-cloud-vision==0.33 alla tua app. È ora di programmare!
Come combinare Google Cloud Vision con Python
Innanzitutto, importiamo le classi dalla libreria.
from google.cloud import vision from google.cloud.vision import types
Una volta risolto, ora avrai bisogno di un'istanza di un client. Per fare ciò, utilizzerai una funzione di riconoscimento del testo.
client = vision.ImageAnnotatorClient()
Se non memorizzerai le tue credenziali nelle variabili di ambiente, in questa fase potrai aggiungerle direttamente al client.
client = vision.ImageAnnotatorClient.from_service_account_file( '/path/to/apikey.json' )
Supponendo che tu memorizzi le immagini da elaborare in una cartella "immagini" all'interno del catalogo del tuo progetto, apriamone una.
image_to_open = 'images/receipt.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read()
Il prossimo passo è creare un oggetto Vision, che ti permetterà di inviare una richiesta per procedere con il riconoscimento del testo.
image = vision.types.Image(content=content) text_response = client.text_detection(image=image)
La risposta è costituita dalle parole rilevate memorizzate come chiavi descrittive, dalla loro posizione sull'immagine e da una previsione linguistica. Ad esempio, diamo un'occhiata più da vicino alla prima parola:
[ ... description: "SHOPPING" bounding_poly { vertices { x: 1327 y: 1513 } vertices { x: 1789 y: 1345 } vertices { x: 1821 y: 1432 } vertices { x: 1359 y: 1600 } } ... ]
Come puoi vedere, per filtrare solo il testo, devi ottenere una descrizione "su tutti gli elementi". Fortunatamente, con l'aiuto arriva la potente comprensione dell'elenco di Python.
texts = [text.description for text in text_response.text_annotations] ['SHOPPING STORE\nREG 12-21\n03:22 PM\nCLERK 2\n618\n1 MISC\n1 STUFF\n$0.49\n$7.99\n$8.48\n$0.74\nSUBTOTAL\nTAX\nTOTAL\nCASH\n6\n$9. 22\n$10.00\nCHANGE\n$0.78\nNO REFUNDS\nNO EXCHANGES\nNO RETURNS\n', 'SHOPPING', 'STORE', 'REG', '12-21', '03:22', 'PM', 'CLERK', '2', '618', '1', 'MISC', '1', 'STUFF', '$0.49', '$7.99', '$8.48', '$0.74', 'SUBTOTAL', 'TAX', 'TOTAL', 'CASH', '6', '$9.', '22', '$10.00', 'CHANGE', '$0.78', 'NO', 'REFUNDS', 'NO', 'EXCHANGES', 'NO', 'RETURNS']
Se guardi con attenzione, puoi notare che il primo elemento dell'elenco contiene tutto il testo rilevato nell'immagine memorizzato come stringa, mentre gli altri sono parole separate. Stampiamolo.
print(texts[0]) SHOPPING STORE REG 12-21 03:22 PM CLERK 2 618 1 MISC 1 STUFF $0.49 $7.99 $8.48 $0.74 SUBTOTAL TAX TOTAL CASH 6 $9. 22 $10.00 CHANGE $0.78 NO REFUNDS NO EXCHANGES NO RETURNS
Abbastanza preciso, vero? E ovviamente abbastanza utile, quindi giochiamo di più.
Cosa puoi ottenere da Google Cloud Vision?
Come accennato in precedenza, Google Cloud Vision non riguarda solo il riconoscimento del testo, ma ti consente anche di scoprire volti, punti di riferimento, proprietà dell'immagine e connessioni web. Con questo in mente, scopriamo cosa può dirti sulle associazioni web dell'immagine.
web_response = client.web_detection(image=image)
Ok Google, sai davvero cosa è mostrato sull'immagine che hai ricevuto?
web_content = web_response.web_detection web_content.best_guess_labels >>> [label: "Receipt"]
Buon lavoro, Google! È davvero una ricevuta. Ma ti diamo un po' più di esercizio: riesci a vedere qualcos'altro? Che ne dici di più previsioni espresse in percentuale?
predictions = [ (entity.description, '{:.2%}'.format(entity.score))) for entity in web_content.web_entities ] >>> [('Receipt', '70.26%'), ('Product design', '64.24%'), ('Money', '56.54%'), ('Shopping', '55.86%'), ('Design', '54.62%'), ('Brand', '54.01%'), ('Font', '53.20%'), ('Product', '51.55%'), ('Image', '38.82%')]
Tanti spunti preziosi, ben fatto, mio onnipotente amico! Puoi anche scoprire da dove proviene l'immagine e se ha delle copie?
web_content.full_matching_images >>> [ url: "https://www.rcapitalassociates.com/wp-content/uploads/2018/03/receipts.jpg", url:"https://media.istockphoto.com/photos/shopping-receipt-picture-id901964616?k=6&m=901964616&s=612x612&w=0&h=RmFpYy9uDazil1H9aXkkrAOlCb0lQ-bHaFpdpl76o9A=", url: "https://www.pakstat.com.au/site/assets/files/1172/shutterstock_573065707.500x500.jpg" ]
Sono impressionato. Grazie, Google! Ma uno non è abbastanza, potresti farmi tre esempi di immagini simili?
web_content.visually_similar_images[:3] >>>[ url: "https://thumbs.dreamstime.com/z/shopping-receipt-paper-sales-isolated-white-background-85651861.jpg", url: "https://thumbs.dreamstime.com/b/grocery-receipt-23403878.jpg", url:"https://image.shutterstock.com/image-photo/closeup-grocery-shopping-receipt-260nw-95237158.jpg" ]
Dolce! Molto bene.
Esiste davvero un'intelligenza artificiale in Google Cloud Vision?
Come puoi vedere nell'immagine qui sotto, gestire le ricevute può diventare un po' emotivo.
Diamo un'occhiata a ciò che l'API Vision può dirti su questa foto.
image_to_open = 'images/face.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read() image = vision.types.Image(content=content) face_response = client.face_detection(image=image) face_content = face_response.face_annotations face_content[0].detection_confidence >>> 0.5153166651725769
Non male, l'algoritmo è sicuro per più del 50% che ci sia un volto nell'immagine. Ma puoi imparare qualcosa sulle emozioni che ci stanno dietro?
face_content[0] >>> [ ... joy_likelihood: VERY_UNLIKELY sorrow_likelihood: VERY_UNLIKELY anger_likelihood: UNLIKELY surprise_likelihood: POSSIBLE under_exposed_likelihood: VERY_UNLIKELY blurred_likelihood: VERY_UNLIKELY headwear_likelihood: VERY_UNLIKELY ... ]
Sorprendentemente, con un semplice comando, puoi verificare la verosimiglianza di alcune emozioni di base, nonché le proprietà dei copricapi o delle foto.
Quando si tratta di rilevare i volti, devo indirizzare la tua attenzione su alcuni dei potenziali problemi che potresti incontrare. Devi ricordare che stai consegnando una foto a una macchina e sebbene l'API di Google utilizzi modelli addestrati su enormi set di dati, è possibile che restituisca risultati inaspettati e fuorvianti. Online puoi trovare foto che mostrano quanto sia facile ingannare l'intelligenza artificiale quando si tratta di analisi delle immagini. Alcuni di loro possono essere trovati divertenti, ma c'è una linea sottile tra errori innocenti e offensivi, specialmente quando un errore riguarda un volto umano.
Senza dubbio, Google Cloud Vision è uno strumento robusto. Inoltre, è divertente lavorarci. L'architettura REST dell'API e il pacchetto Python ampiamente disponibile lo rendono ancora più accessibile a tutti, indipendentemente da quanto sei avanzato nello sviluppo di Python. Immagina quanto puoi migliorare significativamente la tua app utilizzando le sue capacità!
Letture consigliate : Applicazioni dell'apprendimento automatico per i progettisti
Come puoi ampliare le tue conoscenze su Google Cloud Vision
La portata delle possibilità per applicare il servizio Google Cloud Vision è praticamente infinita. Con la libreria Python disponibile, puoi utilizzarla in qualsiasi progetto basato sul linguaggio, che si tratti di un'applicazione web o di un progetto scientifico. Può sicuramente aiutarti a far emergere un interesse più profondo per le tecnologie di Machine Learning.
La documentazione di Google fornisce alcune ottime idee su come applicare in pratica le funzionalità dell'API Vision, oltre a darti la possibilità di saperne di più sul Machine Learning. Consiglio in particolare di consultare la guida su come creare un'app di ricerca di immagini avanzata.
Si potrebbe dire che quello che hai visto in questo articolo è come una magia. Dopotutto, chi avrebbe mai pensato che un'API semplice e facilmente accessibile fosse supportata da uno strumento scientifico così potente? Tutto ciò che resta da fare è scrivere poche righe di codice, liberare la tua immaginazione e sperimentare il potenziale illimitato dell'analisi delle immagini.