1. Введение

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

В этом посте я расскажу, как я создал систему распознавания лиц НБА. Я использовал предварительно обученные модели обнаружения и распознавания лиц, предоставленные InsightFace[1]. Система может обнаруживать лица на изображении и предсказывать имена обнаруженных лиц.

2. Данные

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

2.1. Получение текущего состава НБА

Доступ к текущему составу NBA можно получить из различных источников, но я выбрал RealGM, так как его было легче сканировать[2]. Используя pd.read_html , я смог легко получить данные в табличном формате с веб-сайта.

2.2. Сбор изображений

Собрав полные имена игроков НБА, я начал собирать изображения для каждого игрока. С этой целью я использовал Serper API, который предоставляет соответствующие URL-адреса изображений для данного запроса.

Я искал имя каждого игрока в Serper API. Для ясности я добавил к каждому названию ключевое слово «НБА». В итоге я собрал по 30 изображений для каждого игрока.

3. Система распознавания лиц

Распознавание лиц включает в себя несколько шагов:

  1. Обнаружение известных лиц.
  2. Извлечение вложений из обнаруженных известных лиц.
  3. Обнаружение неизвестных лиц.
  4. Извлечение вложений из обнаруженных неизвестных лиц.
  5. Вычисление сходства между вложениями неизвестных лиц и вложениями известных лиц.
  6. Определение личности неизвестных лиц на основе сходства между известными лицами.

Известные лица относятся к изображениям, которые уже были идентифицированы, а неизвестные лица — это изображения неопознанных лиц.

Я использовал предварительно обученные модели, выпущенные InsightFace, для обнаружения лиц и извлечения вложений.

3.1. Настройка InsightFace

Вот как я готовлюсь к использованию InsightFace в среде Google Colab. Во-первых, вам нужно установить библиотеку Python InsightFace.

InsightFace выпустила несколько общедоступных моделей. Я выбрал модель buffalo_s из-за ее эффективности. Вы можете найти список доступных моделей и загрузить их с этого URL.

det_model — это модель обнаружения лиц, которая предсказывает ограничивающие рамки лиц на изображении. rec_model — это модель распознавания лиц, которая кодирует обнаруженные лица, а затем выводит векторы встраивания лиц.

3.2. Обнаружение и кодирование лиц

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

3.3. Идентификация

Поскольку у каждого известного человека есть несколько векторов встраивания, могут быть разные методы идентификации. Я сравнил два метода:

  1. Flatten: вычисление сходства между известными вложениями, а затем выбор имени наиболее похожего вложения.
  2. Среднее: вычисление сходства между известными вложениями, усреднение их по имени, а затем выбор имени с наибольшим сходством.

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

4. Оценка

Я использовал две метрики для оценки системы: 1) точность, которая измеряет, насколько часто модель правильно предсказывает личность неизвестных лиц, и 2) охват, который измеряет, сколько неизвестных лиц было идентифицировано независимо от правильного.

4.1. Сглаживание против среднего

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

4.2. Установка порога

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

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

4.3. Примеры

Я протестировал систему, используя несколько реальных фотографий. Как показано в левых столбцах, метод «Свести» привел к неверным совпадениям, например, Никола Йокич сопоставился с Кевоном Луни, а аудитория сопоставила с Руди Гэем. Напротив, метод «Среднего» дал правильные совпадения во всех случаях.

5. Вывод

Я разработал систему распознавания лиц для идентификации игроков НБА. У него есть ограничение: я использовал собранные изображения без проверки.

На основе этих результатов я планирую разработать систему отслеживания игроков.

Спасибо за прочтение этого поста.

Ссылка

[1] https://github.com/deepinsight/insightface

[2] https://basketball.realgm.com