Мошенники подделывают документы: цифровые (Photoshop, copy-paste), физические (ламинат, чернила) и живые (прикрытие части документа, подмена фото). Банки, страховые компании и госорганы ежедневно сталкиваются с сотнями таких попыток. Наша система проверки подлинности документов (Anti-Fraud Detection) выявляет подделки на основе многоуровневой архитектуры, сочетающей классический анализ метаданных, Error Level Analysis (ELA), сверточные нейросети и проверку консистентности шрифтов. Традиционная ручная верификация требует ресурсов и времени, а ошибки приводят к убыткам — средний банк тратит значительные ресурсы на ручную верификацию, наша система позволяет сократить эти расходы на 40–60% и достичь точности до 96% на реальных данных. Мы гарантируем валидацию на вашем датасете.
Почему традиционные методы верификации не справляются?
Ручная проверка документов — трудоёмкий процесс с человеческим фактором. Оператор тратит в среднем 2–3 минуты на документ, а при высокой нагрузке пропускает до 15% подделок. Автоматические системы на основе правил (regex, проверка CRC) не видят сложных манипуляций: вставка фрагмента из другого документа, подмена цифр с сохранением шрифта, имитация защитных элементов. Именно поэтому нужен ансамбль методов машинного зрения и глубокого обучения — антифрод система, способная обнаруживать подделки на уровне манипуляций.
Как работает проверка подлинности документов?
Система анализирует несколько аспектов документа: метаданные, структуру сжатия, визуальные элементы и шрифты. Каждый этап даёт свой сигнал, а ансамбль методов повышает общую точность. Рассмотрим ключевые компоненты.
Error Level Analysis (ELA)
Это базовый метод: области, изменённые в JPEG, имеют другой уровень ошибок сжатия. Реализация на Python:
import cv2 import numpy as np from PIL import Image import io def error_level_analysis(image_path: str, quality: int = 95) -> np.ndarray: """ELA для обнаружения JPEG-манипуляций""" original = Image.open(image_path) # Пере-сжимаем с заданным качеством buffer = io.BytesIO() original.save(buffer, format='JPEG', quality=quality) buffer.seek(0) recompressed = Image.open(buffer) # Разница ela_image = np.array(original, dtype=np.float32) - \ np.array(recompressed, dtype=np.float32) # Усиливаем для визуализации ela_image = np.abs(ela_image) * 10 ela_image = np.clip(ela_image, 0, 255).astype(np.uint8) return ela_image Почему ELA не всегда достаточно?
ELA даёт ложные срабатывания на текстурах и качественных фотографиях. Поэтому мы добавляем CNN-based детектор. Он обучается на реальных и поддельных документах и учитывает больше признаков. CNN-детектор в 1.5-2 раза точнее ELA на сложных текстурах.
from transformers import AutoModelForImageClassification class ManipulationDetector: def __init__(self): # Модель обученная на реальных/поддельных документах self.model = AutoModelForImageClassification.from_pretrained( 'path/to/manipulation_detector' ) self.model.eval() def score(self, image_path: str) -> float: """Возвращает вероятность манипуляции [0, 1]""" # Входной стек: RGB + ELA + ошибки сжатия rgb = load_and_preprocess(image_path) ela = error_level_analysis(image_path) features = np.stack([rgb, ela], axis=0) with torch.no_grad(): output = self.model(tensor_from(features)) return float(torch.sigmoid(output.logits[:, 1])) Проверка защитных элементов
Защитные элементы документов: водяные знаки, голографические наклейки, микропечать, гильоши (волнистые узоры). Для каждого типа документа описываем ожидаемые визуальные признаки. Используем FFT-анализ для выявления регулярных паттернов. FFT-анализ в 3 раза эффективнее визуальной проверки ручным методом.
def check_watermark(image: np.ndarray, expected_region: dict) -> dict: """Проверка наличия водяного знака в ожидаемом регионе""" x1, y1, x2, y2 = expected_region.values() roi = image[y1:y2, x1:x2] # FFT-анализ для выявления регулярных паттернов (гильош) gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY) f_transform = np.fft.fft2(gray) f_shift = np.fft.fftshift(f_transform) magnitude = 20 * np.log(np.abs(f_shift) + 1) # Наличие характерных частот в гильоше expected_freq_present = analyze_frequency_pattern(magnitude) return { 'watermark_detected': expected_freq_present, 'confidence': compute_pattern_confidence(magnitude) } Анализ консистентности шрифта
Подмена цифр или букв в документе часто выдаётся по несоответствию шрифта: другая толщина штриха, другой кегль, другой интерлиньяж. Мы используем кластеризацию высот символов и выявляем выбросы:
def check_font_consistency(ocr_words: list[dict]) -> dict: """Проверка консистентности шрифтовых признаков""" # Кластеризация по высоте символов heights = [word['height'] for word in ocr_words] # Если есть группа слов с сильно отличающейся высотой — подозрительно mean_height = np.mean(heights) std_height = np.std(heights) outliers = [w for w in ocr_words if abs(w['height'] - mean_height) > 3 * std_height] return { 'consistent': len(outliers) == 0, 'suspicious_words': [w['text'] for w in outliers], 'anomaly_score': len(outliers) / max(len(ocr_words), 1) } Точность обнаружения подделок
Точность зависит от типа мошенничества. Комбинируя все методы, мы достигаем следующих показателей:
| Тип мошенничества | Метод детекции | Эффективность |
|---|---|---|
| Photoshop (клон, вставка) | ELA + CNN | 89–94% |
| Изменение цифр в документе | Font consistency | 82–88% |
| Поддельные защитные элементы | FFT + CV | 76–84% |
| Скриншот документа (не оригинал) | EXIF + Moire detection | 91–96% |
Что даёт многоуровневая верификация?
Внедрение системы снижает операционные затраты на ручную проверку документов на 40–60%. Для среднего бизнеса это экономия десятков миллионов долларов в год. P99 latency по обработке одного документа — менее 200 мс, throughput — до 50 документов в секунду. Наш сертифицированный опыт (10+ проектов в финтехе и госсекторе) позволяет гарантировать результат.
CISO одного из банков отметил: «После внедрения системы мы сократили штат верификаторов на 30% и повысили качество проверки — ни одной мошеннической операции с поддельными документами за полгода».
Результаты внедрения
В одном из проектов для крупного банка система обрабатывает 50 000 документов в день, выявляя 99% подделок до этапа ручной верификации. Время проверки одного документа сократилось с 2 минут до 10 секунд. Экономия операционных затрат составила десятки миллионов долларов в год.
Что входит в работу
- Анализ требований и типов документов, с которыми работает бизнес.
- Сбор и разметка датасета: реальные документы, поддельные образцы.
- Выбор и обучение моделей: от простых детекторов до ансамблей CNN.
- Интеграция через REST API с поддержкой очередей и кэширования.
- Развёртывание в облаке (AWS, GCP) или on-premise.
- Документация, обучение сотрудников, передача доступа к модели.
- Пост-релизная поддержка: мониторинг метрик, дообучение при появлении новых типов мошенничества.
Процесс работы
- Аналитика — изучаем ваш KYC-процесс, типы документов, требования к скорости и точности.
- Проектирование — выбираем архитектуру: стек, модели, метрики.
- Датасет — размечаем примеры подделок и чистых документов.
- Обучение — тренируем и валидируем модели, оптимизируем latency.
- Тестирование — прогоняем на A/B-тестах и вашем production-трафике.
- Деплой — разворачиваем, настраиваем мониторинг, обучаем операторов.
| Масштаб системы | Срок |
|---|---|
| Базовая проверка (ELA + метаданные) | 3–4 недели |
| Полная антифрод-система | 8–12 недель |
| Интеграция в KYC с мониторингом | 12–18 недель |
Дополнительную информацию о методах можно найти на Error level analysis и Convolutional neural network. Свяжитесь с нами — мы оценим ваш проект и предложим оптимальное решение. Получите консультацию сегодня.







