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. |
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.
Süße Katzen wurden im Ordner gesammelt.
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.
Es sammelt Stampfen: smile_cat:
Klicken Sie auf der Seite "Azure Cognitive Service" (https://azure.microsoft.com/en-us/services/cognitive-services/) auf den Link "Kostenloses Konto".
Klicken Sie auf den Link "Kostenlos loslegen"
Ich hatte ein Konto und habe mich angemeldet. Danach gebe ich meine persönlichen Daten ein (das Gedächtnis ist nicht eindeutig).
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".
Erstellt durch Auswahl der kostenlosen Version der Bing Search-APIs.
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).
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.
Beide mit pip installiert. Ich habe nichts besonders Schwieriges getan.
pip install requests
Ich habe es so gemacht.
--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())
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.
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