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.
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 **.
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,
Faites deux pas. Par conséquent, comme mentionné ci-dessus, OpenCV est nécessaire en tant que bibliothèque à importer.
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é.
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.
Point d'information | Contenu |
---|---|
Ocp-Apim-Subscription-Key | Chaîne de clé d'abonnement |
É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
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