Подтвердить что ты не робот

Обнаружение пустых страниц в отсканированных документах

Итак, нам нужно определить, представляет ли изображение, созданное сканером, пустую страницу. Я не понимаю, когда дело доходит до обработки изображений, поэтому я должен запустить это сообщество.

Вот что я придумал до сих пор:

  • Пустые страницы могут быть ярко-белой, серой переработанной бумаги или пожелтевшей старой бумагой. Текущая идея состоит в том, чтобы создать гистограмму для страницы, искать крутое увеличение кривой и получить процент пикселей темнее, чем это. Если это превышает пороговое значение, страница, вероятно, не будет пустой.

  • Так как это, скорее всего, классифицирует страницу, содержащую одну строку текста сверху, как пустую, мы будем разбивать страницу и собирать статистику о каждом фрагменте.

  • Нам нужно будет обнаружить сканированные степлеры и дыры от привязки (скорее всего, только в определенных фрагментах), но это можно отложить на более поздний этап. Однако, если у вас есть представление о том, что следует искать помимо этих двух, просьба упомянуть об этом в комментарии.

  • Это должно быть быстро. Это часть рабочего процесса обработки документов, которая обрабатывает (десятки) тысяч страниц в день. Если обработка страницы занимает 10 секунд дольше, чем наши клиенты должны будут сообщить своим клиентам, что им придется ждать на несколько дней дольше своих результатов. (Если это приводит к более ложным срабатываниям, некоторые клиенты предпочли бы, чтобы кто-то проверил несколько десятков найденных "пустых" страниц, чем их клиент ждет еще один день.)

Итак, вот мои вопросы:

  • Это хорошая идея, чтобы пройти этот маршрут или есть что-то лучше?

  • Если мы сделаем это так, как бы я это сделал? Какой хороший (дешевый) алгоритм для поиска порога для страницы? Можем ли мы получить значительную скорость, предположив аналогичный порог для партии документов? К какой точности могут быть округлены значения яркости, прежде чем регистрироваться? Какие причуды мы могли бы ожидать?

4b9b3361

Ответ 1

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

Я бы предложил немного смазать страницу, чтобы уменьшить некоторый шум. Затем вычислите SD для страницы, теоретически, на странице более или менее весь один цвет будет иметь низкий SD и один с большим количеством текста будет иметь более высокий SD. Тогда это случай "обучения" системе для разработки, когда страница проста и когда она является текстом. Вы можете обнаружить, что некоторые страницы трудно сказать.

Вы могли бы обучить его обработкой огромного количества страниц, и он проходит через все их, и вы говорите, что это просто или нет.

ИЗМЕНИТЬ

ok, белая страница с черным текстом, если у нас есть только страница и нет окружающего материала, будет иметь серый цвет, вероятно, довольно светло-серый. Получение среднего значения - это цикл для всех пикселей, добавление их значений и разделение на количество пикселей. Я плохо разбираюсь в этом (logN) материале, но достаточно сказать, что это будет не так долго. Если у вас нет ОГРОМНЫХ изображений.

SD является вторым для цикла, на этот раз мы подсчитываем, насколько различны каждый пиксель от среднего, а затем делятся на среднее. Это займет немного больше времени, чем среднее значение, поскольку мы должны сделать что-то вроде

diff = thispixel - mean;
if(diff < 0) {
    diff = -diff;
}
runningTotal += diff;

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

У этого могут быть проблемы, если их минимальное количество текста, так как оно не окажет большого влияния на SD, поэтому, возможно, как вы предложили в вопросе, сломать страницу на разделы. Я предлагаю полоски горизонтально, так как текст имеет тенденцию идти таким образом. Если мы сделаем одну из этих полосок по одному за раз, как только одна полоска предложит текст, мы можем остановиться, поскольку нам все равно, остался ли пустой или нет.

Размытие страницы поможет уменьшить шум, так как нечетный пиксель шума будет уменьшен при его воздействии, таким образом, даст вам более "плотный" SD. Вы также можете использовать его для уменьшения разрешения изображения.

Скажите, что изображение с соусом 300 шириной 900, вы можете пробовать пиксели в блоках из девяти, 3 * 3 и, таким образом, в итоге получается изображение шириной 100 на 300, поэтому его можно фактически использовать для уменьшения количество вычислений, которое вам нужно сделать, в этом случае на девятом!

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

По звукам этого, вы, вероятно, захотите иметь среднюю почву, которая позволяет ей быть неуверенной и просить о вмешательстве человека, возможно, позволяя человеческой ценности обучать систему, чтобы стать лучше?

Ответ 2

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

Ответ 3

Когда я работал над обработчиком документов (~ 8 лет назад), мы обрабатывали проекты клиентов, которые варьировались от очень "чистых" страниц только на уровне США и буквы, чтобы покрывать/картой неправильных форм, смешанных с обычными страницами. Операторы загружали предварительно отсортированные файлы в сканирующие машины и только следили за сложенными углами и аналогичными механическими проблемами. Их вывод состоял из нескольких потоков сотен изображений, соответствующих диапазону файлов. Один оператор сканера мог легко сканировать 15 тыс. Штук бумаги в смену (всего 0,60 страниц в секунду, в то время как сканер со скоростью мог обрабатывать 3 страницы/сек и все еще сканировать обе стороны). Позже операторы обработали тех, кто ищет ключевые страницы, чтобы отметить начало и конец файла. (Иногда распознавание изображений можно использовать здесь, но люди также обеспечивают проверку качества для первых операторов.) У нас было много переменных, которые можно было бы установить для каждого проекта клиента.

Я основываюсь на приведенном ниже примере на этом опыте и как выглядит, что ваши цели и рабочий процесс похожи.

(Терминология: К клиенту я имею в виду нашего клиента, например, конкретный банк. Проект или клиентский проект представляет собой набор документов от этого клиента, который содержит много файлов, например, все ипотечные кредиты, обрабатываемые определенной отраслью в данном году. файл - это логическое устройство, которое обычно представляет собой папку физического файла для одного из клиентов клиента, например, все ипотечные документы для одного адреса.)

  • Отрежьте верхнюю, нижнюю, боковую сторону и углы. Выбросьте их из своих расчетов (хотя вы, вероятно, сохраните их в конечном изображении). Это будет охватывать штапельные отверстия, отверстия для связующего, а также (крошечные) сложенные углы и очень мелкие рваные края, которые появляются как черные пятна. В зависимости от того, как вы сканируете, последние две проблемы могут быть менее проблемными.

    Измените размеры этих разрезов для каждого проекта клиента, если это необходимо. Например, даже очень тонкий срез края, например, 1-2 мм, устранит большинство оборванных краев без увеличения ложной положительной скорости.

  • Преобразование в черно-белое, 1 бит на пиксель. Я подозреваю, что вы уже делаете это для некоторых проектов клиентов, так что делать это эффективно и эффективно, что может быть тонким, не должно быть дополнительной работой. (Даже если вы не сохраняете изображение 1bpp в качестве результата доставки, преобразование будет полезно при обнаружении пустой страницы.) Устраните шум, сбросив любые черные пиксели, у которых нет или только один черный сосед (используя все окружающие 8 в качестве соседей).

    После резки конечностей (№ 1) и упрощенного уменьшения шума пустые страницы будут иметь очень низкое количество черных пикселей; большинство бланков не будут иметь никаких черных пикселей вообще - исключая исключительно низкое качество страницы, подписываемые штампы (при сканировании задних сторон, упомянутых ниже) или другие обстоятельства по всему проекту и т.д.

  • В зависимости от проекта клиента вы можете установить горячие точки, на которые нужно смотреть - обратная сторона обрезания сторон. Например, просмотр 1-дюймовой полосы, где будет отображаться одна строка в верхней части страницы, может уменьшить ложные срабатывания. Низкоконтрастное сканирование или выцветшая печатная копия (возможно, даже карандаш, который может быть распространен на задних сторонах) только с одной строкой текста будет отличаться от пустой страницы таким образом.

    Какие разделы заслуживают внимания, зависит от каждого проекта, но не пытайтесь разделить страницу на фрагменты и затем разделить эти плитки на интересующие области. Вместо этого распараллелите это на уровне страницы; например 1 работник на ядро, каждый рабочий обрабатывает полную страницу за раз.

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

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

    С другой стороны, были проекты с очень чистыми файлами, поэтому сортировщики могли вставлять (обычно цветные) пустые страницы, обозначающие границы файлов. В этом случае второй набор людей по-прежнему выполнял ключ по номеру файла, но ему приходилось проверять первую страницу каждого файла. Это было не редкость, но и не часто.

Прежде чем я начну немного путаться, я надеюсь, что мой главный пункт натолкнется: вы должны решить, как смягчить ставки ложных срабатываний (= потеря данных) и ложных негативов (= раздражающие пробелы и в противном случае безвредны, но максимально допустимая скорость все еще могут быть указаны в контракте на проект). Это сильно зависит от проекта и типа файлов/документов, которые вы обрабатываете, но он помогает вам в том, как это сделать. Вы получите гораздо лучшие результаты по индивидуальному подходу, чем при попытках одноразового использования, даже если подходящие подходы будут похожи на 80-98%.

Если вы доставляете изображения 1bpp клиенту, например, вы даже не захотите/не должны устранять пробелы, поскольку размер файлов (и, в конечном счете, размер поставляемого набора данных) не будет проблемой. Это может быть приемлемым компромиссом, когда устранение большинства пробелов сложнее при сохранении низкой ложной положительной скорости; например, для файлов с чернилами ( "получено", "принято", "срок" и т.д., они истекают кровью к задней части) или, например, другие проблемы.

Ответ 4

Мой класс fall выполняет кучу проектов обработки изображений. Вот что я хотел бы попробовать:

  • Проект из цвета в оттенки серого
  • Залейте все пиксели в простую гистограмму, скажем, 100 ведер между 0 и 1
  • Найдите локальный минимум в гистограмме, чтобы значение абсолюта above - below было как можно меньше, где above - количество ярких пикселей, а below - количество более темных пикселей
  • Настройте пиксели above на белый, а below - на черный
  • Если вам нравится, в качестве дополнительного шага вы можете удалить черные края
  • Если почти нет черных пикселей, страница пуста.

Первые два шага должны быть объединены, и они являются единственными затрачивающими много времени шагами; на изображениях с разрешением 600 точек на дюйм, возможно, вам придется коснуться многих миллионов пикселей. Остальное будет молниеносно. Я был бы очень удивлен, если бы вы не могли классифицировать несколько изображений в секунду, особенно если вы знаете, что черных краев не будет.

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

Удачи, и сообщите нам, как вы разобрались!

Ответ 5

Проверьте этот алгоритм обнаружения линии: http://homepages.inf.ed.ac.uk/rbf/HIPR2/linedet.htm. В дополнение к подробному объяснению того, как работает algo, demo, где вы можете использовать свое собственное изображение и см. результаты. Я попробовал два изображения: 1) a B & W проверка квитанции, 2) B & W, "пустая" задняя сторона этой же квитанции. Все алгоритмы обнаружения границ, которые я пытался найти, были найдены на "пустой" странице. Но этот алгоритм обнаружения линии был единственным алгоритмом, который правильно нашел строки на первой странице и все же ничего не нашел на "пустой" задней странице.

Ответ 6

Похоже, вы пытаетесь преобразовать всю документацию для компании в цифровые документы. Некоторые из этих статей могут быть действительно старыми.

Скажите, что ваш текст черный, а другой цвет - фон. Если вы возьмете две средневзвешенные значения, состоящие из того, что вы считаете текстом, и одного из фона, вы можете сравнить эти два и посмотреть, достаточно ли они, чтобы рассмотреть дальнейшую оценку. Это устранит любое неравномерное старение бумаги.

Сшивание отверстий и перфорированных отверстий на бумаге довольно стандартное, но они будут отображаться как серые или вообще не отображаться, если вы сканируете на белом фоне. Если нет, вы можете догадаться, где они находятся и удалить их.

Теперь мы рассмотрим области с большим интересом, области, где черные пиксели являются самыми плотными. Выберите часть этого и OCR его. Поместите стартовый верхний левый ближе всего к области, где начинается текст. В типичном документе сплошная пустая линейная область, идущая слева направо, а другая - сверху вниз, обозначает верхнюю и левую стороны абзаца. Вы можете быть уверены, что у вас есть строка текста, потому что ниже строки текста есть еще одна пустая область слева направо. Поэтому вам не нужно беспокоиться о выборе части, которая будет изрезать текст пополам.

Ответ 7

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

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

Нет необходимости обрабатывать пиксельные пиксели, использование матриц поможет сделать это более эффективным, например, используя Numpy, вы можете вычислять средства, суммы и т.д. для целых строк, столбцов или матриц одновременно намного эффективнее. Также нет необходимости обрабатывать КАЖДЫЙ пиксель, хороший образец строк должен быть способен выполнить задачу с одинаковой точностью. 8bit точность должна быть прекрасной, и вы могли бы даже переконвертироваться к большим пикселям перед запуском этого алгоритма обработки.

Ответ 8

Вы можете сделать шумную обрезку, т.е. размыть изображение и сделать автоматическую обрезку (без фактического изменения изображения). Если ширина или высота результата обрезки ниже порога (например, от 80 до 100 для изображения с разрешением 600 точек на дюйм), страница пуста.

Доказательство концепции с использованием Интерфейс командной строки ImageMagick:

$ convert scan.png -shave 300x0 -virtual-pixel White -blur 0x15 -fuzz 15% \
    -trim info:

Вышеприведенная команда предполагает черно-белое (1 бит) изображение на 600 точек на дюйм. Он также игнорирует разницу в 300 пикселей, так что артефакты, такие как отверстия перфорации, не дают ложных негативов.