company_banner

Верификация фотографий в ритейле с помощью Computer vision

    Вступление


    В рамках программы кредитования банк сотрудничает со многими розничными магазинами.
    Одним из ключевых элементов заявки на кредит является фотография заемщика – агент магазина-партнера фотографирует покупателя; такая фотография попадает в «личное дело» клиента и используется в дальнейшем как один из способов подтверждения его присутствия на точке в момент подачи заявки на кредит.

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

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

    Формализация задачи


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

    Для наглядности приведем примеры фотографий (на снимках сотрудники банка):

    image
    Рис 1. Фото с точки продажи

    image
    Рис 2. Фото с соцсетей

    image
    Рис 3. Фото паспорта

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

    А) Сегментация


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

    Минусы:

    • Подготовка обучающей выборки занимает слишком много времени.
    • Построенный на такой модели сервис не будет быстро работать.

    Было решено вернуться к этому методу только в случае отказа от альтернативных вариантов. Спойлер: не вернулись.

    Б) Сравнение с другими фото в той же точке продажи


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

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

    Минусы:

    • Несбалансированная выборка.
    • Сервис будет долго работать, если в точке продажи много фотографий.
    • При появлении новой точки продажи нужно переобучать модель.

    Несмотря на минусы, мы реализовали модель из статьи, использовав блоки нейросетей VGG-16 и ResNet-50. И… получили процент правильных ответов не сильно выше 50% в обоих случаях :(

    В) Классификация!


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

    Подготовка данных


    В датасете изображений из соцсетей с помощью библиотеки Dlib выбрали только те фото, на которых есть люди.

    Снимки паспортов необходимо было по-разному обрезать, оставив только лицо. Тут на помощь снова пришла Dlib. Принцип работы получился таким: нашли с помощью этой библиотеки координаты лица -> обрезали фото паспорта, оставляя лицо.

    В каждом из 3 классов оставили по 40 000 фото. Не забыли и про аугментацию данных

    Модель


    Использовали ResNet-50. Решали проблему как задачу многоклассовой классификации с непересекающимися классами. То есть считали, что фото может принадлежать только одному классу.

    model = keras.applications.resnet50.ResNet50()
    model.layers.pop()
    for layer in model.layers:
        layer.trainable=True
    last = model.layers[-1].output
    x = Dense(3, activation="softmax")(last)
    resnet50_1 = Model(model.input, x)
    resnet50_1.compile(optimizer=Adam(lr=0.00001), loss='categorical_crossentropy', metrics=[ 'accuracy'])
    

    Результаты


    В тестовой выборке оставили 24 000 картинок, то есть 20%. Матрица ошибок выглядела следующим образом:

    image
    social net — соцсети;
    passport — паспорта;
    pos-credit – точки продаж-партнеры, которые осуществляют кредитование.

    Общий процент ошибок – 1,6 %, для фотографий с точек продаж – 1,2 %. Большая часть ошибочно определенных снимков – похожие на два класса одновременно изображения. Например, почти все неверно определенные фотографии из класса pos-credit были сделаны в неудачных ракурсах (на фоне белой стены, видно только лицо). Поэтому они были похожи еще и на фото из класса social net. Такие фотографии имели низкую максимальную вероятность.
    Мы добавили порог для максимальной вероятности. Если итоговое значение оказывается выше – мы доверяем классификатору, ниже – отправляем картинку на ручную проверку.

    В итоге, результат работы сервиса для фотографии

    image

    выглядит следующим образом:

    image

    Итоги


    Так, с помощью простой модели мы научились автоматически определять, что фотография сделана в одной из точек продаж наших партнеров. Это позволило автоматизировать часть большого процесса по одобрению заявки на кредит.
    Tinkoff.ru
    149,00
    IT’s Tinkoff.ru — просто о сложном
    Поделиться публикацией

    Похожие публикации

    Комментарии 15

      +2
      А нельзя ли было повысить точность, например, анализом метаданных снимка: отсутствие наличие exif, разрешение фото, отсутствие меток фоторедактора, наличие GPS данных (если фото с телефона) и тд?
        +1
        Метаданные анализируем в первую очередь. Если с ними что-то не так, то отправляем фото на ручную проверку. Если все в порядке, то уже используем нейросети
        0
        А были еще идеи решить данную проблему, расскажите о них? Как вообще реализована загрузка фото? Может стоит проверять не только результат работы(фотографию) а поработать над самим процессом (момент создания фото/загрузки). Например сделать утилиту(функционал в ЛК) что позволит работать только с веб-камерой и будет клеить некий уникальный Watermark? В общем убрать саму возможность загрузки RandomName.jpg.
          0
          Что помешает сделать фото фотографии?
            0
            Ничего. Так же как ничего не мешает загрузить файл фото более менее похожий на фото сделанное из офиса. Я в комменте выше скорее хотел донести мысль рассказать подробное как организован сам процесс, что заодно поможет избежать миллиона советов в комментах)
            Да и в данном случае на мой взгляд нужен комплекс мер как программных так и организационных.
              0
              Комплекс мер и есть на самом деле.
              Саша просто рассказала про одну из мер, а есть еще много чего — анализ данных заявки, поиск аномалий в этих данных, биометрия и т.д.
            0
            Конечно, мы думали о работе над самим процессом. Просто проблема в том, что мы не всегда можем над ним работать) Например, если брокер, в котором сотрудники заполняют заявки — внешний, то мы можем лишь высказывать пожелания по его работе(мы же просто один из банков-потребителей), а реализация будет зависеть от желания торговой сети, которая управляет брокером.
            В итоге обычно проще реализовать проверки на своей стороне; управлять ими в таком случае намного удобнее и быстрее.
            0
            Что мешает требовать фотографировать клиентов с какой нибудь табличкой, листочком с кодом, договором, в опеределенном ракурсе и т.д.?
              0
              Мы не можем требовать от партнеров что-либо, можем только предлагать. Заявка на кредит с фото рассылается в несколько банков, не только в Тинькофф. То есть у партнера есть альтернативы, поэтому он может отказаться от наших пожеланий
                0
                Понятно, потеряете партнеров со своими «хотелками»…
                Но, если установка каких-либо дополнительных требований к фото может помочь то:
                В итоге, другие банки ищут/не_ищут свой способ борьбы с этой проблемой, вместо объединения усилий?:)
                  +1
                  Но, если установка каких-либо дополнительных требований к фото может помочь то

                  Можно еще давать клиенту табличу «Я дур.. беру кредит на дорогой телефон», надевать на клиента шапочку из фольги, поставив его на одну ногу.
                  Причем на государственном уровне внести требование.
                  Тогда можно усложнить жизнь мошенникам, и помочь человеку одуматься перед тем как влезать в долги
                0
                Когда я получал Тинькоф карту, меня как раз сфотографировали с документами и с определенным ракурсом
                +1
                Что если обманщик сфотографирует пустой фон в точке продаж, возьмёт фото из соцсети/паспорта, вырежет человека и вставит в фон? Какой результат выдаст нейросеть?
                  +1
                  тоже интересно
                  Статья конечно крутая, но обработкой фото сейчас уже никого не удивить
                  Одним из ключевых элементов заявки на кредит является фотография заемщика – агент магазина-партнера фотографирует покупателя; такая фотография попадает в «личное дело» клиента и используется в дальнейшем как один из способов подтверждения его присутствия на точке в момент подачи заявки на кредит.

                  Правда? это же печально, что уже подметили все комментаторы

                  В современном мире фотография становится таким себе доказательством
                  Инструментов обработки масса, фотки люди сами выкладывают

                  Да и при оформлении sim-ки в салоне партнера можно скоммунздить все паспортные данные и оформить заявку
                  А сфоткать под предлогом теста камеры супер-нового телефона.
                    0
                    Вы все верно подметили. Но повторюсь еще раз, мы не используем фото как доказательство (единственный критерий) того, что заявка подлинная. Мы верифицируем и остальные данные заявки.

                    «А сфоткать под предлогом теста камеры супер-нового телефона.» — звучит неубедительно, я бы на такое не согласилась :)

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

                Самое читаемое