Введение в глубокое обучение (1) Быстрое создание собственного набора данных изображений

глубокое обучение

Первым шагом в машинном обучении или глубоком обучении является получение набора данных, обычно мы используем наборы бизнес-данных или общедоступные наборы данных. В этой статье рассказывается об использовании Bing Image Search API и скрипта Python для быстрого создания собственного набора данных изображений.

1. Быстро создайте набор данных изображений. Мы будем использовать API поиска изображений Bing для создания собственного набора данных изображений.

Введите первыйBing Image Search APIВеб-сайт:нажмите на ссылку

001.jpg

Нажмите кнопку «Получить API-ключ».

002.jpg

Выберите 7-дневную пробную версию и нажмите кнопку «Начать».

003.jpg

Согласитесь с Условиями обслуживания Microsoft и отметьте регион, нажмите кнопку «Далее».

004.jpg

Вы можете использовать свою учетную запись Microsoft, Facebook, LinkedIn или GitHub для входа в систему, я использую свою учетную запись GitHub для входа.

Регистрация завершена, заходитеYour APIsстраница. Как показано ниже:

005.jpg

Перетащите вниз, чтобы просмотреть список доступных API и ключей API, обратите внимание на красное поле, которое будет использоваться в следующих разделах.

006.jpg

На данный момент у вас есть учетная запись Bing Image Search API, и вы можете использовать Bing Image 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.

007.jpg

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"

Загруженное изображение показано ниже

008.jpg

Для завершения загрузки требуется около 30 минут, а изображения в последних пяти папках выглядят следующим образом.

009.jpg

Чтобы лучше обучить модель, мы должны выполнить фильтрацию изображений, чтобы удалить неподходящие изображения. Например, в папке определенной категории удалите изображения, не относящиеся к этой категории, удалите изображения, содержащие другие категории и т. д. Метод фильтрации заключается в открытии папки, просмотре изображений и ручной фильтрации.

На данный момент мы создали собственный набор данных изображений. следующий разделВведение в глубокое обучение (2) Обучение и использование модели Keras, мы будем использовать этот набор данных изображения.

Отсканируйте код, чтобы подписаться на официальный аккаунт, и ответьте на «Набор данных», чтобы получить этот набор данных изображения.

0010.jpg