С задним фоном, в плане универсальности, не получится. Двоеточие начинает находить в некоторых цифрах, отсюда ошибки распознавания.
Вот мой более компактный скрипт основанный на методе сортировки массива.
Скрипт сам определяет количество и имена картинок из папки Letters. Первый символ в имени картинки является символом распознавания. Двоеточия конечно в именах файлов недопустимы, поэтому использовал точку.
Проверено, с образцом из архива все распознает верно.
SUB(recognize, $x1,$y1, $x2,$y2, $c_ignor, $prc)
GETFILELIST($Letters_arr, "Letters\*.bmp")
FOR($Let_num=0,$Let_num<ARRSIZE($Letters_arr))
SCANPICTURE($ARR_SCAN, $x1,$y1, $x2,$y2, STRCONCAT("Letters\", $Letters_arr[$Let_num]), $c_ignor, $prc)
FOR($arr_num=0,$arr_num<ARRSIZE($ARR_SCAN),2)
ARRPUSH($ARR_OUT, $ARR_SCAN[$arr_num])
ARRPUSH($ARR_OUT, STRCUT($Letters_arr[$Let_num], 1, 1))
END_CYC
UNDEFINE($ARR_SCAN)
END_CYC
$siz = ARRSIZE($ARR_OUT)
$srtcheck = 0
$srt = 0
FOR($a=$siz-2,($a>0)&($srt=0),-2)
FOR($b=0,$b<$a,2)
IF($ARR_OUT[$b] > $ARR_OUT[$b+2])
$srtcheck = 1
$tmp = $ARR_OUT[$b]
$tmp2 = $ARR_OUT[$b+1]
$ARR_OUT[$b] = $ARR_OUT[$b+2]
$ARR_OUT[$b+1] = $ARR_OUT[$b+3]
$ARR_OUT[$b+2] = $tmp
$ARR_OUT[$b+3] = $tmp2
END_IF
END_CYC
IF($srtcheck = 0)
$srt = 1
END_IF
END_CYC
$str = ""
FOR($a=0,$a<ARRSIZE($ARR_OUT),2)
IF(STRLEN($str) > 0)
IF($ARR_OUT[$a]-$ARR_OUT[$a-2] > 10) // обпределение пробела
$str = STRCONCAT($str, " ")
END_IF
$str = STRCONCAT($str, $ARR_OUT[$a+1])
ELSE
$str = $ARR_OUT[$a+1]
END_IF
END_CYC
UNDEFINE($ARR_OUT)
END_SUB
GETSCREEN
recognize(147,783, 219,809, -1, 100) // область распознавания, цвет прозрачности, процент совпадения
LOGWRITE ($str) // в переменную $str выводятся распознанные символы
HALT