Давайте поможем Котикам (но не тем что вы подумали)

Денис Бигус (журналист расследующий коррупцию) запустил со своей командой новый проект для оцифровки деклараций чиновников и судей — Котики:
kotyky.org.ua

Суть проекта: есть ОЧЕНЬ МНОГО отсканированных деклараций чиновников и судей за разные года. Формат — многостраничные сканированные pdf. Порядок страниц может быть нарушен. Волонтерам предлагается вручную вводить данные из сканированного pdf в формы (набор полей ввода) для последующего программного анализа оцифрованных данных. Сейчас есть неудобство — pdf в одном окне, а форма в другом — из-за этого приходиться постоянно переключаться между окнами и заново искать на каком поле ввода остановился. Даже если у пользователя 2 монитора (что бывает редко) — то все равно прийдется постоянно «прыгать» глазами между двумя окнами.

У меня возникла идея как сделать перенос данных более удобным и быстрым. Денису идея понравилась и мы с ним договорились, что я сначала сделаю пример (proof of concept), он на него посмотрит — и тогда будем думать над полноценной реализацией. Нужна помощь фронтенд программиста (Шаг 2)

Идея улучшения:

Декларация — это утвержденная форма, распечатанная на принтере, а потом заполненная чиновником вручную. Соответственно, страницу можно пробовать распознать — в итоге мы получим распознанный печатный текст самой формы и билиберду для рукописной части (которую заполнил чиновник). По распознанному тексту можно определить какого типа это документ (я так понял что декларации бывают разного типа) и какая это страница из этого документа. Определив какая это страница можно также восстановить порядок страниц если он был нарушен.
После того как мы поняли что это за документ и что это за страница можно показать пользователю только одну страницу на которой будет оригинальная страница (png или jpeg) отображаться на заднем фоне — а поверх нее будут поля для ввода данных. При таком подходе не прийдется постоянно прыгать глазами — увеличиться скорость и уменьшится количество ошибок.

Шаг 1 (проверено — работает):
Программно открываем pdf и постранично скармливаем FineReader:

cd C:\Program Files (x86)\ABBYY FineReader 12
FineCmd.exe C:\Temp\Doc1Page1.pdf /lang ukrainian /out C:\Temp\Doc1Page1.txt /quit

Получаем текст в котором ищем ключевые слова-фразы по которым определяем что это за страница и какой документ (из списка заранее формализованных документов и страниц).

Пример pdf и распознанного текста:
drive.google.com/...​fVlWgnavWYaoJ?usp=sharing

Шаг 2. (нужна помощь веб программиста):
Отображаем картинку pdf страницы (png или jpeg) и поверх генерируем поля для ввода. Главная проблема — это правильно расположить поля ввода поверх сканированной формы. Позиции полей ввода можно описать в процентах и соответственно располагать поверх картинки оригинального документа. Думаю что даже некоторое несовпадение позиций вполне допустимо. При масштабировании страницы будет масштабироваться как фоновая картинка оригинального документа так и положение полей ввода.

Я программист, но никогда не имел дела с разработкой фронтенда. Может кому интересно помочь со вторым шагом...

Денис Бигус:
www.facebook.com/bihus.info
www.facebook.com/monti.czardas

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

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

Так в них и так и так всматриваться. Я предлагаю лишь более удобный способ без постоянного переключения окон

возможно я не правильно вас понял. Я немножко участвовал в канцелярской сотне (переводил эти самые декларации), так вот когда вы откроете документ, то увидите что-то типа «почерка врача», это сложно прочитать, а если на это что-то еще и накладывать. Может поле для ввода должно быть рядом с полем для чтения!?
И когда я переводил декларации у меня было такое ощущение что их специально плохо заполняют и сканируют чтоб затруднить или запутать проверяющего. Например с 15 декларации у меня 2 поля осталось нераспознаными, я просто не смог разобрать что там этот «врач» написал

Если декларации прям совсем одинаковые — это значит что каждое поле ввода можно программно «вырезать», отсканировать отдельно и положить в бд одним скриптом. Не так давно игрался с распознованием чеков и остановился на openocr, естественно. Так вот есть уже готовая система, которую можно развернуть одной командой и достаточно эффективно распознавать. Ссылку на оригинальный репоз не нашел, к сожалению. Вот пример docker-compose, который получился у меня. Отсебятины там, кажется, только постгрес. github.com/...​ompose/docker-compose.yml

Підписатись на коментарі