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

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

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

Как работает Clarifai

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

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

Давайте начнем с нашего примера приложения, которое мы создадим за 10 коротких шагов. Clarifai API поддерживает довольно много языков. Я буду писать это приложение на NodeJS из-за простоты настройки.

Шаг 1. Создайте учетную запись в Clarifai API и получите ключ API.

Перед тем, как приступить к созданию приложения, вам необходимо создать учетную запись в Clarifai, чтобы использовать их API. После того, как вы войдете в систему, у вас будет приложение по умолчанию в вашей учетной записи с именем my-first-application, вы можете либо создать новое приложение, либо использовать само это приложение. В любом случае щелкните меню ключей API слева и скопируйте свой ключ API.

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

Шаг 2. Настройте приложение

Теперь, когда вы получили свой ключ API, мы можем приступить к созданию приложения. Поскольку мы создаем приложение на NodeJS, вам нужно будет загрузить и установить NodeJS, если у вас его еще нет. Затем вам нужно установить пакет Clarifai API, написав «npm install clarifai» (без кавычек) в вашем терминале. В результате в вашей системе будет установлен Clarifai API.

Как только это будет сделано, вы готовы приступить к разработке приложения.

Шаг 3. Инициализируйте свое приложение

Откройте любой редактор кода (в моем случае - VS Code) и создайте файл с именем index.js. Вы можете называть его как хотите, но расширение должно быть JS, поскольку мы пишем на NodeJS. Вставьте следующий код:

Замените «YOUR_API_KEY» на ключ API, который вы скопировали на первом шаге.

Первая строка указывает приложению использовать пакет Clarifai, который мы установили на предыдущем шаге. Следующая строка инициализирует новое приложение Clarifai с вашим ключом API. Это позволяет Clarifai знать, что предстоящие звонки совершаются через ваше приложение.

Шаг 4. Добавьте изображения собак

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

В приведенном ниже коде я собрал несколько изображений собак из простого поиска Google и добавил их в качестве входных данных.

Примечание. За один вызов можно отправить не более 128 изображений, поэтому, если у вас более 128 изображений, вам нужно будет разделить их на отдельные вызовы. Вы также можете отправлять изображения в кодировке base64 вместо URL-адресов изображений.

Шаг 5. Поиск по изображению

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

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

Ответ уже отсортирован в порядке убывания вероятности в диапазоне от 0 до 1 с точностью до многих десятичных знаков. В этом примере максимальное значение 0,9178174. Это означает, что Clarifai примерно на 91,7% уверен, что отправленное мной изображение похоже на лучший результат.

Шаг 6: поиск по концепции

Мы выполнили поиск по существующему изображению, поэтому давайте рассмотрим другой метод: поиск на основе концепции. Clarifai API дает нам довольно много общедоступных концепций, таких как собака, люди и т. Д.

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

Если вы загрузили те же изображения, что и я, вы получите примерно такой ответ:

Это означает, что было только одно изображение, соответствующее указанному критерию, и совпадение имело вероятность почти 1.

Шаг 7. Добавьте новые концепции в свое приложение.

Итак, вы знаете, как искать на основе концепций, уже доступных в API, но что, если то, что вам нужно, еще не доступно в API в качестве концепции? Нам нужно искать золотистых ретриверов, но у Clarifai нет этой предопределенной концепции. В этом случае нам придется создать собственную концепцию.

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

Мы используем ту же функцию, что и раньше, для добавления изображений. Однако на этот раз вместо того, чтобы отправлять только изображения, мы также отправляем массив концепций для каждого создаваемого нами ввода. Каждое понятие содержит «идентификатор» и «значение». Идентификатор больше похож на название концепции (способ, которым мы хотим идентифицировать концепцию), а значение может быть либо истинным, либо ложным, определяя, присутствует это понятие или отсутствует соответственно.

Вы можете в любое время добавить дополнительные материалы вместе с концепциями, которые помогут улучшить Clarifai.

Шаг 8: Создайте модель

Чтобы использовать недавно созданную концепцию для поиска, вам сначала нужно обучить API этой концепции. Вам нужно будет создать модель на основе этой концепции, а затем обучить эту модель.

Приведенный выше код создает модель под названием «золотистый ретривер» для концепции «золотистый ретривер».

Шаг 9: Обучите модель

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

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

Шаг 10: поиск на основе недавно созданной концепции

Так же, как мы искали ранее, мы можем искать по понятию «золотистый ретривер», используя этот код:

Как и раньше, мы получим список изображений с числом достоверности:

Как и ожидалось, изображения с наивысшей степенью достоверности содержат золотистых ретриверов! Есть и другие изображения собак, но с гораздо меньшей вероятностью они будут золотыми. Вы можете добиться лучших результатов, установив порог (т.е. должно быть выше 80%) и тренируя свою концепцию с большим количеством изображений.

Следующие шаги в распознавании объектов

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

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