Обнаружение рукописной подписи
Я пытаюсь найти, содержит ли отсканированная 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), которое создает треугольник между точками что позволяет использовать тригонометрию для расчета угла.
(Я предполагаю, что для всех этих случаев вы также пытаетесь определить, кто является подписью, это, конечно, потому что это на самом деле совсем ничего не усложняет). При попытке сопоставить обнаруженную подпись с сохраненными сигнатурами, чтобы увидеть, "одинаковы", не делайте это там, где расстояния и углы должны быть точными. Дайте погрешность (например, используйте диапазон% выше и ниже). Вот совет: сделайте погрешность довольно большой. Таким образом, если он написан плохо, он все равно будет обнаружен. Это повышает шансы получения более чем одной подписи. К счастью, есть простое решение для этого. Просто запустите алгоритм снова для сигнатур, которые были найдены, но с меньшим пределом ошибки (вы, конечно, не делаете это вручную, программа делает это). Продолжайте уменьшать предел погрешности, пока не получите только одну подпись.
Я надеюсь, что у вас уже есть идеи для определения, где находится настоящая подпись, но, конечно, проверьте разницу в темноте пикселей. Убедитесь, что это довольно непрерывно. Также обратите внимание на тот факт, что подписи обычно подписываются в черном, синем, иногда красном и других причудливых цветах.