Первым шагом в машинном обучении или глубоком обучении является получение набора данных, обычно мы используем наборы бизнес-данных или общедоступные наборы данных. В этой статье рассказывается об использовании Bing Image Search API и скрипта Python для быстрого создания собственного набора данных изображений.
1. Быстро создайте набор данных изображений. Мы будем использовать API поиска изображений Bing для создания собственного набора данных изображений.
Введите первыйBing Image Search APIВеб-сайт:нажмите на ссылку
Нажмите кнопку «Получить API-ключ».
Выберите 7-дневную пробную версию и нажмите кнопку «Начать».
Согласитесь с Условиями обслуживания Microsoft и отметьте регион, нажмите кнопку «Далее».
Вы можете использовать свою учетную запись Microsoft, Facebook, LinkedIn или GitHub для входа в систему, я использую свою учетную запись GitHub для входа.
Регистрация завершена, заходитеYour APIsстраница. Как показано ниже:
Перетащите вниз, чтобы просмотреть список доступных API и ключей API, обратите внимание на красное поле, которое будет использоваться в следующих разделах.
На данный момент у вас есть учетная запись Bing Image Search API, и вы можете использовать Bing Image Search API. Вы можете получить доступ:
- Quickstart: Search for images using the Bing Image Search REST API and Python
- How to page through results from the Bing Web Search API
Узнайте больше о том, как работает Bing Image Search API. Далее будет представлено написание скрипта Python для загрузки изображений с использованием Bing Image Search API.
2. Напишите скрипт Python для загрузки изображений
Сначала установите пакет запросов и выполните команду в терминале
$ pip install requests
Создайте новый файл, назовите его search_bing_api.py и вставьте следующий код.
# import the necessary packages
from requests import exceptions
import argparse
import requests
import os
import cv2
# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-q", "--query", required=True,
help="search query to search Bing Image API for")
args = vars(ap.parse_args())
query = args["query"]
output = "/Users/simon/AI/dataset/" + query
# set your Microsoft Cognitive Services API key along with (1) the
# maximum number of results for a given search and (2) the group size
# for results (maximum of 50 per request)
API_KEY = "YOUR Bing Image Search API Key"
MAX_RESULTS = 250
GROUP_SIZE = 50
# set the endpoint API URL
URL = "https://api.cognitive.microsoft.com/bing/v7.0/images/search"
# when attempting to download images from the web both the Python
# programming language and the requests library have a number of
# exceptions that can be thrown so let's build a list of them now
# so we can filter on them
EXCEPTIONS = set([IOError, FileNotFoundError,exceptions.RequestException, exceptions.HTTPError,exceptions.ConnectionError, exceptions.Timeout])
# store the search term in a convenience variable then set the
# headers and search parameters
term = query
headers = {"Ocp-Apim-Subscription-Key" : API_KEY}
params = {"q": term, "offset": 0, "count": GROUP_SIZE}
# make the search
print("[INFO] searching Bing API for '{}'".format(term))
search = requests.get(URL, headers=headers, params=params)
search.raise_for_status()
# grab the results from the search, including the total number of
# estimated results returned by the Bing API
results = search.json()
estNumResults = min(results["totalEstimatedMatches"], MAX_RESULTS)
print("[INFO] {} total results for '{}'".format(estNumResults,term))
# initialize the total number of images downloaded thus far
total = 0
# loop over the estimated number of results in `GROUP_SIZE` groups
for offset in range(0, estNumResults, GROUP_SIZE):
# update the search parameters using the current offset, then
# make the request to fetch the results
print("[INFO] making request for group {}-{} of {}...".format(
offset, offset + GROUP_SIZE, estNumResults))
params["offset"] = offset
search = requests.get(URL, headers=headers, params=params)
search.raise_for_status()
results = search.json()
print("[INFO] saving images for group {}-{} of {}...".format(
offset, offset + GROUP_SIZE, estNumResults))
# loop over the results
for v in results["value"]:
# try to download the image
try:
# make a request to download the image
print("[INFO] fetching: {}".format(v["contentUrl"]))
r = requests.get(v["contentUrl"], timeout=30)
# build the path to the output image
ext = v["contentUrl"][v["contentUrl"].rfind("."):]
p = os.path.sep.join([output, "{}{}".format(str(total).zfill(8), ext)])
# write the image to disk
f = open(p, "wb")
f.write(r.content)
f.close()
image = cv2.imread(p)
# if the image is `None` then we could not properly load the
# image from disk (so it should be ignored)
if image is None:
print("[INFO] deleting: {}".format(p))
os.remove(p)
continue
# catch any errors that would not unable us to download the
# image
except Exception as e:
# check to see if our exception is in our list of
# exceptions to check for
if type(e) in EXCEPTIONS:
print("[INFO] skipping: {}".format(v["contentUrl"]))
continue
# update the counter
total += 1
Выше приведен весь код загружаемого изображения Python.Обратите внимание, что красное поле ниже заменено вашим собственным файловым каталогом и вашим собственным ключом API поиска изображений Bing.
3. Запустите скрипт загрузки, чтобы загрузить образ
Создайте домашний каталог хранилища изображений и выполните команду в терминале
$ mkdir dataset
Создайте каталог хранения для текущего загруженного контента и выполните команду в терминале
$ mkdir dataset/pikachu
Терминал выполняет команду следующим образом, чтобы начать загрузку изображения
$ python search_bing_api.py --query "pikachu"
[INFO] searching Bing API for 'pikachu'
[INFO] 250 total results for 'pikachu'
[INFO] making request for group 0-50 of 250...
[INFO] saving images for group 0-50 of 250...
[INFO] fetching: http://images5.fanpop.com/image/photos/29200000/PIKACHU-pikachu-29274386-861-927.jpg
[INFO] skipping: http://images5.fanpop.com/image/photos/29200000/PIKACHU-pikachu-29274386-861-927.jpg
[INFO] fetching: http://images6.fanpop.com/image/photos/33000000/pikachu-pikachu-33005706-895-1000.png
[INFO] skipping: http://images6.fanpop.com/image/photos/33000000/pikachu-pikachu-33005706-895-1000.png
[INFO] fetching: http://images5.fanpop.com/image/photos/31600000/Pikachu-with-pokeball-pikachu-31615402-2560-2245.jpg
Таким же образом загрузите и другие изображения: чармандер, сквиртл, бульбазавр, мьюту
скачать чармандер
$ mkdir dataset/charmander
$ python search_bing_api.py --query "charmander"
скачать сквиртл
$ mkdir dataset/squirtle
$ python search_bing_api.py --query "squirtle"
скачать бульбазавр
$ mkdir dataset/bulbasaur
$ python search_bing_api.py --query "bulbasaur"
скачать мьюту
$ mkdir dataset/mewtwo
$ python search_bing_api.py --query "mewtwo"
Загруженное изображение показано ниже
Для завершения загрузки требуется около 30 минут, а изображения в последних пяти папках выглядят следующим образом.
Чтобы лучше обучить модель, мы должны выполнить фильтрацию изображений, чтобы удалить неподходящие изображения. Например, в папке определенной категории удалите изображения, не относящиеся к этой категории, удалите изображения, содержащие другие категории и т. д. Метод фильтрации заключается в открытии папки, просмотре изображений и ручной фильтрации.
На данный момент мы создали собственный набор данных изображений. следующий разделВведение в глубокое обучение (2) Обучение и использование модели Keras, мы будем использовать этот набор данных изображения.
Отсканируйте код, чтобы подписаться на официальный аккаунт, и ответьте на «Набор данных», чтобы получить этот набор данных изображения.