Analiză puternică a imaginii cu Google Cloud Vision și Python
Publicat: 2022-03-10Destul de recent, am creat o aplicație web pentru a gestiona cheltuielile personale ale utilizatorului. Principalele sale caracteristici sunt scanarea bonurilor de cumpărături și extragerea datelor pentru procesare ulterioară. Google Vision API s-a dovedit a fi un instrument excelent pentru a obține un text dintr-o fotografie. În acest articol, vă voi ghida prin procesul de dezvoltare cu Python într-un proiect exemplu.
Dacă ești novice, nu-ți face griji. Veți avea nevoie doar de cunoștințe de bază ale acestui limbaj de programare - fără alte abilități necesare.
Să începem, da?
N-ai auzit niciodată de Google Cloud Vision?
Este un API care permite dezvoltatorilor să analizeze conținutul unei imagini prin intermediul datelor extrase. În acest scop, Google utilizează modele de învățare automată instruite pe un set mare de date de imagini. Toate acestea sunt disponibile cu o singură solicitare API. Motorul din spatele API-ului clasifică imaginile, detectează obiecte, fețele oamenilor și recunoaște cuvintele imprimate în imagini.
Pentru a vă da un exemplu, să aducem în discuție bine-aiatul Giphy. Au adoptat API-ul pentru a extrage date de subtitrări din GIF-uri, ceea ce a dus la o îmbunătățire semnificativă a experienței utilizatorului. Un alt exemplu este realtor.com, care utilizează OCR-ul API-ului Vision pentru a extrage text din imaginile semnelor de vânzare realizate într-o aplicație mobilă pentru a oferi mai multe detalii despre proprietate.
Învățarea automată dintr-o privire
Să începem cu a răspunde la întrebarea pe care mulți dintre voi probabil ați auzit-o înainte - ce este învățarea automată?
Ideea generală este de a dezvolta un model programabil care găsește modele în datele oferite. Cu cât furnizați date de mai bună calitate și cu cât este mai bun designul modelului pe care îl utilizați, cu atât se va obține un rezultat mai inteligent. Cu „învățarea automată prietenoasă” (cum își numește Google învățarea automată prin intermediul serviciilor API), puteți încorpora cu ușurință o bucată de inteligență artificială în aplicațiile dvs.
Lectură recomandată : Noțiuni de bază cu învățarea automată
Cum să începeți cu Google Cloud
Să începem cu înregistrarea la Google Cloud. Google necesită autentificare, dar este simplu și nedureros - va trebui doar să stocați un fișier JSON care include cheia API, pe care îl puteți obține direct de la Google Cloud Platform.
Descărcați fișierul și adăugați calea acestuia la variabilele de mediu:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/apikey.json
Alternativ, în dezvoltare, vă puteți sprijini cu metoda from_serivce_account_json()
, pe care o voi descrie în continuare în acest articol. Pentru a afla mai multe despre autentificare, consultați documentația oficială Cloud.
Google oferă un pachet Python pentru a face față API-ului. Să adăugăm cea mai recentă versiune de google-cloud-vision==0.33 în aplicația dvs. E timpul să codificăm!
Cum să combinați Google Cloud Vision cu Python
În primul rând, să importăm clase din bibliotecă.
from google.cloud import vision from google.cloud.vision import types
Când veți avea grijă de asta, acum veți avea nevoie de o instanță a unui client. Pentru a face acest lucru, veți folosi o funcție de recunoaștere a textului.
client = vision.ImageAnnotatorClient()
Dacă nu vă veți stoca acreditările în variabilele de mediu, în această etapă le puteți adăuga direct la client.
client = vision.ImageAnnotatorClient.from_service_account_file( '/path/to/apikey.json' )
Presupunând că stocați imagini pentru a fi procesate într-un folder „imagini” din catalogul dvs. de proiecte, să deschidem una dintre ele.

image_to_open = 'images/receipt.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read()
Următorul pas este să creați un obiect Vision, care vă va permite să trimiteți o solicitare pentru a continua cu recunoașterea textului.
image = vision.types.Image(content=content) text_response = client.text_detection(image=image)
Răspunsul constă din cuvintele detectate stocate ca chei de descriere, locația lor pe imagine și o predicție de limbă. De exemplu, să aruncăm o privire mai atentă la primul cuvânt:
[ ... description: "SHOPPING" bounding_poly { vertices { x: 1327 y: 1513 } vertices { x: 1789 y: 1345 } vertices { x: 1821 y: 1432 } vertices { x: 1359 y: 1600 } } ... ]
După cum puteți vedea, pentru a filtra doar text, trebuie să obțineți o descriere „pe toate elementele”. Din fericire, cu ajutor vine și puternica înțelegere a listei a lui 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']
Dacă te uiți cu atenție, poți observa că primul element al listei conține tot textul detectat în imagine stocat sub formă de șir, în timp ce celelalte sunt cuvinte separate. Hai să-l tipărim.

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
Destul de precis, nu? Și, evident, destul de util, așa că hai să ne jucăm mai mult.
Ce puteți obține de la Google Cloud Vision?
După cum am menționat mai sus, Google Cloud Vision nu este doar despre recunoașterea textului, ci și vă permite să descoperiți chipuri, repere, proprietăți ale imaginii și conexiuni web. Având în vedere asta, haideți să aflăm ce vă poate spune despre asocierile web ale imaginii.
web_response = client.web_detection(image=image)
Ok Google, știi cu adevărat ce se arată pe imaginea pe care ai primit-o?
web_content = web_response.web_detection web_content.best_guess_labels >>> [label: "Receipt"]
Bună treabă, Google! Este într-adevăr o chitanță. Dar haideți să vă facem un pic mai mult exercițiu - puteți vedea altceva? Ce zici de mai multe predicții exprimate în procente?
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%')]
O mulțime de informații valoroase, bravo, prietenul meu atotputernic! Puteți afla și de unde provine imaginea și dacă are copii?
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" ]
Sunt impresionat. Mulțumesc, Google! Dar una nu este suficientă, poți să-mi dai, te rog, trei exemple de imagini similare?
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" ]
Dulce! Bine făcut.
Există într-adevăr o inteligență artificială în Google Cloud Vision?
După cum puteți vedea în imaginea de mai jos, gestionarea chitanțelor poate deveni puțin emoționantă.

Să aruncăm o privire la ce vă poate spune API-ul Vision despre această fotografie.
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
Nu e prea rău, algoritmul este sigur de peste 50% că există o față în imagine. Dar poți învăța ceva despre emoțiile din spatele lui?
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 ... ]
În mod surprinzător, cu o comandă simplă, puteți verifica probabilitatea unor emoții de bază, precum și proprietățile articolelor pentru cap sau foto.
Când vine vorba de detectarea fețelor, trebuie să vă îndrept atenția către unele dintre problemele potențiale pe care le puteți întâlni. Trebuie să rețineți că predați o fotografie unei mașini și, deși API-ul Google utilizează modele antrenate pe seturi de date uriașe, este posibil ca aceasta să returneze rezultate neașteptate și înșelătoare. Online puteți găsi fotografii care arată cât de ușor poate fi păcălită inteligența artificială când vine vorba de analiza imaginilor. Unele dintre ele pot fi considerate amuzante, dar există o linie fină între greșelile inocente și cele ofensive, mai ales când o greșeală se referă la un chip uman.
Fără îndoială, Google Cloud Vision este un instrument robust. În plus, este distractiv să lucrezi. Arhitectura REST a API și pachetul Python disponibil pe scară largă îl fac și mai accesibil pentru toată lumea, indiferent de cât de avansat sunteți în dezvoltarea Python. Doar imaginați-vă cât de semnificativ vă puteți îmbunătăți aplicația utilizând capacitățile acesteia!
Lectură recomandată : Aplicații ale învățării automate pentru designeri
Cum vă puteți extinde cunoștințele despre Google Cloud Vision
Sfera posibilităților de aplicare a serviciului Google Cloud Vision este practic nelimitată. Cu Biblioteca Python disponibilă, îl puteți utiliza în orice proiect bazat pe limbaj, fie că este o aplicație web sau un proiect științific. Cu siguranță vă poate ajuta să treziți un interes mai profund față de tehnologiile de învățare automată.
Documentația Google oferă câteva idei grozave despre cum să aplicați funcțiile Vision API în practică și vă oferă posibilitatea de a afla mai multe despre Machine Learning. Recomand în special să consultați ghidul despre cum să construiți o aplicație avansată de căutare a imaginilor.
S-ar putea spune că ceea ce ați văzut în acest articol este ca o magie. La urma urmei, cine ar fi crezut că un API simplu și ușor accesibil este susținut de un instrument științific atât de puternic? Tot ce mai rămâne de făcut este să scrieți câteva rânduri de cod, să vă relaxați imaginația și să experimentați potențialul nemărginit al analizei imaginii.