А я спас мою семью… фото.

В один из выходных я подумал о том, чтобы организовать свою коллекцию фотографий и навести порядок в телефонной галерее. За последние несколько месяцев были сделаны тысячи изображений, снятых камерой моего телефона и размещенных родственниками и друзьями в WhatsApp, а еще тысячи были сохранены на моих внешних USB-накопителях. Моя цель состояла в том, чтобы идентифицировать семейные фотографии из стопки изображений, содержащих только цветы, птиц, кошек, природу, дикую природу, доброе утро, спокойную ночь, шутки и т. Д. Я мог затем сохранить семейные фотографии в отдельную папку и очистить другие. Пытаясь отсортировать изображения через 5 минут, я сдался. Я подумал про себя: «Должен быть способ сделать это лучше».

Основываясь на моем анализе различных изображений, я решил начать с того, что записал свои потребности:

  1. Сохраняйте изображения с членами моей семьи в нем и очищайте другие.
  2. У меня есть возможность сортировать изображения на моем телефоне, SD-картах или внешних USB-накопителях, не загружая тысячи изображений в онлайн-сервисы (например, Google Фото).
  3. Не хочу тратить кучу времени на сортировку фотографий.
  4. Найдите повторяющийся процесс, чтобы я мог использовать его снова в будущем.
  5. Находите портретные фотографии только с одним человеком (или любым объектом и игнорируйте людей / объекты на дальнем фоне, если таковые имеются) или групповые фотографии.
  6. Найдите фотографии с конкретными членами семьи по их именам.
  7. Находите фотографии с помощью простых и гибких запросов и с конкретными объектами, например человек, человек и автомобиль, человек и (зебра, слон или лошадь), человек и собака, а не велосипед и т. д. Или используйте настоящее имя вместо человека в приведенных выше запросах. Так что используя мое имя, например, самир и торт, самир и диван, книга и т. д. Это может помочь найти фотографии, основанные на определенных воспоминаниях или событиях, из тысяч изображений.
  8. Было бы неплохо идентифицировать похожие фотографии, поскольку обычно люди делают несколько снимков с небольшими вариациями настроек камеры, угла и т. Д., И было бы легко проверить и сохранить лучшие из них.

Мне по сути были нужны возможности искусственного интеллекта (ИИ), в частности, обнаружение объектов и лиц. Теперь встроенное приложение камеры на телефоне обладает некоторыми функциями и может немного помочь. Такие приложения, как Google Фото, обладают большей частью перечисленных выше функций и многим другим, но фотографии необходимо загружать, что создает очевидную угрозу безопасности, присущую любому приложению для социальных сетей. Мне также потребовались некоторые дополнительные функции запросов, а именно.
а) Запросы с «Нет людей» ... чтобы найти фотографии без людей, чтобы вы могли их удалить. Возможно, поскольку Google Фото предоставляет неограниченное хранилище, оно ему не нужно.
б) Запросы с определенным количеством объектов, а именно. группа из 4 человек, 2 птиц и т. д. c) Получите список объектов и количество найденных на изображении.

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

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

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

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

Я сделал обнаружение лиц, используя две модели / методы, а именно. Keras / FaceNet и MTCNN (многозадачные каскадные сверточные сети) и OpenCV / Caffe / Torch, чтобы оценить, лучше ли одно другое. Обучение моей модели с помощью Keras / Facenet заняло гораздо больше времени, чем OpenCV / Caffe на том же наборе данных, но точность проверки также была намного выше. Я включил функцию добавления переменного% пикселей вокруг лица, которая изменяет достоверность распознавания лица, и выбора пикселя с максимальной достоверностью, чтобы повысить точность обнаружения. Командная строка обеспечивает такую ​​же гибкость, как при обнаружении объектов, для формирования выражений, и вы можете искать по имени, а не по типу объекта.

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

Полученный код / ​​инструменты и соответствующая документация опубликованы в моем репозитории на github. Репозиторий github предоставляет ссылку на образ докера с необходимыми базовыми моделями машинного обучения и кодом для обнаружения объектов и распознавания лиц.

Общий процесс

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

2. Используйте портретные изображения и / или извлекайте лица из изображений.

3. Создайте структуру папок, как показано ниже, для обучения и проверки и разместите изображения каждого человека соответственно. Используйте около 70% изображений для обучения и около 30% для проверки. Обучите модель по созданным изображениям.

4. Запустите распознавание лиц, чтобы идентифицировать изображения с лицами, которые используются для обучения модели.
Я обучил модель для себя, своей жены и сына (Сангита и Атхарва) и получил довольно высокую точность около 98% с примерно 200 изображениями для обучения и 70 для проверки на человека, как показано ниже.

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

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

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

В дополнение к масштабированию и повороту этот инструмент также объединяет распознавание лиц и обнаружение объектов для поддержки запросов с сочетанием обученных имен и типов объектов, например, Атхарва и машина

5. Отсортируйте похожие изображения в отдельные папки, чтобы просмотреть и удалить их соответствующим образом. Вы можете посмотреть дату и время, когда были сделаны фотографии, и просмотреть фотографии, сделанные с интервалом в несколько секунд. Но поскольку приложения социальных сетей, такие как WhatsApp, удаляют данные EXIF ​​(то есть время, когда была сделана фотография, настройки камеры, географическое местоположение и т. Д.) В целях безопасности, вы потеряете время, когда была сделана фотография для тех, которые были получены через WhatsApp.

Ниже приведены немного разные образцы изображений с% схожести с использованием разных моделей Keras.

Все приведенные выше снимки изображений были взяты при запуске записных книжек jupyter из моего репозитория git.

Источники / ссылки

Https://machinelearningmaster.com/how-to-develop-a-face-recognition-system-using-facenet-in-keras-and-an-svm-classifier/
https: // www .pyimagesearch.com / 2018/02/26 / распознавание лиц с opencv-и-глубоким обучением /
https://pjreddie.com/darknet/yolo/
https : //mc.ai/face-detection-with-opencv-and-deep-learning/
https://sb-nj-wp-prod-1.pyimagesearch.com/2018/09/24 / opencv-face-распознавание /
http://cmusatyalab.github.io/openface/
https://cmusatyalab.github.io/openface/models-and-accuracies/