Analyse d'image puissante avec Google Cloud Vision et Python
Publié: 2022-03-10Tout récemment, j'ai créé une application Web pour gérer les dépenses personnelles des utilisateurs. Ses principales caractéristiques sont de numériser les reçus d'achat et d'extraire des données pour un traitement ultérieur. L'API Google Vision s'est avérée être un excellent outil pour obtenir un texte à partir d'une photo. Dans cet article, je vais vous guider à travers le processus de développement avec Python dans un exemple de projet.
Si vous êtes novice, ne vous inquiétez pas. Vous n'aurez besoin que d'une connaissance très basique de ce langage de programmation - sans aucune autre compétence requise.
Commençons, d'accord ?
Vous n'avez jamais entendu parler de Google Cloud Vision ?
C'est une API qui permet aux développeurs d'analyser le contenu d'une image à travers des données extraites. À cette fin, Google utilise des modèles d'apprentissage automatique formés sur un grand ensemble de données d'images. Tout cela est disponible avec une seule requête API. Le moteur derrière l'API classe les images, détecte les objets, les visages des personnes et reconnaît les mots imprimés dans les images.
Pour vous donner un exemple, évoquons le bien-aimé Giphy. Ils ont adopté l'API pour extraire les données de légende des GIF, ce qui a entraîné une amélioration significative de l'expérience utilisateur. Un autre exemple est realtor.com, qui utilise l'OCR de l'API Vision pour extraire le texte des images des panneaux À vendre prises sur une application mobile afin de fournir plus de détails sur la propriété.
L'apprentissage automatique en un coup d'œil
Commençons par répondre à la question que beaucoup d'entre vous ont probablement déjà entendue : qu'est-ce que l'apprentissage automatique ?
L'idée générale est de développer un modèle programmable qui trouve des modèles dans les données fournies. Plus les données que vous fournissez sont de haute qualité et meilleure est la conception du modèle que vous utilisez, plus le résultat sera intelligent. Avec l'"apprentissage automatique convivial" (comme Google appelle ses services d'apprentissage automatique via API), vous pouvez facilement intégrer une partie de l'intelligence artificielle dans vos applications.
Lecture recommandée : Premiers pas avec l'apprentissage automatique
Comment démarrer avec Google Cloud
Commençons par l'inscription à Google Cloud. Google exige une authentification, mais c'est simple et indolore - vous n'aurez qu'à stocker un fichier JSON contenant la clé API, que vous pouvez obtenir directement à partir de Google Cloud Platform.
Téléchargez le fichier et ajoutez son chemin aux variables d'environnement :
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/your/apikey.json
Alternativement, en développement, vous pouvez vous aider avec la méthode from_serivce_account_json()
, que je décrirai plus loin dans cet article. Pour en savoir plus sur l'authentification, consultez la documentation officielle de Cloud.
Google fournit un package Python pour gérer l'API. Ajoutons la dernière version de google-cloud-vision==0.33 à votre application. Il est temps de coder !
Comment combiner Google Cloud Vision avec Python
Tout d'abord, importons des classes depuis la bibliothèque.
from google.cloud import vision from google.cloud.vision import types
Lorsque cela est pris en charge, vous aurez maintenant besoin d'une instance d'un client. Pour ce faire, vous allez utiliser une fonctionnalité de reconnaissance de texte.
client = vision.ImageAnnotatorClient()
Si vous ne stockez pas vos informations d'identification dans des variables d'environnement, à ce stade, vous pouvez les ajouter directement au client.
client = vision.ImageAnnotatorClient.from_service_account_file( '/path/to/apikey.json' )
En supposant que vous stockiez les images à traiter dans un dossier 'images' à l'intérieur de votre catalogue de projet, ouvrons l'une d'entre elles.
image_to_open = 'images/receipt.jpg' with open(image_to_open, 'rb') as image_file: content = image_file.read()
L'étape suivante consiste à créer un objet Vision, qui vous permettra d'envoyer une demande pour procéder à la reconnaissance de texte.
image = vision.types.Image(content=content) text_response = client.text_detection(image=image)
La réponse consiste en des mots détectés stockés sous forme de clés de description, leur emplacement sur l'image et une prédiction de langue. Par exemple, regardons de plus près le premier mot :
[ ... description: "SHOPPING" bounding_poly { vertices { x: 1327 y: 1513 } vertices { x: 1789 y: 1345 } vertices { x: 1821 y: 1432 } vertices { x: 1359 y: 1600 } } ... ]
Comme vous pouvez le voir, pour filtrer uniquement du texte, vous devez obtenir une description "sur tous les éléments". Heureusement, avec l'aide vient la puissante compréhension de liste de 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']
Si vous regardez attentivement, vous pouvez remarquer que le premier élément de la liste contient tout le texte détecté dans l'image stocké sous forme de chaîne, tandis que les autres sont des mots séparés. Imprimons-le.
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
Plutôt précis, non ? Et évidemment assez utile, alors jouons plus.
Que pouvez-vous obtenir de Google Cloud Vision ?
Comme je l'ai mentionné ci-dessus, Google Cloud Vision ne consiste pas seulement à reconnaître du texte, mais il vous permet également de découvrir des visages, des points de repère, des propriétés d'image et des connexions Web. Dans cet esprit, découvrons ce qu'il peut vous dire sur les associations Web de l'image.
web_response = client.web_detection(image=image)
Ok Google, savez-vous réellement ce qui est affiché sur l'image que vous avez reçue ?
web_content = web_response.web_detection web_content.best_guess_labels >>> [label: "Receipt"]
Bon travail, Google ! C'est un reçu en effet. Mais laissez-nous vous donner un peu plus d'exercice - pouvez-vous voir autre chose ? Que diriez-vous de plus de prédictions exprimées en pourcentage ?
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%')]
Beaucoup d'idées précieuses, bravo, mon tout-puissant ami! Pouvez-vous également savoir d'où vient l'image et s'il existe des copies ?
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" ]
Je suis impressionné. Merci Google ! Mais une seule ne suffit pas, pouvez-vous me donner trois exemples d'images similaires ?
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" ]
Sucré! Bien joué.
Y a-t-il vraiment une intelligence artificielle dans Google Cloud Vision ?
Comme vous pouvez le voir dans l'image ci-dessous, le traitement des reçus peut devenir un peu émouvant.
Voyons ce que l'API Vision peut vous dire sur cette photo.
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
Pas trop mal, l'algorithme est sûr à plus de 50% qu'il y a un visage dans l'image. Mais pouvez-vous apprendre quelque chose sur les émotions derrière cela?
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 ... ]
Étonnamment, avec une simple commande, vous pouvez vérifier la probabilité de certaines émotions de base ainsi que les propriétés des couvre-chefs ou des photos.
En ce qui concerne la détection des visages, je dois attirer votre attention sur certains des problèmes potentiels que vous pourriez rencontrer. Vous devez vous rappeler que vous remettez une photo à une machine et bien que l'API de Google utilise des modèles formés sur d'énormes ensembles de données, il est possible qu'elle renvoie des résultats inattendus et trompeurs. En ligne, vous pouvez trouver des photos montrant à quel point l'intelligence artificielle peut être facilement trompée en matière d'analyse d'images. Certains d'entre eux peuvent être trouvés drôles, mais il y a une ligne fine entre les erreurs innocentes et offensives, surtout quand une erreur concerne un visage humain.
Sans aucun doute, Google Cloud Vision est un outil robuste. De plus, c'est amusant de travailler avec. L'architecture REST de l'API et le package Python largement disponible le rendent encore plus accessible à tous, quel que soit votre niveau de développement Python. Imaginez à quel point vous pouvez améliorer votre application en utilisant ses capacités !
Lecture recommandée : Applications de l'apprentissage automatique pour les concepteurs
Comment pouvez-vous élargir vos connaissances sur Google Cloud Vision ?
Le champ des possibilités d'application du service Google Cloud Vision est pratiquement infini. Avec Python Library disponible, vous pouvez l'utiliser dans n'importe quel projet basé sur le langage, qu'il s'agisse d'une application Web ou d'un projet scientifique. Cela peut certainement vous aider à susciter un intérêt plus profond pour les technologies d'apprentissage automatique.
La documentation de Google fournit de bonnes idées sur la façon d'appliquer les fonctionnalités de l'API Vision dans la pratique et vous donne la possibilité d'en savoir plus sur l'apprentissage automatique. Je recommande particulièrement de consulter le guide sur la façon de créer une application de recherche d'images avancée.
On pourrait dire que ce que vous avez vu dans cet article ressemble à de la magie. Après tout, qui aurait pensé qu'une API simple et facilement accessible était soutenue par un outil scientifique aussi puissant ? Il ne vous reste plus qu'à écrire quelques lignes de code, à laisser libre cours à votre imagination et à découvrir le potentiel illimité de l'analyse d'images.