Appelez l'API Bing Image Search v5 depuis Python pour collecter des images

J'ai collecté des images à l'aide de l'API bing Image Search pour le Deep Learning dans TensorFlow. Nous rendons possible la collecte d'un grand nombre d'images. Je cours dans l'environnement suivant.

type version Remarques
OS Windows10 Pro 64 bit
Anaconda Anaconda 4.4.0 Je crée un environnement virtuel sur Anaconda
Python 3.5 Parce qu'il coexiste avec TensorFlow, 3.5
demande la bibliothèque 2.18.4 Je l'utilise pour appeler l'API Bing
* Je l'ai utilisé par manque de compétences et de connaissances de l'auteur, mais cela devrait être possible même si je ne l'utilise pas
API Bing Image Search API v5 J'utilise la v5 car je n'ai pas encore publié la v7.
Je ne l'ai pas comparé avec Google.

Fonction implémentée

Exécuter sans paramètres

Tout d'abord, exécutez le programme sans paramètres.

python get_images_via_bing_20170822.py

La progression est affichée de cette manière. Les deux lignes "Obtenir 3 images à partir du décalage X" s'affichent car l'API Bing Image Search est appelée deux fois. En effet, les spécifications de l'API vous permettent de récupérer jusqu'à 150 résultats de recherche en un seul appel, vous pouvez donc appeler plusieurs fois afin de pouvoir récupérer un grand nombre de résultats. 30.Execution01.JPG

Des chats mignons ont été rassemblés dans le dossier. 30.Execution02.JPG

Exécuter avec des paramètres

Essayez d'exécuter le programme avec des paramètres. Obtenez 80 résultats une fois avec le terme de recherche "chat".

python get_images_via_bing_20170822.py --query "cat" --call_count 1 --image_count 80

"Type de fichier non enregistré:" n'acquiert pas de types d'image autres que jpeg et png, et affiche uniquement ce fait dans le journal. 30.Execution03.JPG

Il recueille les coups: smile_cat: 30.Execution04.JPG

Procédure de montage

1. Configuration du compte Microsoft Azure

Cliquez sur le lien «Compte gratuit» sur la page Azure Cognitive Service (https://azure.microsoft.com/en-us/services/cognitive-services/). 10.StartBing01.JPG

Cliquez sur le lien "Commencer gratuitement" 10.StartBing02.JPG

J'avais un compte, alors je suis allé m'inscrire. Après cela, je mets mes informations personnelles (la mémoire est ambiguë). 10.StartBing03.JPG 10.StartBing04.JPG

Un e-mail de bienvenue sera envoyé à l'adresse e-mail de votre compte, cliquez donc sur le lien, puis accédez à l'écran du portail. Cliquez sur l'icône «+» et cliquez sur «créer» dans les API de recherche Bign. 10.StartBing05.JPG

Créé en sélectionnant la version gratuite des API Bing Search. 10.StartBing06.JPG

Cliquez sur "Afficher les clés d'accès" dans Gérer les clés et notez les clés. Deux sont affichés, mais il semble que l'un ou l'autre fonctionne bien (j'utilise le premier et le second n'est pas confirmé). 10.StartBing07.JPG

2. Installer les demandes

Je l'ai installé car il n'y avait aucune demande dans mon environnement. Ignorez ceux qui l'ont déjà installé. De plus, comme mentionné au début, je pense que cela peut être réalisé sans cela. Installez-le dans l'environnement virtuel d'Anaconda "tensorflow121". Démarrez le terminal à partir d'Anaconda Navigator. 20.InstallLibraries01.JPG

Les deux installés avec pip. Je n'ai rien fait de particulièrement difficile.

pip install requests

20.InstallLibraries02.JPG

3. Code Python

Je l'ai fait comme ça.

Aperçu fonctionnel

Paramètres d'exécution

--image_count: nombre de fichiers image acquis par un appel d'API Bing --call_count: Nombre d'appels d'API Bing dans une exécution de programme (nombre total d'images acquises par image_count x call_count) --off_set_start: Où appeler pendant un appel --output_path: répertoire de sortie de l'image --query: terme de recherche

Veuillez réécrire la partie «Veuillez saisir votre clé d'abonnement ici» du code ci-dessous avec la clé d'abonnement créée dans le portail Azure.

import argparse, requests, urllib.parse, os, io, imghdr

#Paramètres de base du modèle
FLAGS = None

#point final
kEndPoint = 'https://api.cognitive.microsoft.com/bing/v5.0/images/search'

#en-tête de requête http
kHeaders = { 'Ocp-Apim-Subscription-Key': 'Entrez votre clé d'abonnement ici' }

#Obtenir une liste d'URL d'image pour les résultats de recherche
def GetImageUrls():
    print('Start getting %d images from offset %d' % (FLAGS.image_count, FLAGS.off_set_start ))
    image_list = []
    
    #Étant donné que la limite de l'API bing est de 150, boucle et appel_Obtenez le nombre de fois
    for step in range(FLAGS.call_count):

        #Obtenir un décalage
        off_set = FLAGS.off_set_start + step * FLAGS.image_count

        #Paramètres de requête http
        params = urllib.parse.urlencode({
            'count': FLAGS.image_count,
            'offset': off_set,
            'imageType':'Photo',
            'q': FLAGS.query,
        })
#            'mkt': 'ja-JP',

        #appel API Bing
        res = requests.get(kEndPoint, headers=kHeaders, params=params)
        
        if step == 0:
            print('Total Estimated Mathes: %s' % res.json()['totalEstimatedMatches'])
        vals = res.json()['value']
        
        print('Get %d images from offset %d' % (len(vals), off_set))

        #Stocker l'URL de l'image résultante
        for j in range(len(vals)):
            image_list.append(vals[j]["contentUrl"])

    return image_list

#Obtenir une image et enregistrer localement
def fetch_images(image_list):
    print('total images:%d' % len(image_list))
    for i in range(len(image_list)):
        
        #Sortie de progression pour 100 cas
        if i % 100 == 0:
            print('Start getting and saving each image:%d' % i)
        try:
            #Acquisition d'image
            response = requests.get(image_list[i], timeout=5 )

        #Puisqu'une erreur peut survenir en fonction de la source d'acquisition, connectez-vous et continuez
        except requests.exceptions.RequestException:
            print('%d:Error occurs :%s' % (i, image_list[i]))
            continue
            
        #Filtrer par type d'image
        with io.BytesIO(response.content) as fh:
            image_type = imghdr.what(fh)
            if imghdr.what(fh) != 'jpeg' and imghdr.what(fh) != 'png':
                print('Not saved file type:%s' % imghdr.what(fh))
                continue
                
        #Enregistrer l'image localement
            with open('{}/image.{}.{}'.format(FLAGS.output_path, str(i), imghdr.what(fh)), 'wb') as f:
                f.write(response.content)
            
#Passer si courir directement(Importé et ne passe pas à l'exécution)
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '--image_count',
        type=int,
        default=3,
        help='collection number of image files per api call.'
  )
    parser.add_argument(
        '--call_count',
        type=int,
        default=2,
        help='number of api calls.'
  )
    parser.add_argument(
        '--off_set_start',
        type=int,
        default=0,
        help='offset start.'
  )
    parser.add_argument(
        '--output_path',
        type=str,
        default='./images',
        help='image files output directry.'
  )
    parser.add_argument(
        '--query',
        type=str,
        default='Chat',
        help='search query.'
  )
    
    #Acquisition et exécution des paramètres
    FLAGS, unparsed = parser.parse_known_args()
    fetch_images(GetImageUrls())

Ce que je voulais faire mais que je ne pouvais pas faire

Je n'ai pas eu assez de temps pour faire ce qui suit: J'abandonne parce que cela semble prendre du temps pour les débutants en Python.

--Une fonction qui se termine automatiquement lorsque le nombre total de résultats de recherche est atteint: vous pouvez coder normalement, mais c'est gênant ...

Lien de référence

Cette fois, je publierai le site référencé sous forme de lien.

site commentaire
Outil de test officiel J'ai fait le code en regardant ici
Document officiel de l'API J'ai évoqué les paramètres qui pourraient être utilisés
Au fait, où est passé OData?
Collectez automatiquement des images à l'aide de l'API Bing Image Search J'ai utilisé beaucoup d'informations sur l'API Bing
L'histoire de la migration de l'API Bing Search v2 vers la v5 J'ai surtout évoqué la logique de la partie acquisition d'image
bing_image_getter.py J'ai d'abord changé en fonction de cette source

Recommended Posts

Appelez l'API Bing Image Search v5 depuis Python pour collecter des images
Collection d'images à l'aide de l'API Google Custom Search
POSTER des photos avec l'API Microsoft Bing Image Search pour obtenir des informations sur les images (Python)
[Python] Téléchargez l'image d'origine à partir de la recherche d'images Google
[Python] Spécifiez la plage de l'image en faisant glisser la souris
Reconnaissance vocale des fichiers par l'API Google Speech v2 à l'aide de Python
API Web EXE par Python
Collection d'images avec scraping Web
Traitement d'image par python (Pillow)
Collection de traitement d'image en Python
Utilisez l'API e-Stat de Python
Recherche par image de la pellicule en utilisant Pythonista3
Utilisez le code python pour détecter la posture par openpose à partir de l'image de la caméra USB
Utilisez l'API kabu Station® de Python
Conseils pour appeler Python à partir de C
Utilisez l'API Flickr de Python
python Obtenez la météo à venir de l'API météo
Comment utiliser l'API Bing Search
Exécutez Ansible à partir de Python à l'aide de l'API
Utiliser l'API Google Analytics de Python
Gérer l'API SOAP depuis Python (Zeep)
Collecter des informations sur Twitter avec Python (API Twitter)
[Python] Application Web à partir de 0! Pratique (3) - Mise en œuvre de l'API
Traitement d'image par le remplacement du canal Python 100 Knock # 1
Obtenez des images par recherche par mot-clé sur Twitter
Remarque pour Pyjulia appelant Julia depuis Python
Échelle de gris par matrice-Reinventor of Python image processing-
Traitement d'image par Python 100 Knock # 6 Traitement de réduction de couleur
Utiliser l'API Google Cloud Vision de Python
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Acquisition d'images depuis une caméra avec Python + OpenCV
Enregistrer l'image du chien à partir de la recherche d'images Google
Essayez d'appeler Python depuis Ruby avec une économie
Analyse d'image de microtomographie à rayons X par Python
Recherche homebrew à partir du nom du module python (ShellScript)
Implémentation du wrapper Python pour l'API Qiita v2
Explication API pour toucher mastodonte de python
Connectez-vous à l'API Websocket de Coincheck depuis Python
Enregistrez automatiquement les images de vos personnages préférés à partir de la recherche d'images Google avec Python
Obtenez une liste d'articles publiés par les utilisateurs avec Python 3 Qiita API v2