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

Selenium - это инструмент с открытым исходным кодом для автоматизации веб-браузера. Он предоставляет единый интерфейс для написания сценариев на нескольких языках. Затем эти сценарии выполняются уважаемым драйвером браузера.

Важность набора данных в машинном / глубоком обучении

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

Следовательно, становится квинтэссенцией иметь и работать над наиболее подходящим набором данных для решения проблем ML / DL. Один из самых сложных наборов данных для создания или поддержки - это набор данных на основе файла изображения, поскольку его актуальность резко меняется от одной постановки задачи к другой. Для получения необходимого соответствующего набора данных изображений можно использовать разные платформы и веб-сайты, но этого часто бывает недостаточно. Одним из наиболее точных и богатых источников набора данных изображений является поиск на основе ключевых слов в поисковых системах или поисковые системы изображений на основе ключевых слов, например Изображения Google и Изображения Bing и т. Д.

В этой статье мы рассмотрим методику автоматизации создания набора данных изображения из Картинок Google с помощью Python с Selenium на основе файла запроса. Полный код с зависимостями можно найти в конце этой статьи.

Автоматизация создания наборов данных из изображений Google

Шаги, вовлеченные в процесс

  1. Создание файла CSV, который содержит такие данные, как ключевые слова, количество загружаемых изображений, разрешение и т. Д.
  2. Получение URL-адресов изображений по заданному ключевому слову
  3. Изменение размера изображения из полученного URL-адреса, установленного на входное разрешение.
  4. Загрузка окончательно измененного изображения на локальный диск.

Создание CSV-файла запросов / ключевых слов

CSV-файл содержит список ключевых слов и других параметров, которые можно установить вручную и по-разному для каждого ключевого слова, чтобы создать набор данных, более адаптированный к нашим потребностям в данных. Включены следующие параметры:

  • Ключевое слово и количество изображений: ключевые слова, которые будут использоваться для поиска связанных изображений, и количество изображений, которые должны быть загружены для данного ключевого слова.
  • Разрешение. Разрешение в пикселях для данного вырезанного изображения.

Получение URL-адресов изображений по заданному ключевому слову

Это этап, на котором мы будем очищать Изображения Google от URL-адресов упомянутого ключевого слова, и для этого мы будем использовать Selenium. Selenium требует драйверов браузера для автоматизации веб-браузера. В этой статье мы использовали Chrome. хромированные отвертки можно скачать по этой ссылке.

Определение chromedriver или веб-драйвера.

wd = webdriver.Chrome(executable_path = DRIVER_PATH)

Поиск изображений Google по заданному запросу или ключевому слову.

wd.get(search_url.format(q=query))

Использование селектора CSS для получения элементов изображения.

actual_images = wd.find_elements_by_css_selector('img.n3VNCb')

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

def scroll_to_end(wd):
 wd.execute_script("window.scrollTo(0,document.body.scrollHeight);")
 time.sleep(sleep_between_interactions)

Извлечение ссылок на изображения из элементов изображения.

for actual_image in actual_images:
    if actual_image.get_attribute('src') and 'http' in actual_image.get_attribute('src'):
        image_urls.add(actual_image.get_attribute('src'))

Изменение размера и загрузка изображения, установите разрешение из полученного URL.

После получения URL-адресов изображений они должны быть установлены на разрешение по нашему выбору, чтобы получить однородность в наборе данных, а также в соответствии с конфигурацией нашей системы или поддержкой. Для этого мы используем библиотеку Python Pillow, которая используется для обработки изображений и т. Д. Библиотека запросов используется для обработки полученного URL-адреса, который будет использоваться функциями Pillow.

Открытие изображений с самого URL

response = requests.get(url)
img = Image.open(BytesIO(response.content))

Изменение разрешения изображения.

newsize = (x,y)
img = img.resize(newsize)

Скачивание файлов на локальный диск.

mg.save(download_path+q+"_"+str(i)+".jpeg","JPEG")

Примечание. Средство очистки может выдать некоторую ошибку при удалении и вернуть NULL набор URL-адресов для устранения того, что блок try-except использовался в этом В этом случае попробуйте повторно запустить код или изменить параметры в query.csv

Зависимости / Требования

Установите chromedriver по следующей ссылке.

Чтобы просмотреть весь код этого проекта, перейдите по ссылке на Github.

Это все для этой статьи. Прокомментируйте и поделитесь, если вы столкнетесь с какими-либо проблемами или ошибками при использовании этого подхода. Если вы использовали альтернативный подход, поделитесь.