Антифрод 2.0
Анализируем изображения паспорта РФ и селфи с паспортом РФ, чтобы выявить подделки.
В сравнении с первой версией Антифрод 2.0 содержит ряд важных изменений:
Детекция поддельных селфи: метод теперь работает не только с изображениями главного разворота паспорта РФ, но и с селфи, где человек держит в руках паспорт РФ.
Оценка качества изображения: метод научился определять изображения плохого качества: маленькие, засвеченные, смазанные, тёмные, чёрно-белые, обрезанные, с полями, закрытыми пальцами.
Фотографии ксерокопий: метод научился определять фотографии ксерокопий документов.
Детекция очень аккуратных подделок: на основе реальных примеров поддельных документов обновили архитектуру нейросети, которая ищет признаки подделки изображения.
Уточнение алгоритмических проверок: исправлены ошибки в логике. Добавлен анализ качества изображения.
Как начать работать с сервисом Антифрод 2.0
Есть 4 популярных способа взаимодействия с сервисом. Для любого вам нужен ключ лицензии. Чтобы получить ключ, напишите нам в телеграм или на hello@dbrain.io.
Подготовьте изображение документа для теста. Если у вас такого нет, используйте паспорт РФ из Википедии.
Параметры запроса к API
Вы можете использовать следующие параметры при запросе к сервису определения подделок.
Асинхронный запрос
async
— booleanПо умолчанию:
async=false
— сервис обрабатывает запросы синхронно. При отправке запроса вы получите ответ только после окончательного завершения обработки сервисом.Если вам нужен асинхронный режим, укажите в запросе
async=true
. В ответ на запрос сервис вернёт в теле ответа параметрtask_id
. Например:Используйте этот
task_id
, чтобы получить результаты методомresult
:Не забудьте указать в параметре
token
ваш ключ лицензии. Рекомендуем запрашивать методresult
в цикле с периодом 1-2 секунды.
Возврат оригинального изображения
return_crops
— booleanПо умолчанию:
return_crops=false
— сервис не возвращает оригинальное изображение.Если вам нужно оригинальное изображение на выходе нашего API, укажите
return_crops=true
. Сервис вернёт оригинальное изображение в ответе API, в параметреinput_image
.
Тегирование запроса
task_tags
— array[string]По умолчанию: параметр не используется.
У нас есть опциональная функция тегирования запросов. Она упрощает отслеживание пакетов документов, связанных с конкретным клиентом-физлицом. Для использования функции укажите в параметре
task_tags
удобный вам тег:
Тело запроса к API
Изображение
image
— string ($binary)Изображение обязательно для передачи в запросе. Сервис ожидает изображение в двоичном виде.
Ответ от API
В ответе на запрос вы получите JSON с информацией о результатах проверки.
Пример ответа
Описание полей ответа
task_id
— string, идентификатор запроса, формат: 32 символа, шестнадцатеричная строка.error
— string, текстовое описание ошибки (если есть).task_tags
— array[string], теги, если они были переданы в параметреtask_tags
.success
— boolean, статус запроса:true
— запрос выполнен успешно.false
— запрос не выполнен.
status_code
— integer, HTTP-код статуса запроса:200
— запрос выполнен успешно.400
,403
,500
и т.д. — расшифрованы в «Общей информации о сервисах».
Поле result
overall_result
— string, общий результат проверки. Возможные значения:bad_image_quality
— качество изображения не позволяет вынести вердикт. Если вы хотите убедиться в подлинности документа, попросите прислать другое изображение. Вернуть правильную ошибку пользователю поможет разделimage.quality
, он описан ниже.definitely_fake
— изображение поддельное. По совокупности факторов мы уверены, что изображение надо отклонить.potentialy_fake
— изображение возможно поддельное. Вы можете пропустить его дальше на своё усмотрение, но мы рекомендуем отправить его на ручную проверку.wrong_document
— изображение не является паспортом или селфи, либо его качество не позволяет определить, что это паспорт или селфи.genuine
— изображение настоящее. Мы считаем, что ручные проверки не требуются.
Объект image
type
— string, тип изображения:document
— документ (главный разворот паспорта).selfie
— селфи с паспортом.other
— постороннее изображение.
quality
— объект, содержащий информацию о качестве изображения:errors
— string илиnull
, ошибки при обработке качества.glare_detected
— boolean. True, если сервис обнаружил блики на полях документа. Посоветуйте пользователю убедиться, что отражения на ламинации паспорта не мешают прочитать поля документа.blur_detected
— boolean. True, если сервис обнаружил, что фото документа недостаточно чёткое. Например если пользователь снимал на длинной выдержке при недостаточном освещении. Попросите пользователя включить свет перед съёмкой или выйти на улицу.document_cropped
— boolean. True, если сервис обнаружил, что поле документа закрыто посторонним предметом или паспорт обрезан краем кадра. Посоветуйте пользователю не закрывать поля документа пальцами и взять его в кадр целиком.document_no_color
— boolean. True, если сервис обнаружил, что изображение чёрно-белое. Попросите пользователя прислать оригинальный снимок, без фильтров и упражнений в графическом редакторе.document_too_small
— boolean. True, если разрешение документа слишком низкое. Сервис ожидает, что изображение будет разрешением не менее 640 × 640 пикселей, т.е. не менее 0.4 Мп. Смартфоны, которые дают такое низкое разрешение даже на фронтальной камере перестали выпускать в 2012 году. Попросите пользователя прислать оригинальную, а не уменьшенную, фотографию.document_too_dark
— boolean. True, если изображение слишком тёмное. Вероятно пользователь сделал кадр в тёмном помещении без вспышки. Попросите пользователя включить свет перед съёмкой или выйти на улицу.glare_score
— float, степень бликов (от 0 до 1). Чем ближе число к единице, тем ярче выражены блики на полях. Сервис предъявляет довольно строгие требования к бликам в параметреglare_detected
. Вы можете ориентироваться наglare_score
, если хотите пропускать изображения с незначительными бликами.blur_score
— float, степень размытия (от 0 до 1). Чем ближе число к единице, тем менее чёткий снимок. Сервис предъявляет довольно строгие требования к чёткости изображения в параметреblur_detected
. Вы можете ориентироваться наblur_score
, если хотите пропускать изображения с незначительным размытием.crop_score
— float, степень обрезки (от 0 до 1). Чем ближе число к единице, тем сильнее закрыты поля посторонними предметами. Сервис предъявляет довольно строгие требования к целостности документа в параметреdocument_cropped
. Вы можете ориентироваться наcrop_score
, если хотите пропускать изображения, где пальцы частично перекрывают поля документа или документ незначительно обрезан краем кадра.
origin
— string, источник изображения:photo
— фотография. Ожидаемый благоприятный сценарий, который не вызывает вопросов — пользователь просто сфотографировал свой документ на смартфон.scan
— скан. Сомнительный сценарий: вместо фотографии пользователь прислал скан. Вы должны сами решить, подходит ли вам такое изображение.screenshot
— скриншот. Красный флаг — вместо фото документа пользователь сделал скриншот экрана. Высока вероятность, что у пользователя нет оригинала документа.monitor_photo
— фотография экрана. Красный флаг — вместо фото документа пользователь сфотографировал экрана другого смартфона, монитора или телевизора. Высока вероятность, что у пользователя нет оригинала документа.xerox
— Красный флаг — пользователь сфотографировал листок бумаги с изображением паспорта. Высока вероятность, что у пользователя нет оригинала документа.
Объект selfie
(при type
: selfie
)
fake
— объект с результатами проверки селфи на подделку:result
— boolean, является ли селфи поддельным.confidence
— float, уверенность в результате (от 0 до 1). Чем ближе число к единице, тем выше уверенность сервиса.
Объект passport
photo_mismatch_passport_data
— boolean, несоответствие фотографии данным паспорта.
ВНИМАНИЕ: в данный момент проверка photo_mismatch_passport_data
не работает. На её результаты нельзя ориентироваться. Она не учитывается в вердикте по документу в параметре overall_result
.
ai_checks
— объект с результатами проверок паспорта с помощью искусственного интеллекта:image_modifications_detected
— объект:coords
— array, координаты подозрительных областей.result
— boolean, обнаружены ли модификации изображения. Если обнаружены, значит перед нами не оригинальная фотография, в неё вносились изменения. Попросите пользователя прислать другой снимок.
visual_field_missing
— boolean, отсутствуют ли обязательные поля. Если наш сервис не смог прочитать одно из обязательных полей в паспорте — перед нами подделка или пользователь всё-таки закрыл чем-то поле, например листом бумаги. Попросите пользователя прислать другой снимок.photo_not_found
— boolean, фотография не найдена. Наш сервис не видит лица в той области документа, где на паспорте должна быть фотография. Попросите пользователя прислать снимок, на котором лицо можно различить.photo_gender_mismatch
— boolean, несоответствие пола человека на фото и в текстовом поле паспорта. Вполне обычная ситуация, когда на потоке генерируешь поддельные паспорта.
logical_checks
— объект с результатами алгоритмических проверок текстовых полей паспорта. Если у сервиса нет претензий к качеству изображения в объекте image.quality, любая из этих проверок говорит о том, что перед нами поддельный документ.series_number_inconsistency
— boolean, несоответствие серии или номера на верхней и нижней странице.series_mismatch_printing_year
— boolean, несоответствие серии паспорта дате выдачи паспорта.issue_year_mismatch_date_of_birth
— boolean, несоответствие года выдачи дате рождения. Вероятно паспорт просрочен.issue_code_mismatch_issue_authority
— boolean, несоответствие кода подразделения органу выдачи. Мы знаем какой текст, с точностью до запятой, должен быть в месте выдачи для данного сочетания даты и кода подразделения.mrz_presence_mismatch_issue_year
— boolean, несоответствие наличия или отсутствия MRZ году выдачи паспорта. MRZ (machine readable zone), она же МЧЗ (машиночитаемая зона) — две строки в нижней части паспорта, в которых закодированы текстовые поля паспорта. Печаются в паспорте РФ с 1 июля 2011 года.visual_fields_mismatch_mrz
— boolean, несоответствие визуальных полей информации в MRZ.fake_series_okato
— boolean, несуществующая серия по ОКАТО.fake_year_of_birth
— boolean, нереалистичный год рождения. Например человек по паспорту родился в XVI веке.
Объект file_metadata
not_present
— boolean, метаданные отсутствуют. Любой смартфон записывает в файл изображения информацию о своей марке и модели, дате съёмки и другую полезную информацию в виде метаданых. Если всё это отсутствует, значит перед нами не оригинальный файл со смартфона. Само изображение, тем не менее, может быть оригинальным.inconsistency
— boolean, противоречия в метаданных. Например мы видим название графического редактора или видим, что дата съёмки отличается от даты изменения изображения.maker
,model
,software
— string, информация об устройстве и программном обеспечении.date_time
— объект с данными о датах и времени из метаданных:modify_date
,create_date
,date_time_original
,gps_date_stamp
— string, даты и время.
gps_coords
— объект с GPS-координатами:latitude_ref
,latitude
,longitude_ref
,longitude
,altitude_ref
,altitude
— string, координаты и высота.
Поле input_image
input_image
— string илиnull
, содержит исходное изображение в формате Data URL с MIME-типом JPEG в base64, если в запросе передан параметрreturn_crops=true
.
Описание типовых сценариев использования для МФО
Онлайн-заявка на микрозайм до 15 000 рублей
В этом сценарии скорость обработки критична, поэтому мы предлагаем использовать автоматическую проверку:
Клиент загружает фото паспорта и селфи с паспортом.
Отправляем асинхронный запрос к API Антифрод 2.0 (
async=true
).Ключевой параметр для проверки —
overall_result:
definitely_fake
: отклоняем заявкуpotentially_fake
: отправляем на ручную проверкуbad_image_quality
иother
: просим прислать изображения повторноgenuine
: если по вашему скорингу всё хорошо, выдаём займ
Если вы хотите выстроить логику обработки самостоятельно, обратите внимание на следующие параметры:
image.type
: убеждаемся, что это "document" и "selfie".image.quality
: проверяем параметры качества изображения, которые вы считаете критичными.в случае с
image.type=selfie
проверяемselfie.fake.result
и отклоняем приtrue
.в случае с
image.type=document
проверяемpassport.ai_checks.image_modifications_detected.result
— отклоняем приtrue
.
POS-кредитование
Здесь также важна скорость, но сумма может быть выше:
Консультант фотографирует паспорт клиента и делает селфи с паспортом.
Рекомендуем использовать синхронный запрос к API (
async=false
), чтобы максимально быстро получить результат.Ключевые параметры:
Те же, что и для микрозайма до 15 000 рублей.
Дополнительно проверяем
passport.ai_checks.visual_field_missing, passport.ai_checks.photo_not_found
и все параметрыlogical_checks
.
Онлайн-заявка на крупный заём
Для займов на большие суммы можно позволить более тщательную проверку:
Клиент загружает фото паспорта, селфи с паспортом и дополнительные документы.
Используем асинхронный запрос (
async=true
).Ключевые параметры:
Все параметры, указанные в предыдущих сценариях.
passport.file_metadata
: проверяем наличие и соответствие метаданных.passport.ai_checks.photo_gender_mismatch
: дополнительная проверка соответствия пола.
Обновление данных в личном кабинете
Здесь скорость не критична, но важна точность:
Клиент загружает новые фото документов.
Используем асинхронный запрос (
async=true
).Ключевые параметры:
Все параметры, указанные для крупного займа.
Сравниваем новые данные с уже имеющимися в системе.
Общие рекомендации по использованию API:
Всегда проверяйте
overall_result
как первичный индикатор подлинности.Обращайте внимание на
image.quality
для всех типов запросов. Если качество низкое, запросите повторную отправку изображения.Для селфи с паспортом (
image.type=selfie
) критически важно проверятьselfie.fake.result
иselfie.fake.confidence
.Для изображения паспорта (
image.type=document
) обратите особое внимание наpassport.ai_checks.image_modifications_detected.result
— это прямой индикатор подделки.Все параметры в
passport.logical_checks
важны, так как указывают на логические несоответствия в данных паспорта.Для более тщательной проверки используйте
passport.file_metadata
, особенно для крупных займов.Настройте разные пороговые значения для параметров в зависимости от суммы займа и типа продукта.
Используйте
task_tags
для связывания запросов с конкретными клиентами или заявками в вашей системе.При высокой нагрузке используйте асинхронные запросы (
async=true
) и настройте систему опроса результатов.Регулярно анализируйте статистику ответов API для выявления новых паттернов мошенничества и корректировки алгоритмов проверки.
Применяя эти сценарии и рекомендации, вы сможете эффективно использовать Антифрод 2.0 для борьбы с различными видами фрода в процессах вашей МФО.
Если вы хотите использовать наш сервис в рамках банковских или иных финансовых бизнес-процессов, напишите нам в телеграм или на hello@dbrain.io
Last updated