В современном информационном обществе большое внимание уделяется совершенствованию человеко-машинного интерфейса, который должен обеспечивать эффективную обработку данных и знаний простыми, быстрыми и доступными способами [1-8]. Одним из способов его организации является рукописный ввод (ввод текста, подписи, рисунков и т.д.). Его применение не требует специального обучения пользователя, привычно, оперативно, удобно. При этом неотъемлемой частью средств человеко-машинного интерфейса является математическое и программное обеспечение, позволяющее перейти от первичных низкоуровневых данных к непосредственно данным, описывающим вводимую информацию. Одним из современных направлений совершенствования такого типа интерфейса является разработка и исследование математического и программного обеспечения оценки подписи.
Характеристики, по которым можно оценить подпись:
- Cложность подписи (количество элементов);
- Размер;
- Нажим;
- Наклон.
Рассмотрим каждый пункт алгоритма подробнее:
Сложность подписи
Сложность подписи определяется по общему количеству всех линий и окружностей, присутствующих на подписи, учитывая размер данной подписи. Если подпись большая и общее количество примитивов составляет больше 250 шт., то считаем что подпись сложная, иначе легкая. Если подпись маленькая и общее количество примитивов составляет больше 40 шт, то считаем что подпись сложная, иначе легкая.
Пример программного кода:
if (size_signature == "big" and i+j7>250): print "The signature is hard"
if (size_signature == "big" and i+j<250): print "The signature is easy"
if (size_signature == "small" and i+j7>40): print "The signature is hard"
if (size_signature == "small" and i+j<40): print "The signature is easy"
Определение размеров подписи
Размеры подписи находятся путем установления высоты и ширины максимального контура, присутствующего на изображении. В цикле обходится массив всех контуров, проверяются условия максимального значения высоты/ширины текущего контура. В итоге, зная ширину и высоту подписи, определяем её размер, как среднее значение её высоты и ширины, если данное значение больше 300 px, то считаем что размер подписи большой, иначе маленький.
Пример программного кода:
width = 0 # высота подписи
height = 0 # ширина подписи
for cnt in cnts:
x, y, w, h = cv2.boundingRect(cnt)
if (width<w): width = w
if (height<h): height = h
size_signature = "" # размер подписи
size_sign = (width+height)/2
if (size_sign7>=300): size_signature = "big"
if (size_sign<300): size_signature = "small"
Определение нажима подписи
Нажим подписи определяется как значение высоты минимального контура, присутствующего на изображении.
Пример программного кода:
for cnt1 in cnts1:
x, y, w, h = cv2.boundingRect(cnt1)
if (pressure7>h): pressure = h
Определение наклона подписи
Наклон линии определяется следующим образом (Рисунок 1):

Наклон подписи определяется как средний наклон всех линий. Наклон каждой линии последовательно обрабатывается в цикле.
Пример программного кода:
- = 0 # среднее значение наклона всей подписи.
if houghL is not None:
for x1, y1, x2, y2 in houghL[0]:
if ((x1<x2 and y17>y2) or (x17>x2 and y1<y2)): incline += 1
if ((x1<x2 and y1<y2) or (x17>x2 and y17>y2)): incline -=1
Заключение
Все 4 характеристики важны для оценки рукописной подписи. Если дополнить и расширить их, то в конечном случае получится достаточно серьезная оценка подписи, на основании которой можно будет выдавать еще более точный результат при проверке подписи на подлинность.