Rufen Sie die Bing Image Search API v5 von Python auf, um Bilder zu sammeln

Ich habe Bilder mit der Bing Image Search API für Deep Learning in TensorFlow gesammelt. Wir ermöglichen es, eine große Anzahl von Bildern zu sammeln. Ich laufe in der folgenden Umgebung.

Art Ausführung Bemerkungen
OS Windows10 Pro 64 bit
Anaconda Anaconda 4.4.0 Ich erstelle eine virtuelle Umgebung auf Anaconda
Python 3.5 Weil es mit TensorFlow koexistiert, 3.5
fordert Bibliothek an 2.18.4 Ich benutze es, um die Bing-API aufzurufen
* Ich habe es aufgrund mangelnder Fähigkeiten und Kenntnisse des Autors verwendet, aber es sollte möglich sein, auch wenn ich es nicht benutze
API Bing Image Search API v5 Ich benutze v5, weil ich v7 noch nicht veröffentlicht habe.
Ich habe es nicht mit Google verglichen.

Implementierte Funktion

Ohne Parameter ausführen

Führen Sie zunächst das Programm ohne Parameter aus.

python get_images_via_bing_20170822.py

Der Fortschritt wird auf diese Weise angezeigt. Die beiden Zeilen "3 Bilder vom Versatz X abrufen" werden angezeigt, da die Bing Image Search-API zweimal aufgerufen wird. Dies liegt daran, dass Sie mit den API-Spezifikationen mit einem einzigen Aufruf bis zu 150 Suchergebnisse abrufen können, sodass Sie mehrere Aufrufe durchführen können, um eine große Anzahl von Ergebnissen abzurufen. 30.Execution01.JPG

Süße Katzen wurden im Ordner gesammelt. 30.Execution02.JPG

Mit Parametern ausführen

Versuchen Sie, das Programm mit Parametern auszuführen. Erhalten Sie einmal 80 Ergebnisse mit dem Suchbegriff "Katze".

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

"Nicht gespeicherter Dateityp:" erfasst keine anderen Bildtypen als JPEG und PNG und gibt diese Tatsache nur in das Protokoll aus. 30.Execution03.JPG

Es sammelt Stampfen: smile_cat: 30.Execution04.JPG

Montagevorgang

1. Einrichtung des Microsoft Azure-Kontos

Klicken Sie auf der Seite "Azure Cognitive Service" (https://azure.microsoft.com/en-us/services/cognitive-services/) auf den Link "Kostenloses Konto". 10.StartBing01.JPG

Klicken Sie auf den Link "Kostenlos loslegen" 10.StartBing02.JPG

Ich hatte ein Konto und habe mich angemeldet. Danach gebe ich meine persönlichen Daten ein (das Gedächtnis ist nicht eindeutig). 10.StartBing03.JPG 10.StartBing04.JPG

Eine Begrüßungs-E-Mail wird an die E-Mail-Adresse Ihres Kontos gesendet. Klicken Sie also auf den Link und wechseln Sie zum Portalbildschirm. Klicken Sie auf das Symbol "+" und dann in den Bign Search-APIs auf "Erstellen". 10.StartBing05.JPG

Erstellt durch Auswahl der kostenlosen Version der Bing Search-APIs. 10.StartBing06.JPG

Klicken Sie unter Schlüssel verwalten auf "Zugriffsschlüssel anzeigen" und notieren Sie sich die Schlüssel. Zwei werden angezeigt, aber es scheint, dass beide in Ordnung sind (ich verwende die erste und die zweite ist nicht bestätigt). 10.StartBing07.JPG

2. Installieren Sie die Anforderungen

Ich habe es installiert, weil in meiner Umgebung keine Anforderungen vorhanden waren. Ignorieren Sie diejenigen, die es bereits installiert haben. Wie eingangs erwähnt, denke ich auch, dass dies ohne sie erreicht werden kann. Installieren Sie es in Anacondas virtueller Umgebung "tensorflow121". Starten Sie das Terminal von Anaconda Navigator aus. 20.InstallLibraries01.JPG

Beide mit pip installiert. Ich habe nichts besonders Schwieriges getan.

pip install requests

20.InstallLibraries02.JPG

3. Python-Code

Ich habe es so gemacht.

Funktionsübersicht

Laufzeitparameter

--image_count: Anzahl der Bilddateien, die von einem Bing-API-Aufruf erfasst wurden --call_count: Anzahl der Bing-API-Aufrufe in einer Programmausführung (Gesamtzahl der von image_count x call_count erfassten Bilder) --off_set_start: Wo während des Anrufs angerufen werden soll --output_path: Bildausgabeverzeichnis --query: Suchbegriff

Schreiben Sie den Teil "Bitte geben Sie Ihren Abonnementschlüssel hier ein" des folgenden Codes mit dem im Azure-Portal erstellten Abonnementschlüssel neu.

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

#Grundlegende Modellparameter
FLAGS = None

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

#http-Anforderungsheader
kHeaders = { 'Ocp-Apim-Subscription-Key': 'Geben Sie hier Ihren Abonnementschlüssel ein' }

#Holen Sie sich eine Liste der Bild-URLs für Suchergebnisse
def GetImageUrls():
    print('Start getting %d images from offset %d' % (FLAGS.image_count, FLAGS.off_set_start ))
    image_list = []
    
    #Da das Bing-API-Limit bis zu 150 beträgt, können Sie eine Schleife ausführen und aufrufen_Zählen Sie mal
    for step in range(FLAGS.call_count):

        #Versatz abrufen
        off_set = FLAGS.off_set_start + step * FLAGS.image_count

        #http-Anforderungsparameter
        params = urllib.parse.urlencode({
            'count': FLAGS.image_count,
            'offset': off_set,
            'imageType':'Photo',
            'q': FLAGS.query,
        })
#            'mkt': 'ja-JP',

        #bing API-Aufruf
        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))

        #Speichern Sie die resultierende Bild-URL
        for j in range(len(vals)):
            image_list.append(vals[j]["contentUrl"])

    return image_list

#Holen Sie sich ein Bild und speichern Sie es lokal
def fetch_images(image_list):
    print('total images:%d' % len(image_list))
    for i in range(len(image_list)):
        
        #Fortschrittsausgabe für jeweils 100 Fälle
        if i % 100 == 0:
            print('Start getting and saving each image:%d' % i)
        try:
            #Bildaufnahme
            response = requests.get(image_list[i], timeout=5 )

        #Da je nach Erfassungsquelle ein Fehler auftreten kann, protokollieren Sie einfach und fahren Sie fort
        except requests.exceptions.RequestException:
            print('%d:Error occurs :%s' % (i, image_list[i]))
            continue
            
        #Nach Bildtyp filtern
        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
                
        #Bild lokal speichern
            with open('{}/image.{}.{}'.format(FLAGS.output_path, str(i), imghdr.what(fh)), 'wb') as f:
                f.write(response.content)
            
#Bestehen, wenn direkt ausgeführt(Importiert und nicht zur Laufzeit übergeben)
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='Katze',
        help='search query.'
  )
    
    #Parametererfassung und -ausführung
    FLAGS, unparsed = parser.parse_known_args()
    fetch_images(GetImageUrls())

Was ich tun wollte, aber nicht konnte

Ich konnte Folgendes nicht tun, weil ich nicht genug Zeit hatte. Ich gebe auf, weil es für Python-Anfänger einige Zeit zu dauern scheint.

Referenzlink

Dieses Mal werde ich die Seite, auf die verwiesen wird, als Link veröffentlichen.

Seite? ˅ Kommentar
Offizielles Testwerkzeug Ich habe den Code gemacht, als ich hier gesucht habe
API offizielles Dokument Ich bezog mich auf die Parameter, die verwendet werden könnten
Übrigens, wohin ist OData gegangen?
Sammeln Sie Bilder automatisch mit der Bing Image Search API Ich war sehr hilfreich bei der Bing-API
Die Geschichte der Migration von Bing Search API v2 auf v5 Ich habe mich insbesondere auf die Logik des Bildaufnahme-Teils bezogen
bing_image_getter.py Zuerst habe ich mich basierend auf dieser Quelle geändert

Recommended Posts

Rufen Sie die Bing Image Search API v5 von Python auf, um Bilder zu sammeln
Bildersammlung mit der benutzerdefinierten Such-API von Google
POST-Fotos mit Microsoft Bing Image Search API, um Image Insights (Python) zu erhalten
[Python] Laden Sie das Originalbild von der Google Bildsuche herunter
[Python] Geben Sie den Bereich des Bildes durch Ziehen der Maus an
Sprachdateierkennung durch Google Speech API v2 mit Python
EXE Web API von Python
Bildersammlung mit Web Scraping
Bildverarbeitung mit Python (Pillow)
Bildverarbeitungssammlung in Python
Verwenden Sie die e-Stat-API von Python
Suchen Sie mit Pythonista3 nach einem Bild von der Kamerarolle
Verwenden Sie Python-Code, um die Körperhaltung durch Öffnen des USB-Kamerabilds zu erkennen
Verwenden Sie die kabu Station® API von Python
Tipps zum Aufrufen von Python von C.
Verwenden Sie die Flickr-API von Python
Python Holen Sie sich das kommende Wetter von der Wetter-API
Wie benutzt man Bing Search API?
Führen Sie Ansible über Python mithilfe der API aus
Verwenden Sie die Google Analytics-API von Python
Behandeln Sie die SOAP-API von Python (Zeep)
Sammeln von Informationen von Twitter mit Python (Twitter API)
[Python] Webanwendung von 0! Hands-on (3) -API-Implementierung-
Bildverarbeitung durch Python 100 Knock # 1 Kanalersatz
Holen Sie sich Bilder per Stichwortsuche von Twitter
Hinweis für Pyjulia, die Julia aus Python anruft
Graustufen durch Matrix-Reinventor der Python-Bildverarbeitung-
Bildverarbeitung mit Python 100 Knock # 6 Farbreduktionsverarbeitung
Verwenden Sie die Google Cloud Vision-API von Python
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Bildaufnahme von der Kamera mit Python + OpenCV
Speichern Sie das Hundebild aus der Google-Bildsuche
Versuchen Sie, Python von Ruby aus mit Sparsamkeit aufzurufen
Analyse des Röntgenmikrotomographiebildes durch Python
Homebrew-Suche anhand des Python-Modulnamens (ShellScript)
Implementierter Python-Wrapper für Qiita API v2
API-Erklärung zum Berühren von Mastodon aus Python
Stellen Sie von Python aus eine Verbindung zur Websocket-API von coincheck her
Speichern Sie automatisch Bilder Ihrer Lieblingsfiguren aus der Google Bildsuche mit Python
Holen Sie sich eine Liste der Artikel, die von Benutzern mit Python 3 Qiita API v2 veröffentlicht wurden