Привет, Хабр! В предыдущих статьях мы уже рассказывали вам про то, как нам удалось превратить ввод паспортных данных на мобильных устройствах из рутины в простую и быструю процедуру. Следующим закономерным шагом мы превратили наш Smart PassportReader SDK в серверную компоненту, облегчив тем самым крупным финансовым организациям работу с документами в бэк-офисах. Наконец, проявив изобретательскую смекалку и инженерный подход, нам удалось разработать программно-аппаратный комплекс (забегая вперед, представим его название — Smart PassportBox), позволяющий оптимизировать работу фронт-офисов и СКУД-решения. Поэтому, если вам интересно сколько директоров, программистов, паяльников, лобзиков и отверток требуется для создания полноценного ПАК, добро пожаловать под кат.
Сразу хочется внести ясность — мы не заявляем, что изобрели колесо. Первые автоматизированные рабочие места по распознаванию паспортов РФ появились более 10 лет назад (программное обеспечение для решения поставленной задачи есть как у известных гигантов в области распознавания документов — Abbyy и Cognitive, так и у сравнительно небольших фирм — например, PassportVision).
На первый взгляд кажется, что такая простая и понятная задача решена. Бери и пользуйся. Однако, при более детальном рассмотрении возникает ряд ограничений, с которыми сталкиваешься при интеграции. Разберем две основные проблемы.
Во-первых, как бы печально это ни звучало, большинство распознающего софта работает только на ПК под управлением MS Windows. Однако, в последние годы в связи с активным развитием сообществ открытого программного обеспечения все чаще на рабочих станциях операторов можно увидеть Linux. Следовательно, распознающий паспорта софт также должен следовать этому тренду.
Во-вторых, для качественного распознавания паспортов требуется сканер (надо как-то получить графический образ документа). И тут потребитель обычно стоит перед выбором: дешево, долго, со средним качеством либо дорого, быстро и с кучей дополнительных “примочек”. Поясним сложившуюся проблему чуть подробнее. На сегодняшний день принято получать изображение документа одним из двух путей: с помощью планшетного сканера или с помощью специального паспортного устройства. Планшетные сканеры при своей относительной дешевизне (цена на компактные модели размера A5 стартует примерно с 12 000 рублей) позволяют получить пригодную для распознавания картинку за 10-15 секунд. При этом не факт, что распознавание будет выполнено с первого раза и не потребуется повторного сканирования (из-за загиба страницы или неправильной ориентации документа). За это время опытная машинистка может вбить паспортные данные вручную. Ускорить процесс можно с помощью специализированных устройств (обычно, позволяющих помимо мгновенного сканирования выполнять верификацию, распознавание информации на встроенном чипе и т.п.), основным минусом которых является стоимость (порядка 100 000 рублей).
Проведя анализ, мы поняли, что рынок недорогих, но эффективных решений распознавания паспортов еще не разработан полностью, еще есть место для новых инженерных и наукоемких решений.
Так мы мы вдохновились на создание программно-аппаратныого комплекса…
Разработка оптического сканирующего устройства
Как вы уже наверное поняли из введения, оптическое устройство — основополагающая часть всего программно-аппаратного комплекса. Поэтому мы щедро выделили на это устройство 100 долларов, не уменьшая при этом требований к качеству и скорости получения изображений. Первое (и самое очевидное), что пришло в голову — использование хорошей web-камеры. Тем более распознавать видео мы умеем хорошо (читайте наш предыдущий пост). И да, Хабр, у нас получилось достаточно успешно! Комбинация web-камера + Smart PassportReader позволяет решить задачу автоматизированного ввода документов. Правда, освоить работу с таким ПАК рядовому оператору оказалось не так просто по следующим причинам:
- требуется определенная сноровка, чтобы научиться быстро демонстрировать документ перед web-камерой на определенном расстоянии так, чтобы не было существенных геометрических искажений;
- необходимо в каждом конкретном случае учитывать особенности рабочего места при расположении web-камеры, так как в противном случае возможные блики, вызванные внешним освещением могут негативно отразиться на качестве распознавания документа.
- распознать весь разворот перед камерой не получается, так как паспорт по своей природе книжка и все время норовит “сложиться” пополам.
Немного поразмыслив, мы решили установить камеру внутрь замкнутого ящика со стеклянной “крышкой”, про который известно все: расстояние от камеры до документа (можно фиксировать фокусное расстояние), параметры освещения всегда одинаковы и не зависят от внешних факторов, паспорт прижимается к стеклянной поверхности, что позволяет легко избежать эффекта книжки.
За длинные холодные зимние каникулы, вооружившись досками и отвертками вместо сноубордов и лыж, мы начали творить устройство… Из дерева…
Несмотря на кажущуюся простоту, получившееся устройство обладает своими нюансами:
- взаимное расположение камеры и светодиодной подсветки должны подбираться исходя из уменьшения возможного отражения от стеклянной рабочей поверхности;
- мощность светодиодной подсветки должна быть достаточной для нормального функционирования камеры, при этом зоны документа не должны быть засвечены;
- расстояние от камеры до рабочей поверхности должно быть подобрано так, чтобы получить документ в максимальном разрешении.
В результате, с третьей попытки (еще раз спасибо руководству страны за такие продолжительные каникулы) нам удалось собрать сканер-ящик, возвращающий хоть и проективно-искаженные, но вполне пригодные для распознавания с помощью нашего SDK видеопоследовательности.
Ниже представлена краткая смета стройматериалов, которые пошли на изготовление. Как видите, в заветные 100 долларов мы уложились с запасом.
№ | Составляющая деталь | Стоимость, руб. |
---|---|---|
1 | Мебельные панели (ЛДСП) 16 мм | 200,00 |
2 | Стекло оконное 4 мм | 100,00 |
3 | Фурнитура (саморезы + держатели + планка) | 200,00 |
4 | Светодиоды, батарейки, провода | 500,00 |
5 | FullHD web-камера | 5000,00 |
Разработка программного обеспечения
Если создание коробки для нашей организации (которая по роду деятельности занимается разработкой софта) — это своего рода вызов, то подготовка распознающей программы на базе собственно нашего SDK — это фактически отдых. Итак, в соответствии с нашей целью, распознающий софт должен отвечать следующим требованиями:
- кросс-платформенность (в частности, поддержка MS Windows и Linux);
- естественная интеграция с оптическим устройством сканирования;
- высокая скорость распознавания.
Соответственно, при разработке софта мы использовали следующие приемы:
- все программы пишутся на C++ с использованием при необходимости кросс-платформенных сторонних библиотек (например, Qt для написания компонент с пользовательским интерфейсом);
- естественная интеграция с оптическим устройством по сути представляет собой написание модуля управления web-камерой (который, к сожалению, пришлось писать индивидуально для каждой операционной системы) и исправления полученных геометрических искажений;
- высокая скорость распознавания обеспечивается собственно ядром — на ПК средней производительности обе страницы паспорта с помощью Smart PassportReader SDK распознаются порядка 200 мс.
Что же у нас получилось
Следуя поговорке “Лучше один раз увидеть…” мы решили снять небольшой ролик про получившийся программно-аппаратный комплекс.
Рубрика “Вопросы и Ответы”
В этом разделе мы набрались смелости чтобы предсказать ваши вопросы и заранее сформулировать на них ответы. Однако, мы с нетерпением ждем других вопросов в комментариях к статье.
1. Так все-таки, сколько директоров, программистов и инструментов потребовалось для создания такого ПАК?
Все столярные материалы можно купить в крупном строительном магазине (в нашем случае — Леруа Мерлен), там же можно аккуратно напилить доски требуемого размера (чтобы не возиться с лобзиком дома), web-камеру — в магазине электроники типа Юлмарт, провода и светодиоды — Чип и Дип. Дополнительно потребовался 1 директор (оказалось, что директора по своей природе неплохо владеют отверткой и паяльником) и 1 программист C++ (для создания программной связки между web-камерой, Smart PassportReader SDK и интерфейсом вывода результатов).
2. Судя по изображениям ПАК имеет внушительные физические размеры. Разве с ним удобно работать?
На многочисленных демонстрациях потенциальных заказчиков действительно немного смущает высота сканера (а она сейчас 276 мм). Но надо понимать, что это всего лишь опытный образец, выполненный полностью из бытовых деталей. Если изготовить пластиковый корпус, использовать малоформатную широкоугольную камеру, то высоту устройства можно довести до 120 мм, что вполне сравнимо с существующими устройствами сканирования паспортов. Но даже при таких “громадных” размерах устройство может быть эффективно использовано: никто не запрещает спрятать этот “ящик” внутрь стола или привинтить сбоку (как показано на рисунке ниже).
3. Все равно даже при таком компактном исполнении внутри “ящика” много свободного места. Вы не думали, чем можно его заполнить?
Мы не просто думали, а уже даже приступили к заполнению “ящика”. Оставшееся место можно эффективно использовать для расположения внутри микрокомпьютера, который собственно и будет заниматься распознаванием документов (благо наш SDK отлично оптимизирован под платформу ARM). В таком виде ПАК распознавания паспортов будет локализован внутри одного устройства, не используя никакие внешние вычислительные мощности.
Заключение
Конечно, нашу деревянную коробку трудно назвать готовым промышленным образцом. Тем не менее, уже на текущемй этапе нашей опытно-конструкторской разработки можно сформулировать основные преимущества получившегося программно-аппаратного комплекса, решающего задачу распознавания паспортов граждан РФ:
- высокая скорость распознавания паспорта (менее 1 секунды на разворот на компьютере с процессором Intel Core i5 вместе со сканированием);
- высокое качество распознавания (сбалансированность аппаратной и программной составляющих);
- простота устройства (корпус + камера + ПО, не требует специальных драйверов и прочего системного программного обеспечения);
- простота эксплуатации (конструкция устройства предотвращает типичные ошибки оператора);
- ни одной движущейся детали (по сути, нечему ломаться);
- простое API с различными интерфейсами (C++, ActiveX, Java, C#);
- отечественная разработка.
P.S. Концепция программно-аппаратного комплекса, описанного в данной статье, защищена патентным законодательством РФ.