Fermer

janvier 9, 2019

Analyse d'image puissante avec Google Cloud Vision et Python


À propos de l'auteur

Au début des années 2000, Bartosz avait commencé sa carrière de codeur en tant que pigiste autodidacte PHP3. Après presque trois ans de voyages à travers le monde, il est revenu à…
Pour en savoir plus sur Bartosz

Les possibilités d'application du service Google Cloud Vision sont pratiquement illimitées. Avec la bibliothèque Python disponible, elle peut certainement vous aider à susciter un intérêt plus profond pour les technologies d’apprentissage automatique.

Récemment, j’ai construit une application Web pour gérer les dépenses personnelles de l’utilisateur. Ses principales fonctionnalités sont de numériser les reçus d’achat et d’extraire les données pour un traitement ultérieur. L'API de Google Vision s'est avéré être un excellent outil pour obtenir un texte à partir d'une photo. Dans cet article, je vais vous guider dans le processus de développement avec Python dans un exemple de projet.

Si vous êtes novice, ne vous inquiétez pas. Vous n'avez besoin que de connaissances de base sur ce langage de programmation – aucune autre compétence requise.

Commençons, allons-nous?

Jamais entendu parler de Google Cloud Vision

C'est une API qui permet aux développeurs d'analyser le contenu d'une image par le biais de 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 demande d'API. Le moteur de l’API classe les images, détecte les objets, les visages 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 fichiers GIF, ce qui a permis une amélioration significative de l’expérience utilisateur. Un autre exemple est realtor.com qui utilise l'OCR de Vision API pour extraire le texte à partir d'images de panneaux For Sale prises sur une application mobile afin de fournir plus de détails sur la propriété.

L'apprentissage automatique en un clin d'œil [19659008] 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 qu'il a fournies. Plus vous fournissez des données de qualité supérieure et meilleure est la conception du modèle que vous utilisez, plus le résultat obtenu sera intelligent. Grâce à "l'apprentissage automatique convivial" (comme Google appelle leur apprentissage automatique via des services d'API), vous pouvez facilement intégrer une partie de l'intelligence artificielle à vos applications.

Lectures recommandées : Prise en main de Machine Learning

Comment démarrer avec Google Cloud

Commençons par l’enregistrement dans Google Cloud. L'authentification est nécessaire, mais elle est simple et facile: vous devez uniquement stocker un fichier JSON contenant une clé API, que vous pouvez obtenir directement à partir de la plateforme Google Cloud .

Téléchargez le fichier et ajoutez-le. son chemin vers les variables d'environnement:

 exportez GOOGLE_APPLICATION_CREDENTIALS = / chemin / vers / votre / apikey.json

En développement, vous pouvez également utiliser la méthode from_serivce_account_json () que je vais décrire plus loin dans cet article. Pour en savoir plus sur l’authentification, consultez la documentation officielle de Cloud .

Google fournit un package Python permettant de gérer l’API. Ajoutons à votre application la dernière version de google-cloud-vision == 0.33 .

Comment combiner Google Cloud Vision avec Python

Commençons par importer les classes de la bibliothèque.

 à partir de google.cloud import vision
à partir des types d'importation google.cloud.vision

Quand cela sera réglé, vous aurez maintenant besoin d’une instance de client. Pour ce faire, vous allez utiliser une fonctionnalité de reconnaissance de texte.

 client = vision.ImageAnnotatorClient ()

Si vous ne stockez pas vos informations d’identité dans des variables d’environnement, vous pouvez les ajouter directement au client à ce stade.

 client = vision.ImageAnnotatorClient.from_service_account_file (
'/path/to/apikey.json'
)

Supposons que vous stockiez des images à traiter dans un dossier "images" de votre catalogue de projets.


 Image d'un reçu pouvant être traité par Google Cloud Vision
Un exemple simple reçu pouvant être traité par Google Cloud Vision. ( Grand aperçu )
 image_to_open = 'images / Ticket.jpg'

avec open (image_to_open, 'rb') comme image_file:
    content = image_file.read ()

L'étape suivante consiste à créer un objet Vision, qui vous permettra d'envoyer une demande de reconnaissance de texte.

 image = vision.types.Image (contenu = contenu)

text_response = client.text_detection (image = image)

La réponse se compose de mots détectés stockés sous forme de clés de description, de leur emplacement sur l'image et d'une prédiction de langage. Par exemple, examinons 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 constater, pour filtrer le texte uniquement, vous devez obtenir une description «de tous les éléments». Heureusement, avec l’aide de Python, la compréhension des listes est puissante.

 textes = [text.description for text in text_response.text_annotations]

['SHOPPING STOREnREG 12-21n03:22 PMnCLERK 2n618n1 MISCn1 STUFFn$0.49n$7.99n$8.48n$0.74nSUBTOTALnTAXnTOTALnCASHn6n$9. 22n$10.00nCHANGEn$0.78nNO REFUNDSnNO EXCHANGESnNO RETURNSn', '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 bien, vous remarquerez que le premier élément de la liste contient tout le texte détecté dans l'image stockée sous forme de chaîne, tandis que les autres sont des mots séparés. Imprimons-le.

 print (textes [0])

MAGASIN
REG 12-21
15h22
GREFFIER 2
618
1 MISC
1 stuff
0,49 $
7,99 $
8,48 USD
0,74 $
TOTAL
IMPÔT
TOTAL
EN ESPÈCES
6
9 $ 22
10,00 $
CHANGEMENT
0,78 USD
PAS DE REMBOURSEMENT
AUCUN ÉCHANGE
AUCUN RETOUR

Assez précis, non? Et évidemment très utiles, alors jouons plus.

Que pouvez-vous obtenir de Google Cloud Vision?

Comme je l’ai déjà mentionné, Google Cloud Vision ne consiste pas uniquement à reconnaître du texte, il vous permet également de découvrir des visages, points de repère, propriétés d'image et connexions Web. Dans cet esprit, voyons ce qu’il peut en dire sur les associations Web de l’image.

 web_response = client.web_detection (image = image)

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. Mais laissez-vous vous exercer un peu plus – 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 de précieuses idées, bravo, mon tout-puissant ami! Pouvez-vous également savoir d'où provient l'image et s'il existe des copies?

 web_content.full_matching_images
 >>> [
url: "http://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 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"
]

Doux! Bien fait.

Existe-t-il vraiment une intelligence artificielle dans Google Cloud Vision?

Comme vous pouvez le voir sur l'image ci-dessous, le traitement des reçus peut devenir un peu émouvant.


 Un homme qui crie et qui est stressé tout en maintenant ticket de caisse
Un exemple de stress que vous pouvez ressentir en obtenant un ticket de caisse. ( Grand aperçu )

Voyons ce que Vision API peut vous dire à propos de cette photo.

 image_to_open = 'images / face.jpg'

avec open (image_to_open, 'rb') comme image_file:
    content = image_file.read ()
image = vision.types.Image (contenu = contenu)

face_response = client.face_detection (image = image)
face_content = face_response.face_annotations

face_content [0] .detection_confidence
>>> 0.5153166651725769

Pas mal, l'algorithme est sûr à plus de 50% qu'il y a un visage dans l'image. Mais pouvez-vous en apprendre davantage sur les émotions qui s'y cachent?

 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 validité de certaines émotions de base, ainsi que des propriétés de chapellerie ou de photo.

En ce qui concerne la détection des visages, je dois attirer votre attention sur une partie du potentiel. problèmes que vous pouvez rencontrer. N'oubliez pas que vous confiez une photo à une machine et que, même si l'API de Google utilise des modèles formés à partir d'énormes jeux 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 il est facile de piéger l'intelligence artificielle dans l'analyse d'images. Certaines d'entre elles peuvent sembler drôles, mais il y a une marge délicate entre erreurs innocentes et offensantes, surtout lorsqu'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 paquet Python largement disponible le rendent encore plus accessible à tous, quel que soit votre niveau de développement Python.

Lecture recommandée : Applications de l'apprentissage automatique pour les concepteurs

Comment élargir vos connaissances sur Google Cloud Vision [19659008] Les possibilités d’application du service Google Cloud Vision sont pratiquement illimitées. Avec la bibliothèque Python disponible, vous pouvez l’utiliser dans tout projet basé sur la langue, 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 d’excellentes idées sur la manière d’appliquer les fonctionnalités de Vision API de manière pratique et vous donne également la possibilité d’en apprendre davantage sur l'apprentissage automatique. Je recommande tout particulièrement de consulter le guide sur comment créer une application de recherche d'images avancée .

On pourrait dire que ce que vous avez vu dans cet article est magique. Après tout, qui aurait pensé qu’une API simple et facilement accessible est supportée par un outil aussi puissant et scientifique? Il ne reste plus qu’à écrire des lignes de code, à détendre votre imagination et à faire l'expérience du potentiel illimité de l'analyse d'images.

 Editorial Smashing (rb, ra, il)




Source link