[PYTHON] Comment créer un ensemble de données d'image de visage utilisé dans l'apprentissage automatique (1: Acquérir des images de candidats à l'aide du service API Web)

Lors de la reconnaissance / classification d'images à l'aide de l'apprentissage automatique tel que DNN, une grande quantité d'images de formation est nécessaire lors de l'exécution de l'apprentissage. Il existe de nombreux cas où des ensembles de données (ensembles d'images) publiés sur le Web, etc. sont utilisés. Cependant, dans le cas de la classification / reconnaissance des images de visage, il existe peu d'ensembles de données gratuits en raison de problèmes tels que les droits de portrait. En conséquence, de nombreuses personnes ont du mal à collecter des images d'apprentissage. Voici donc une façon de créer votre propre jeu de données d'image de visage.

Environnement de développement utilisé cette fois

Obtenir les images des candidats

Commencez par collecter des images qui peuvent montrer le visage cible (ci-après dénommées images candidates). Les méthodes de collecte possibles incluent les méthodes suivantes.

Cette fois, je voudrais écrire sur ** Comment collecter des images de candidats à l'aide du service API Web **.

Collection d'images de candidats à l'aide de l'API Web accessible au public

Il existe de nombreux services d'API Web qui renvoient des informations d'image publiées sur le Web ou sur SNS en réponse, Ici, nous utiliserons l '** API de recherche d'images Bing **, qui est fournie gratuitement sur Microsoft Cognitive Services.

Dans cette méthode de collecte utilisant l'API Bing Image Search,

  1. Définissez la condition de recherche dans la requête et obtenez l'URL de l'image qui lui correspond avec l'API
  2. Créez une nouvelle copie d'image avec OpenCV à partir de l'URL d'image obtenue en 1.

Faites deux pas. Par conséquent, comme mentionné ci-dessus, OpenCV est nécessaire en tant que bibliothèque à importer.

Procédure d'utilisation de l'API Bing Image Search

Comment s'inscrire à Microsoft Cognitive Services et s'inscrire à l'API Bing Image Search Veuillez consulter l'article séparé pour plus d'informations. Comment enregistrer Microsoft Cognitive Services

Pour utiliser l'API, vous aurez besoin d'une clé d'abonnement qui peut être obtenue lorsque l'enregistrement de l'API est terminé.

Exemple de code pour obtenir les informations d'image qui sont le résultat de la recherche de l'API

Fondamentalement, comme une API Web générale, en lançant une méthode HTTP (get request cette fois) au point de terminaison de l'API, Vous pouvez recevoir les informations de réponse (format json) qui stockent l'URL de l'image qui est le résultat de la recherche de la requête. L'exemple de code qui a réalisé cela est le suivant.

# _*_ coding: utf-8 _*_

import requests
import urllib.request
import os.path
import cv2
import numpy as np

#Point de terminaison API et clé d'abonnement
REQUEST_BASE_URL = 'https://bingapis.azure-api.net/api/v5/images/search'
SUBSCRIPTION_KEY = '********************'


def api_request(query, count=10):

    #paramètres d'en-tête et de paramètres
    headers = { 'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY, }
    params = {
        'q': str(query),
        'count': int(count),
        'mkt': 'ja-JP',
        'offset': '0',
    }

    #Lancer de l'API
    response = requests.get(REQUEST_BASE_URL, headers=headers, params=params)
    res_headers = response.headers
    status_code = response.status_code
    results = None

	#Paramètre de contenu pour revenir à l'appelant en fonction du code d'état et du contenu de l'en-tête
    if status_code == 200:
        if 'content-length' in res_headers and int(res_headers['content-length']) == 0:
            results = None
        elif 'content-type' in res_headers and isinstance(res_headers['content-type'], str):
            if 'application/json' in res_headers['content-type'].lower():
                results = response.json()['value']['contentUrl'] if response.content else None
            else
                results = None
    else:
        #Résiliation forcée si le code d'état est différent de 200
        print("Error! - status code : {0}".format(response.status_code))
        print("Message : {0}".format(response.json()['error']['message']))
        exit()

	#Renvoie l'URL de l'image qui est le résultat de la recherche
    return results

Reportez-vous à Official API Reference pour obtenir des spécifications détaillées lors de la demande et de la réponse aux API. S'il te plait donne moi. Ici, seules les spécifications considérées comme le minimum requis au moment de la demande sont décrites.

Demander des informations d'en-tête

Point d'information Contenu
Ocp-Apim-Subscription-Key Chaîne de clé d'abonnement

Paramètres de demande

Élément de paramètre Type de données Contenu
q String Chaîne de caractères qui devient une requête de recherche
count UnsignedShort Nombre d'images de résultats de recherche renvoyées en réponse
mkt String Request Le nom de la région où la demande est envoyée (spécifié par Market Code)

Cette fois, seule l'URL de l'image qui est le résultat de la recherche est obtenue à partir des informations de réponse de l'API. De plus, les informations suivantes peuvent être obtenues avec l'API Bing Image Search.

--Taille des pixels de l'image --Taille du fichier image --URL de la page où l'image est publiée

Exemple de code pour créer une image candidate à partir de l'URL de l'image

Après avoir obtenu l'ensemble d'URL d'image du résultat de la recherche à partir de la méthode ci-dessus, Créez une nouvelle image de candidat en utilisant OpenCV à partir de cette URL.

def make_image(image_url):
	#Charger les informations d'image de l'URL
	resp = urllib.request.urlopen(image_url)

	#Reconstruire la mémoire tampon de l'image pour qu'elle puisse être lue par OpenCV
	image = np.asarray(bytearray(resp.read()), dtype=np.uint8)
	
	#Lire l'image à partir de la mémoire tampon
	image = cv2.imdecode(image, cv2.IMREAD_COLOR)

	#Exporter en tant que nouvelle image
	cv2.imwrite("hoge.jpg ", image)

Lors de la reconstruction de la mémoire tampon, définissez le type de données sur le type uint8. Ceci est dû au fait que les valeurs de pixels qui composent une image prennent généralement des valeurs entières dans l'intervalle [0,255]. De plus, en spécifiant cv2.IMREAD_COLOR lors de la lecture d'une image avec la méthode imdecode, Il est lu comme une image couleur.   Bien que ce soit facile, j'ai expliqué un exemple de collecte d'images de candidats à l'aide de l'API Bing Image Search. La prochaine fois écrira une méthode pour collecter des images candidates en analysant la vidéo avec OpenCV.

Recommended Posts

Comment créer un ensemble de données d'image de visage utilisé dans l'apprentissage automatique (1: Acquérir des images de candidats à l'aide du service API Web)
Comment créer un ensemble de données d'image de visage utilisé dans l'apprentissage automatique (2: Analyse d'image de la vidéo pour obtenir des images candidates)
Je souhaite créer un service d'apprentissage automatique sans programmation! API Web
Comment créer rapidement un environnement d'apprentissage automatique à l'aide de Jupyter Notebook avec UbuntuServer 16.04 LTS
Comment créer rapidement un environnement d'apprentissage automatique à l'aide de Jupyter Notebook avec UbuntuServer 16.04 LTS avec Anaconda
Comment collecter des données d'apprentissage automatique
Comment créer une grande quantité de données de test dans MySQL? ??
Comment créer une API de machine learning sans serveur avec AWS Lambda
Étapes rapides pour créer un environnement d'apprentissage automatique à l'aide de Jupyter Notebook sur macOS Sierra avec anaconda
Comment envoyer une image visualisée des données créées en Python à Typetalk
[Environnement de développement] Comment créer un ensemble de données proche de la base de données de production
Je souhaite créer un service d'apprentissage automatique sans programmation!
[Pour l'enregistrement] Système d'image Keras Partie 1: Comment créer votre propre ensemble de données?
[Apprentissage automatique] Créez un modèle d'apprentissage automatique en effectuant un apprentissage par transfert avec votre propre ensemble de données
Un débutant en apprentissage automatique a tenté de créer une IA de jugement Sheltie en un jour
Un mémorandum de méthode souvent utilisé dans l'apprentissage automatique utilisant scikit-learn (pour les débutants)
Astuces de fourniture de données utilisant deque dans l'apprentissage automatique
Comment coder un drone en utilisant la reconnaissance d'image
Comment créer des données à mettre dans CNN (Chainer)
Comment créer une API Rest dans Django
Comment préparer l'environnement pour Google Colab avec le cours avancé d'apprentissage automatique de Coursera
Comment diviser les données de formation en machine learning en variables objectives et autres dans Pandas
Comment créer un profil radial à partir d'images astronomiques (Chandra, XMM etc.) en utilisant python
Créer un ensemble de données d'images à utiliser pour la formation
Comment configurer un environnement Python à l'aide de pyenv
Comment créer un téléchargeur d'image avec Bottle (Python)
Comment exécuter une commande à l'aide d'un sous-processus en Python
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
[Partie 1] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 3] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 2] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Les gens mémorisent les connaissances acquises dans le cerveau, comment mémoriser les connaissances acquises dans l'apprentissage automatique
Papier: Traitement intracérébral de la musique
Comment créer un ensemble de données d'image de visage utilisé dans l'apprentissage automatique (3: Génération d'images de visage à partir d'images candidates, partie 1)
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Alignement d'image: du SIFT au deep learning
"Deep Learning from scratch" avec Haskell (inachevé)
Code simple qui donne un score de 0,81339 dans Kaggle's Titanic: Machine Learning from Disaster
Comment créer un environnement virtuel Anaconda à utiliser avec Azure Machine Learning et comment créer un lien avec Jupyter
Comment créer une instance d'une classe particulière à partir de dict en utilisant __new__ () en python
Comment dessiner de manière interactive un pipeline d'apprentissage automatique avec scikit-learn et l'enregistrer au format HTML
Comment obtenir uniquement les données nécessaires du groupe de données structurées à l'aide d'une méthode polyvalente
Comment générer une requête à l'aide de l'opérateur IN dans Django
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
Créez une IA qui identifie le visage de Zuckerberg grâce à l'apprentissage en profondeur ③ (Apprentissage des données)
Ensemble de données pour l'apprentissage automatique
Que diriez-vous d'Anaconda pour créer un environnement d'apprentissage automatique avec Python?
<Pandas> Comment gérer les données de séries chronologiques dans le tableau croisé dynamique
Comment mettre à jour une source de données de classeur packagée Tableau à l'aide de Python
Comment créer un fichier factice CSV contenant du japonais à l'aide de Faker
Les gens mémorisent les connaissances acquises dans le cerveau, comment mémoriser les connaissances acquises dans l'apprentissage automatique
[Version compatible TensorFlow 2.x] Comment entraîner une grande quantité de données à l'aide de TFRecord et DataSet dans TensorFlow (Keras)