惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Last Watchdog
The Last Watchdog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 热门话题
G
GRAHAM CLULEY
S
Schneier on Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Recorded Future
Recorded Future
I
Intezer
云风的 BLOG
云风的 BLOG
博客园 - Franky
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
T
Tenable Blog
The Hacker News
The Hacker News
T
The Blog of Author Tim Ferriss
Attack and Defense Labs
Attack and Defense Labs
D
DataBreaches.Net
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
News and Events Feed by Topic
有赞技术团队
有赞技术团队
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
N
News and Events Feed by Topic
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Secure Thoughts
The Register - Security
The Register - Security
B
Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
The Cloudflare Blog
Webroot Blog
Webroot Blog
W
WeLiveSecurity
H
Heimdal Security Blog
博客园 - 三生石上(FineUI控件)
V
Vulnerabilities – Threatpost
G
Google Developers Blog
O
OpenAI News
V
V2EX
罗磊的独立博客
博客园_首页
N
News | PayPal Newsroom
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
TaoSecurity Blog
TaoSecurity Blog
Cloudbric
Cloudbric
H
Hacker News: Front Page
博客园 - 叶小钗
T
Tor Project blog
AI
AI

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как из факапа родился продукт: история EasyDoc
ITFB_Group ( · 2026-04-22 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение8 мин

Охват и читатели1.3K

Кейс

Привет, Хабр! Меня зовут Вадим Петросян, я директор по развитию бизнеса в ITFB Group. Почти десять лет я занимаюсь тем, что мы теперь называем Intelligent Document Processing (IDP). А началось всё с досадной подставы в договоре, которая влекла за собой большие расходы, но вместо этого подарила рынку одного из игроков в сфере OCR/IDP. Сегодня EasyDoc — это платформа №1 по версии CNews, работающая в крупнейших банках, пенсионных фондах и госорганах. А тогда, в 2016 году, мы просто не захотели платить 50% прибыли вендору за его движок. И решили сделать свой.

Точка отсчёта: как мы ввязались в драку

В 2018 году мы делали проект для крупного федерального банка — систему распознавания счетов на оплату. Планировали использовать движок одного из лидеров рынка. Договор с заказчиком был подписан, но в последний момент, перед подписанием договора с ведором, на движке которого мы и собирались реализовывать проект, наши юристы заметили отклонение от договоренностей: вместо лимитированной лицензии оказалась прописана  безлимитная лицензия. Мы обратились к вендору, надеясь на цивилизованное решение. Ответ был жёстким: либо мы принимаем их условия (т.е. поставляем заказчику литимированную лицензию), либо отчисляем 50% прибыли от проекта. Такое ультимативное предложение было для нас неприемлемо. Я всегда придерживаюсь позиции, что в таких сложных переговорах нужно стремиться к ситуации win-win.

Конечно, мы отказались. И решили создать свой продукт. Так родилась нулевая версия EasyDoc. Мы погрузились в новую для нас тему, досконально изучали литературу и исследования по распознаванию. Мы собрали первую версию технологического стека продукта на open-source компонентах: Tesseract для OCR, OpenCV, Leptonica для предобработки, прикладная часть на Java. Мы успешно сдали проект в срок. Но главное открытие случилось позже: мы поняли, что на чистом open-source промышленный продукт не сделать. У нас был огромный прикладной опыт, но собственный продукт наша команда еще никогда не делала. И, конечно же, мы столкнулись со сложностями.

Сложность №1: кривые сканы и компьютерное зрение

Первая же промышленная эксплуатация показала: мы столкнулись не только со сканами документов, но в основном — с фотографиями, их было больше! А фотографируют люди часто в условиях малого света, с руки, что вносит значительные искажения в изображение и, соответственно, влияет на качество распознавания. Tesseract в таких условиях не мог качественно распознать документ, точность составляла всего 30–40%. Пришлось писать свой слой предобработки. Мы добавили автоматическое выравнивание, подавление шума, бинаризацию, обрезку полей. Использовали OpenCV, Leptonica и собственные наработки. Точность подскочила до 85–90%. Это был момент, когда мы поняли: качественное распознавание начинается с того, как подготовлено изображение.

Первая наша технология включала в себя:

  1. Предпроцессинг

  2. Снятие текстового слоя

  3. Извлечение данных из текстового слоя при помощи регулярных выражений, нечёткого поиска.

Результаты были хорошими, всё благодаря этапу предобработки документов.

От счётов ко всему подряд

Первый EasyDoc был предназначен для распознавания счетов на оплату — оплата ЖКУ, штрафов, оплата налогов. Тогда ещё не было в помине универсальных QR-кодов, которые сейчас спасают жизнь при оплате квитанций, — всё приходилось вытаскивать из текста и макета. Потом появились паспорта, потом СНИЛС, ИНН, 2-НДФЛ.

Мы сделали несколько прикладных решений для определенных бизнес направлений. Фактически, это была вторая версия продукта — проект для другого крупного банка в 2019–2020 годах, где мы уже отрабатывали промышленную обработку разных типов документов на реальных объёмах. Но быстро осознали, что рынку нужна универсальная платформа, которую можно настроить под любой процесс и любой тип документа. Так в 2018–2019 годах родилась концепция EasyDoc как энтерпрайз-платформы для потоковой обработки любых документов. Мы переписали архитектуру, сделали микросервисы, добавили поддержку российских ОС и СУБД (импортозамещение тогда только набирало обороты, но мы смотрели вперёд).

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

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

В 2021 году EasyDoc внесли в реестр отечественного ПО.

Как это устроено сегодня: архитектура и pipeline

Сейчас EasyDoc 4.0 — это набор микросервисов, оркестрируемых в Kubernetes. Мы используем Java (Spring Boot) для тяжёлой бизнес-логики, Python для ML-сервисов, Node.js для лёгких API. Базы данных — любые, по умолчанию российские (PostgreSQL-like), объектное хранилище — S3-совместимое (Minio). Клиенты ставят платформу у себя в контуре (on-premise), потому что для многих важна безопасность.

Весь путь обработки настраивается в low-code конструкторе (Workflow Designer). Пользователь перетаскивает блоки, конфигурирует под свою задачу и соединяет их:

[Импорт] → [Предобработка] → [Классификация] → [Извлечение] → [Постобработка] → [Верификация] → [Экспорт]

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

Проверка комплектации пакетов документов. Представим, что клиент банка для получения кредита должен предоставить набор документов, включающий обязательные (например, паспорт и СНИЛС) и дополнительные, желательные, но не обязательные (например, справку 2-НДФЛ и водительское удостоверение).

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

Все правила и логика проверки гибко настраиваются с помощью механизмов low-code / no-code, без необходимости доработки программного кода.

Междокументарные проверки. Представим, что клиент предоставляет несколько документов в рамках одного процесса (например, паспорт, справку 2-НДФЛ и анкету заемщика), содержащих пересекающиеся данные: ФИО, дату рождения, номер документа, доход и место работы.

Механизм междокументарных проверок позволяет сопоставлять данные между различными документами и выявлять расхождения. Если обнаруживаются критичные несоответствия (например, различие в ФИО или дате рождения), процесс обслуживания может быть приостановлен до уточнения или корректировки данных. В случае некритичных расхождений (например, незначительные отличия в написании или округлении сумм) система не блокирует процесс, а уведомляет пользователя и фиксирует замечания.

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

 Теперь по каждому этапу с инженерными деталями

1. Импорт

Система умеет забирать документы откуда угодно: сканер, сетевая папка, e-mail, корпоративные системы (CRM, ERP, ECM). Есть готовые коннекторы и OpenAPI для вызова из внешних систем. Пакетные файлы (PDF, TIFF) автоматически разделяются на отдельные документы — мы используем детектор концов страниц по визуальным признакам.

2. Предобработка

Самый недооценённый этап. В реальной жизни сканы бывают очень некачественными. Наши алгоритмы (OpenCV + свёрточные сети) делают:

  • Поворот и выравнивание (определяем угол по текстовым блокам).

  • Удаление шума (медианная фильтрация, морфологические операции).

  • Бинаризацию (адаптивный порог).

  • Обрезку полей (детектируем границы документа).

  • Улучшение контраста для плохо читаемых участков.

Это повышает точность последующего OCR на 10–20 процентных пунктов. Без этого этапа любые нейросети будут страдать.

3. Классификация

Прежде чем извлекать данные, надо понять, что за документ: счёт-фактура, паспорт, договор или письмо. Мы используем гибрид: свёрточная сеть (CNN) для визуальных признаков (макет, расположение полей) и Random Forest для принятия решения на основе объединённых признаков. В особо сложных задачах к этому гибриду добавляется классификация на основе нечёткого поиска или с помощью LLM. Это позволяет, например, отличить старый паспорт от нового или понять, что в пачке лежит не тот документ.

Пользователь может дообучить классификатор под свои типы прямо в интерфейсе Capture Studio: загружает 10–20 образцов каждого типа, нажимает «Обучить», и через пару минут модель готова.

4. Извлечение данных

Здесь мы применяем три подхода, иногда комбинируя их:

  • Шаблонный (OCR + регулярки) — для жёстко структурированных документов. Находим «якоря» (например, слово «ИНН»), по координатам или контексту извлекаем значение.

  • NLP-извлечение (NER) — для слабоструктурированных. Используем модель LayoutLMv3 (мультимодальный трансформер, который одновременно видит и разметку страницы, и текст). Она находит сущности, даже если поле «плавает» по странице или написано с ошибками.

  • LLM — для полной свободы. Если документ — письмо в свободной форме, где нужная информация может быть сформулирована по-разному, мы пускаем в ход языковые модели. Например, для одного пенсионного фонда мы обрабатывали заявления граждан — там фраза «прошу перечислять пенсию на карту Сбера» может быть написана в любом месте. LLM вытаскивает из текста номер карты, ФИО, сумму.. Важно: мы используем компактные модели (до 13B), чтобы укладываться в 1–2 секунды на страницу на GPU среднего класса.

5. Постобработка и валидация

Голые данные, извлечённые моделями, могут содержать ошибки. Мы применяем:

  • Кросс-проверки: например, ФИО в паспорте должно совпадать с ФИО в заявлении.

  • Вычислительные проверки: например, сумма в таблице должна равняться итогу.

  • Проверки по формату: ИНН должен соответствовать контрольной сумме, дата — быть валидной.

  • Сверку с внешними источниками  и справочниками (вызовы смежных систем, например 1С, CRM и т.п.).

  • Если уверенность модели ниже порога (обычно 95%), документ отправляется человеку-верификатору.

Кросс-проверки и проверки комплектности — наша сильная сторона: всё делается при помощи мышки, это no-code, с этим справится даже неподготовленный пользователь. Такие проверки можно создавать самостоятельно.

6. Верификация

Мы сделали удобный интерфейс для операторов. На скане подсвечивается, откуда извлечено каждое поле. Если поле не найдено, можно мышкой выделить область на скане, и система дораспознает её. Можно перетаскивать страницы, изменять состав документа. Всё это снимает боль с операторов и ускоряет проверку в разы.

7. Экспорт

Результаты уходят в целевую систему в формате JSON/XML. Вместе с данными можно отправить координаты полей, изображения, метаданные. Интеграция через API, коннекторы или прямую запись в БД.

Кейс, которым мы гордимся: НПФ «Будущее»

Это был наш самый сложный и интересный проект. Фонд получает поток входящих обращений от граждан и ФОИВ — заявления, письма, запросы. Полностью неструктурированный поток, достаточно часто рукописный. Раньше операторы вручную вбивали данные в систему, тратя по 10–15 минут на документ.

 Для неструктурированных документов, документов в свободной форме мы создали модели с использованием LLM. Обучили модели на исторических данных — более 140 тысяч документов. Модель классифицировала тип обращения (заявление о смене реквизитов, жалоба, запрос выписки), а реализованные нами модели извлекали ключевые именованные сущности: ФИО, СНИЛС, номер счёта, сумму. Результаты:

●      62% операций регистрации автоматизировано полностью.

●      Скорость обработки корреспонденции выросла на 20%.

●      Операционные затраты снижены на 30%.

●      Количество ошибок регистрации сократилось на 80%.

При этом мы не просто скопировали типовое решение — пришлось много экспериментировать с размером модели, балансом скорости и качества, искать компромиссы. Но результат того стоил.

Что дальше?

Сейчас мы активно экспериментируем с мультимодальными моделями, которые могут видеть и текст, и картинки одновременно. Это удобно, но пока OCR остается лучшим решением для распознавания, а оптимальна комбинация: OCR снимает текстовый слой, а LLM анализирует. В такой синергии качество распознавания улучшается на 20–30%. Что касается VLM (визуально-языковых моделей), полагаем, что лет через 5 они станут королем распознавания данных. Это особенно важно для документов с подписями, печатями, рукописными пометками.

Также прорабатываем идею программно-аппаратного комплекса EasyDoc — сервера в стойке с предустановленным ПО и оптимизацией под конкретное железо. Для тех, кому нужна максимальная производительность и простота развёртывания.

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

А теперь вопрос к вам, коллеги: сталкивались ли вы с автоматизацией обработки документов? Какие самые безумные форматы вам попадались? Давайте обсудим в комментариях!

у можно считать как вторую версию