Capacité récente de reconnaissance d'image - Résultats de recherche de pointe de MS à l'aide de l'API de vision par ordinateur avec Python

Récemment, j'ai pu comprendre comment utiliser l'API Computer Vision en la touchant, et j'ai été surpris par les performances plus élevées que prévu, j'ai donc décidé de la résumer. Après avoir présenté ce qu'est l'API Computer Vision, pourquoi elle est incroyable et à quel point elle peut être puissante lorsque vous l'utilisez réellement, j'aimerais également vous montrer le code. Grâce à cet article, j'ai appris que vous pouvez facilement utiliser une fonction de reconnaissance d'image aussi puissante en écrivant quelques lignes de code, et j'espère que vous allez l'essayer.

Qu'est-ce que l'API Computer Vision en premier lieu?

Service d'API de Microsoft qui jette une image dans REST et renvoie le résultat de l'analyse de l'image au format JSON. Il reconnaît non seulement l'objet dans l'image et génère la balise, mais génère également l'état et la situation de l'objet sur l'image sous forme de balise avec des verbes et des adjectifs. (ex. water, sport, swimming, man) De plus, en fonction d'eux, il ajoutera une légende plausible à l'image en une phrase. (ex. a man swimming in a pool of water)

sample image (Voir Page officielle)

Dans les coulisses, le dernier moteur de reconnaissance d'image qui intègre les derniers résultats de recherche de Microsoft Research est en cours d'exécution, et il est ouvert aux utilisateurs généraux.

Capacité de Microsoft Research à jouer un rôle actif à l'arrière de l'API Computer Vision

Même s'il est à la pointe de la technologie, je me demande à quel point Microsoft Research est fort dans ce domaine en premier lieu. Dans le domaine de la reconnaissance d'images, il existe un projet appelé ImageNet qui publie une énorme quantité d'images et les annotations associées sous forme de jeu de données ouvert. Il existe un concours appelé Large Scale Visual Recognition Challenge qui concourt pour la précision de reconnaissance d'image d'une grande quantité de données d'image. Lors du dernier concours (ILSVRC 2015), MSRA (Microsoft Research Asia) est classé premier dans de nombreuses tâches, tandis que les départements de recherche tels que Google et les équipes de recherche des meilleures universités étrangères sont tous en concurrence.

(Extrait des Résultats ILSVRC2015)

Étant donné que j'étais dans un laboratoire proche de ce domaine lorsque j'étais étudiant, j'avais une vague image que MS publiait souvent des «articles forts», mais je suis heureux d'avoir pu connaître la situation particulière en examinant cette fois. À la fin de cet article, je cite également les papiers associés utilisés pour l'API Computer Vision, mais quand je les regarde, les derniers résultats de recherche sont généralement utilisés, donc je suis convaincu que c'est incroyable.

Quelle est sa précision?

Jetons en fait votre propre image et voyons le résultat de l'analyse. Cette fois, je voudrais vous présenter la ** fonction de génération de légende ** et la ** fonction de génération de balises **, que j'ai personnellement trouvées particulièrement utiles et intéressantes parmi les fonctions de reconnaissance d'image de l'API Computer Vision. Pour étudier, cette fois, j'ai créé un service Web simple qui élève l'image et affiche le résultat de l'analyse et je l'ai déployé sur Azure. (Je veux télécharger le code sur Git et le résumer la prochaine fois) Voici quelques commentaires et impressions.

Tout d'abord ** Photo de café et quatre-quarts prise au café **

image

La bonne réponse était un morceau de gâteau et un morceau de café dans une tasse. En regardant les étiquettes, j'ai été surpris de trouver une table, du chocolat, et même mangé, ce qui indique à moitié mangé.

Vient ensuite ** une photo décontractée prise lors d'un voyage ** image

En regardant les légendes générées, on a de nouveau brillamment deviné que la voiture était garée devant l'église. J'ai été impressionné par le fait que la relation de position des objets dans l'image était exprimée dans la légende.

En utilisant la sortie des balises de cette manière, il semble facile d'ajouter des fonctions de recherche d'images aux applications et aux services Web, et d'effectuer le regroupement. De plus, s'il y a un grand nombre d'images dans le service Web, il peut être intéressant de les analyser et de les classer par le nombre total de balises, ce qui donnera de nouvelles perspectives.

Comment le mettez-vous en œuvre?

Je voudrais vous montrer quel type de code et combien de code peut y parvenir. Je l'ai écrit dans le système Python2. Des exemples d'implémentation de la série Python3 et C #, Java, JavaScript, Objective-C, PHP, Ruby peuvent être trouvés au bas de ici. ..

Partie relative à l'utilisation de l'API ComputerVision


import httplib
import urllib

image_url = ''
headers = {
    # Request headers
    'Content-Type': 'application/json',
    # 'Content-Type': 'application/octet-stream',
    'Ocp-Apim-Subscription-Key': 'Your key',
}
params = urllib.urlencode({
    # Request parameters
    'visualFeatures': 'Description',
    # 'visualFeatures': 'Categories,Tags, Description, Faces, ImageType, Color, Adult',
    # 'details': 'Celebrities'
})
conn = httplib.HTTPSConnection('api.projectoxford.ai')
body = """{'url': '%s'}""" % (image_url)
conn.request("POST", "/vision/v1.0/analyze?%s" % params, body, headers)
response = conn.getresponse()
caption_data = response.read()
conn.close()

Dans l'exemple ci-dessus, l'URL de l'image est lancée, Il est également possible de lancer directement des données d'image. La commutation est possible en modifiant la valeur de Content-Type dans les en-têtes.

'Content-Type': 'application/json'Lorsque vous donnez une URL d'image
'Content-Type': 'application/octet-stream'Lors de la transmission directe des données d'image

Donc, si vous voulez lancer des données directement, spécifiez octat-stream et La partie suivante

body = """{'url': '%s'}""" % (image_url)
conn.request("POST", "/vision/v1.0/analyze?%s" % params, body, headers)

Peut être changé comme suit.

file_name = ''
img = open(file_name, 'rb').read()
conn.request("POST", "/vision/v1.0/analyze?%s" % params, img, headers)

Dans les paramètres, spécifiez le résultat d'analyse souhaité avec des paramètres. À ce stade, les sept valeurs suivantes peuvent être spécifiées pour visualFeatures.

(Pour plus de détails, reportez-vous aux paramètres de requête dans ici) L'exemple ci-dessus d'analyse de ma propre photo est le résultat lorsque seule Description (fonction de génération de légende et fonction de génération de balise) est spécifiée pour visualFeatures.

Si tous sont spécifiés dans visualFeatrues, le JSON suivant sera renvoyé. Voyons le résultat lors de l'utilisation de l'image utilisée sur la page officielle. Vous pouvez également vérifier la certitude de chaque tag, s'il s'agit d'une image adulte, la position du visage de la personne reflétée, le sexe et l'âge, etc.

Image analytique
image

JSON est retourné


{
  "categories": [
    {
      "name": "people_swimming",
      "score": 0.98046875
    }
  ],
  "adult": {
    "isAdultContent": false,
    "isRacyContent": false,
    "adultScore": 0.14750830829143524,
    "racyScore": 0.12601403892040253
  },
  "tags": [
    {
      "name": "water",
      "confidence": 0.99964427947998047
    },
    {
      "name": "sport",
      "confidence": 0.95049923658370972
    },
    {
      "name": "swimming",
      "confidence": 0.90628182888031006,
      "hint": "sport"
    },
    {
      "name": "pool",
      "confidence": 0.87875884771347046
    },
    {
      "name": "water sport",
      "confidence": 0.631849467754364,
      "hint": "sport"
    }
  ],
  "description": {
    "tags": [
      "water",
      "sport",
      "swimming",
      "pool",
      "man",
      "riding",
      "blue",
      "top",
      "ocean",
      "young",
      "wave",
      "bird",
      "game",
      "large",
      "standing",
      "body",
      "frisbee",
      "board",
      "playing"
    ],
    "captions": [
      {
        "text": "a man swimming in a pool of water",
        "confidence": 0.78501081244404836
      }
    ]
  },
  "requestId": "your request Id",
  "metadata": {
    "width": 1500,
    "height": 1155,
    "format": "Jpeg"
  },
  "faces": [
    {
      "age": 29,
      "gender": "Male",
      "faceRectangle": {
        "left": 748,
        "top": 336,
        "width": 304,
        "height": 304
      }
    }
  ],
  "color": {
    "dominantColorForeground": "Grey",
    "dominantColorBackground": "White",
    "dominantColors": [
      "White"
    ],
    "accentColor": "19A4B2",
    "isBWImg": false
  },
  "imageType": {
    "clipArtType": 0,
    "lineDrawingType": 0
  }
}

Fondamentalement, les balises renvoyées sont à usage général (ex. Chiens, pas caniches), mais pour les célébrités, vous pouvez même vous identifier. Si vous souhaitez activer cette fonctionnalité, accédez aux détails dans les paramètres

'details' : 'Celebrities'

Si vous spécifiez, le résultat de l'analyse sera inclus dans JSON. Le jugement de la célébrité semble être capable d'identifier environ 200 000 personnes, et lorsque demandé par d'autres personnes qui l'ont touché, il semble que cela correspond également à Demon Kogure! (Quel âge a l'âge ...?)

Comment commencer?

Une clé d'abonnement est requise pour utiliser Cognitive Services. Un essai gratuit est disponible ici S'il vous plait enregistrez vous. Vous devrez vous connecter avec votre compte Microsoft. Spécifiez la clé d'abonnement obtenue en vous enregistrant avec Ocp-Apim-Subscription-Key sur l'exemple de code. Il existe également un forfait payant, donc si vous souhaitez l'utiliser fermement au lieu de l'essayer, veuillez consulter l'élément ** Plan d'utilisation ** suivant.

Si vous voulez essayer quelque chose avant d'écrire votre propre code, jetez un œil à la page de commentaires officiels (https://www.microsoft.com/cognitive-services/en-us/computer-vision-api). Lorsque vous le recevez, vous pouvez sélectionner l'image préparée ou télécharger votre propre image et la vérifier, c'est donc recommandé.

image

Si vous avez différentes opinions et idées, par exemple essayer de l'utiliser et faire plus ici, Give your apps a human side (Page de partage de commentaires référencée par l'équipe de développement de l'API Computer Vision). C'est bien de pouvoir fournir des opinions côté utilisateur directement à l'équipe de développement de cette manière. Chaque idée d'amélioration peut faire l'objet d'un vote, et si les votes sont recueillis, elle sera mieux classée, il sera donc plus facile d'attirer l'attention. Utilisons-le ensemble et améliorons-le!

Plan d'utilisation (post-scriptum 2016/8/5)

À partir d'aujourd'hui, le ** plan standard ** a été ajouté au plan d'essai précédent gratuit! Il n'y a pas de SLA ou de support car l'ensemble des services cognitifs est toujours en phase de prévisualisation, Je pense que vous pouvez également l'envisager pour une utilisation professionnelle.

Plan Description Price
Free 5,000 transactions per month Free
Standard 10 transactions per second $ 1.50 per 1000 transactions

Vous pouvez configurer un compte de plan standard directement depuis ici. Si vous n'avez pas d'abonnement Microsoft Azure, vous aurez besoin d'un abonnement Microsoft Azure pour utiliser le plan standard, donc si vous n'en avez pas, un mois à partir de ici Veuillez essayer le compte d'essai gratuit pour 20 500 ¥.

De plus, s'il existe un moyen d'utiliser cette API qui a un impact commercial, veuillez me le faire savoir dans les commentaires ou personnellement. Cela m'intéresse beaucoup personnellement! Lol

Référence (La recherche derrière l'API Computer Vision)

Enfin, je voudrais présenter les résultats de la recherche utilisés derrière l'API Computer Vision, qui a été extrait de la page officielle. (URL officielle de référence) Le premier article est celui adopté dans CVPR 2015, n'est-ce pas? CVPR est une conférence de premier plan dans les conférences internationales de vision par ordinateur, on peut donc dire qu'il s'agit d'une recherche de assez haute qualité et de haut niveau. Je pense qu'il est très intéressant, avec une rapidité sans précédent, que la recherche de pointe qui vient d'être annoncée il y a un an soit développée en tant que service pouvant être utilisé pour le grand public.

Référence 2 (Positionnement de l'API Computer Vision dans MS)

L'API Computer Vision (https://www.microsoft.com/cognitive-services/en-us/computer-vision-api) est les services cognitifs de Microsoft (https://www.microsoft.com/cognitive). -services /), l'un des services d'API basés sur le cloud C'est une API qui appartient à la catégorie Vision parmi les cinq catégories suivantes.

Les API de la catégorie Vision sont les suivantes.

L'API Computer Vision fournit les fonctionnalités suivantes, y compris la reconnaissance d'image:

Recommended Posts

Capacité récente de reconnaissance d'image - Résultats de recherche de pointe de MS à l'aide de l'API de vision par ordinateur avec Python
Création récente de classement à l'aide de l'API Qiita avec Python
Extraction de texte (API de lecture) avec l'API Azure Computer Vision (Python3.6)
Reconnaissance d'image avec API à partir de zéro connaissance avec AutoML Vision
Capture d'image de Firefox en utilisant Python
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
Implémentation de CRUD à l'aide de l'API REST avec Python + Django Rest framework + igGrid
Bases du traitement d'images binarisées par Python
Python: principes de base de la reconnaissance d'image à l'aide de CNN
Transcription d'images avec l'API Vision de GCP
Dessin avec Matrix-Reinventor of Python Image Processing-
Problèmes avec les résultats de sortie avec l'API Cloud Vision de Google
Extraction de texte avec l'API GCP Cloud Vision (Python3.6)
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
Téléchargement anonyme d'images à l'aide de l'API Imgur (à l'aide de Python)
Divers mémorandums lors de l'utilisation du sdk de l'API de messagerie LINE avec Python (2.7.9) + Google App Engine
Extraire le tableau des fichiers image avec OneDrive et Python
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
Essayez de projeter la conversion d'image en utilisant OpenCV avec Python
[Question] À propos de la conversion API du chat bot à l'aide de Python
Enregistrez des tickets avec l'API de Redmine en utilisant des requêtes Python
[Python] Utilisation de l'API Line [1ère création de Beauty Bot]