Обнаружение рукописной подписи

Я пытаюсь найти, содержит ли отсканированная PDF-форма подпись (например, убедиться, что подпись проверена).

Проблемная область:

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

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

Я пишу это на Java, если это вообще полезно

1 ответ

Решение

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

  • http://java-ml.sourceforge.net/ - это библиотека, которую вы можете скачать, которая содержит множество полезных алгоритмов и другого кода для включения в вашу программу

  • https://www.youtube.com/playlist?list=PLiaHhY2iBX9hdHaRr6b7XevZtgZRa1PoU - это серия, объясняющая нейронные сети (то, что вы, возможно, захотите изучить для своего машинного обучения)

  • Итак, большой совет для вашего алгоритма состоит в том, чтобы вместо того, чтобы искать, как долго все циклы и вещи, смотреть на все их относительные расстояния
  • "Относительные расстояния от чего?" ты говоришь. Ну, вот где пригодится следующий совет: вместо отслеживания линий следите за концами петель и порядком этих точек. Если вы затем возьмете расстояние между всеми ними (относительно, конечно, что означает установить одну из длин на ноль). Наряду с отслеживанием расстояний, вы также должны отслеживать углы. Вы бы вычислили угол ABC, взяв расстояние между (A,B), (B,C) и (A, C) (A, B и C - координаты на плоскости xy), которое создает треугольник между точками что позволяет использовать тригонометрию для расчета угла.

  • (Я предполагаю, что для всех этих случаев вы также пытаетесь определить, кто является подписью, это, конечно, потому что это на самом деле совсем ничего не усложняет). При попытке сопоставить обнаруженную подпись с сохраненными сигнатурами, чтобы увидеть, "одинаковы", не делайте это там, где расстояния и углы должны быть точными. Дайте погрешность (например, используйте диапазон% выше и ниже). Вот совет: сделайте погрешность довольно большой. Таким образом, если он написан плохо, он все равно будет обнаружен. Это повышает шансы получения более чем одной подписи. К счастью, есть простое решение для этого. Просто запустите алгоритм снова для сигнатур, которые были найдены, но с меньшим пределом ошибки (вы, конечно, не делаете это вручную, программа делает это). Продолжайте уменьшать предел погрешности, пока не получите только одну подпись.

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

Другие вопросы по тегам