Вот скрипт с картинками.
Распознавание переделано под COLORMODE использовал 7.
Подбор процента только на тех 3 примерах что есть. На них всё чётко определяет.
На примерах нет цифр 2 и 9, для них не выставлен процент!!!
Опасаюсь за цифру 3, она самая нестабильная, если на ней будет сбоить, нужно переделать образец из другого скрина и поправить процент.
#name "Распознавание чисел"
// Author: Vint
// Version: 1.5 (28.05.2015)
// Скрипт для Clickermann v4.11 002
// подключение number_read
// #include "Распознавание чисел 1.5.cms"
//==============================================================================
SUB(sort_arr) // сортируем $data по возрастанию X
$data_size = ARRSIZE($data)
FOR($out=0, $out < $data_size, 2)
$min = $data[$out]
$ind = $out
FOR($in=($out+2), $in < $data_size, 2)
IF($data[$in] < $min)
$min = $data[$in]
$ind = $in
END_IF
END_CYC
//LOGWRITE("минимум: ", $min, " ", $ind, " - ", $out)
$X = $data[$ind]
$Y = $data[$ind+1]
$data[$ind] = $data[$out]
$data[$ind+1] = $data[$out+1]
$data[$out] = $X
$data[$out+1] = $Y
//LOGWRITE($X, " / ", $Y)
WAITMS(20)
END_CYC
END_SUB
//==============================================================================
SUB(number_read, $f_x1,$f_y1,$f_x2,$f_y2, $pref, $c_mode)
// $f_x1, $f_y1 область ЛевоВерх
// $f_x2, $f_y2 область ПравоНиз
// $pref = "textures\digit_" префикс имён файлов с цифрами (для разных шрифтов)
// $c_mode - режим COLORMODE
// Результат возвращается в $res если не найдено $res=-1
$res = -1 // очищаем ответ
UNDEFINE($data) // главный массив данных
UNDEFINE($a_scan) // временный массив для SCANPICTURE
$SHIFT_X = 15 // смещение (кол-во игнор пикселов вокруг найденного)
$SHIFT_Y = 15
GETSCREEN
IF($c_mode > 0)
COLORMODE($c_mode, $f_x1,$f_y1,$f_x2,$f_y2)
END_IF
FOR ($i=0, $i < 11)
SWITCH($i)
CASE(0)
$pr = 95
CASE(1)
$pr = 99
// CASE(2)
// $pr = 95
CASE(3)
$pr = 93
CASE(4)
$pr = 95
CASE(5)
$pr = 95
CASE(6)
$pr = 95
CASE(7)
$pr = 95
CASE(8)
$pr = 94
// CASE(9)
// $pr = 95
DEFAULT
$pr = 100
END_SWITCH
SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), 16744447, $pr)
// заносим 'X,цифра' в $num с учётом мёртвых зон
$a_scansize = ARRSIZE($a_scan)
IF($log0 = 1)
LOGWRITE ("Ищем картинку ", $i, " найдено ", $a_scansize/2)
END_IF
FOR($j=0, $j < $a_scansize, 2)
$X = $a_scan[$j]
$Y = $a_scan[$j+1]
// проверяем мёртвые зоны
$dead_zone = 0
$dead_size = ARRSIZE($dead)
FOR($m=0, $m < $dead_size, 2)
$X_old = $dead[$m]
$Y_old = $dead[$m+1]
IF($log0 = 1)
LOGWRITE ("$X/$X_old = ", $X, " / ", $X_old)
LOGWRITE ("$X/$Y = ", $X, " / ", $Y, " ABS ", ABS($X - $X_old))
END_IF
IF((($Y - $Y_old) < $SHIFT_Y+1) & (ABS($X - $X_old) < $SHIFT_X+1))
$dead_zone = 1
$m = $dead_size + 10
END_IF
END_CYC
IF($log0 = 1)
LOGWRITE ("$dead_zone = ", $dead_zone)
LOGWRITE ("$dead_size = ", $dead_size)
END_IF
IF($dead_zone = 0)
ARRPUSH($dead, $X)
ARRPUSH($dead, $Y)
ARRPUSH($data, $X)
ARRPUSH($data, $i)
IF($log0 = 1)
LOGWRITE ("добавляем ", $i, " $X/$Y = ", $X, " / ", $Y)
END_IF
END_IF
END_CYC
IF($log0 = 1)
LOGWRITE ("после добавления ", $i, " всего ", ARRSIZE($data)/2)
LOGWRITE (" ")
END_IF
UNDEFINE($dead)
UNDEFINE($a_scan)
END_CYC
$data_size = ARRSIZE($data)
IF($data_size > 0)
sort_arr()
IF($log0 = 1)
LOGWRITE ("цифр после сортировки ", ARRSIZE($data)/2)
END_IF
FOR($i=1, $i < $data_size, 2)
IF($res = -1)
$res = STRCONCAT("", $data[$i]) // если первыё символ
ELSE
IF($data[$i] < 10)
$res = STRCONCAT($res, $data[$i]) // последующие символы цифры
ELSE
$res = STRCONCAT($res, ".") // последующие символы зпт
END_IF
END_IF
END_CYC
//$res = ROUND($res, -8)
ELSE
LOGWRITE ("число не найдено")
END_IF
END_SUB
//==============================================================================
LOGCLEAR
$log = 1
//$log0 = 1
number_read(514,475,765,602, "textures\digit_", 7)
LOGWRITE ("Найдено число: ",$res)
HINTPOPUP("Найдено число: ",$res)
HALT