Очистка результатов поиска картинок Google

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

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

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

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

ШАГ 1: ПОЛУЧИТЕ ВСЕ ИМПОРТ

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

ШАГ 2. НАСТРОЙКА ДРАЙВЕРА SELENIUM

Если вы еще не установили селен в свою систему, вам нужно будет сделать это с помощью pip или conda (для Python3 вам может понадобиться вместо этого использовать pip3).

После этого вам нужно будет настроить путь к драйверу для драйвера Chrome, поскольку для работы Selenium требуется драйвер браузера (вы также можете использовать Chrome или веб-драйвер Fireforx). Мы также устанавливаем папку для сохранения наших изображений (с этим кодом рекомендуется сначала убедиться, что папка создана вручную) с переменной для хранения ссылки Google на изображения, которые мы хотим очистить. здесь (в этой ситуации мы очищаем изображения шлема). Все описано в коротком коде ниже:

ШАГ 3: СОЗДАЙТЕ ФУНКЦИЮ ПРОКРУТИТЕ ДО КОНЦА

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

Здесь мы достигаем этого с помощью функции выполнения сценария, которая позволяет нам запускать функцию Javascript, которая обращается к DOM и прокручивает HTML-страницу вниз, как показано ниже в функции scroll_to_end:

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

ШАГ 4: НАЧНИТЕ ЦИКЛ И ПОЛУЧИТЕ ВСЕ ИЗОБРАЖЕНИЯ ПО НАЗВАНИЮ КЛАССА

Здесь мы начинаем интересную часть кодирования, создавая цикл с использованием функции диапазона для получения изображений со страниц 1–9 (вы можете редактировать диапазон в зависимости от того, сколько изображений вы хотите).

Мы начинаем с прокрутки вниз, чтобы сначала получить все изображения, которые мы можем получить для этой страницы, затем мы используем функцию find_elements_by_class_name, чтобы получить класс'rg_i' (обратите внимание, что этот класс может измениться со временем)поскольку это имя класса, которое страница результатов Google Image использует для рендеринга изображений.

Эта функция возвращает все элементы этого класса. Важно отметить, что это имя может меняться со временем, и все, что вам нужно сделать, это получить новое имя класса для изображений на странице результатов Google Image.

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

Мы можем добиться всего этого с помощью приведенного ниже фрагмента кода:

ШАГ 5. КОНВЕРТИРОВАНИЕ ИЗОБРАЖЕНИЙ ИЗ BASE64 В JPEG

Google хранит изображения на веб-странице в формате base64, поэтому, если вы проверите элемент, src будет выглядеть примерно так, как показано на изображении ниже:

Нам нужно преобразовать эти изображения в формате base64 в двоичный формат, и у Python есть как раз подходящая библиотека для этого: библиотека base64.

Перед преобразованием мы разделяем исходный текст, используя текст «data:image/jpeg;base64», и создаем массив из двух элементов. Один со строкой «data:image/jpeg;base64», а другой с фактическим строка base64, которая нам нужна для преобразования.

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

Обратите внимание, что фрагмент кода содержит повторяющийся код для облегчения понимания.

ШАГ 6. ЗАГРУЗИТЕ ИЗОБРАЖЕНИЯ НЕ BASE64 С ПОМОЩЬЮ БИБЛИОТЕКИ PYTHON URLLIB

Как упоминалось ранее, не все изображения хранятся в base64, некоторые содержат ссылку на изображение и хранятся в таком формате:

Для таких изображений мы используем библиотеку urllib для загрузки и хранения изображений напрямую, как в приведенном ниже коде:

БУДУЩИЕ РАБОТЫ

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

Меня интересуют любые другие модификации, которые вы хотели бы, чтобы я сделал, просто добавьте комментарий ниже, и вот ссылка на полный код на Github: https://github.com/Emmanuel96/scrape_helmets_from_google/tree/ главная.

Спасибо, что прочитали.