Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Шаблонное распознавание простейшей капчи, ошибка в шаблоне
Форумы портала PHP.SU » » Графика в PHP » Шаблонное распознавание простейшей капчи, ошибка в шаблоне

Страниц (2): [1] 2 »
 

1. vasya_228 - 14 Октября, 2014 - 16:10:36 - перейти к сообщению
Делаю шаблонное распознавание капчи по этой статье xakep.ru/41033. При сравнение шаблона цифры пять, результата не было. Решил проверить, оказывается шаблон неправильный, хотя всё посчитал вроде правильно, начиная с нуля. Код за меня писать не надо, нужна подсказка. (Полный скрипт ниже)

Спойлер (Отобразить)

Для распознавания цифры 5 идёт шаблон. (Кусок кода ниже)
PHP:
скопировать код в буфер обмена
  1. if(    
  2.  $pixels[$pX][$pY]==1 &&      
  3.  $pixels[$pX+4][$pY]==1 &&          
  4.  $pixels[$pX][$pY+3]==1 &&      
  5.  $pixels[$pX+4][$pY+4]==1 &&  
  6.  $pixels[$pX+4][$pY+7]==1 &&  
  7.  $pixels[$pX][$pY+8]==1        
  8. )  
  9.  {  
  10.    $symbol_5 = 5;  
  11. }  
  12. else $symbol_5 = "not recognized.";

Там проверяются координаты в бинарной матрице изображения. Если в указанных координатах существуют единицы то цифра определена.
Для составления шаблона, вывел матрицу на экран и посчитал все нужные мне координаты и записал в код для проверки шаблона. Проблема заключается в не определении координат. То есть координаты я посчитал, но при выполнении скрипта выдаёт в тех координатах, которые я посчитал, нули.
2. Panoptik - 14 Октября, 2014 - 18:44:43 - перейти к сообщению
дебаг вам в помощь
var_dump($pixels);
3. vasya_228 - 14 Октября, 2014 - 21:41:27 - перейти к сообщению
Просмотрел с помощью var_dump'a массив, первые 3 проверяет (если старый код расскомментить), а остальные не хочет. Вывел на прямую,
но выводит 0, хотя в вардамп показывает еденицу.
4. vasya_228 - 27 Октября, 2014 - 19:12:28 - перейти к сообщению
Лол. Писал на 3-х форумах, и никто не пнул. Что делать то? Тутж вроде ничего сложного нет. (а вот для меня загвоздка) Где асы php?
5. DeepVarvar - 27 Октября, 2014 - 19:33:34 - перейти к сообщению
vasya_228 пишет:
Лол
И правда лол - ты видел какого года эта статья? Не? 2007-го. Неактуально.
6. vasya_228 - 27 Октября, 2014 - 20:03:22 - перейти к сообщению
Ну дык пахать то должно, капча проще некуда.
7. dcc0 - 27 Октября, 2014 - 21:35:42 - перейти к сообщению
Вы на алгоритм распознавания внимания обращали?
Т.е. вопрос: вы статью прочитали?
8. vasya_228 - 27 Октября, 2014 - 21:42:35 - перейти к сообщению
Да, читал. Алгоритм понял. Моя реализация не пашет.
9. caballero - 27 Октября, 2014 - 21:57:53 - перейти к сообщению
распознавание символов гораздо более сложная задача чем описано в статье.
10. dcc0 - 27 Октября, 2014 - 22:19:28 - перейти к сообщению
Цитата:
распознавание символов гораздо более сложная задача чем описано в статье.

Я о том же. Конвертнули изображение в ЧБ и давай измерять расположение пикселей.
Сомнительно, что можно получить приемлимый результат с учётом современных каптчей.
FineReader - и тот нормальный крупный текст на однородном фоне распознает с ошибками.
OCR для unix вообще ужасно работает.
(Добавление)
Уж лучше тогда, если unix машина, установить какой-нибудь ocr консольный, сохранять картинку, можно обесцвечивать какой-нибудь библиотекой и отдавать на распознание программе (например, cuneiform) через exec или system.
11. dcc0 - 27 Октября, 2014 - 22:37:25 - перейти к сообщению
Ну вот.
Эту картинку из статьи gocr распознал так:

(Добавление)
Хотя
gocr -i Image3.gif -o ff -C 0-9
Выдает
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. 16 1 39
  3.  

С пробелами.
Флаг -С - фильтр, т.е. остается только удалить пробелы регуляркой и можно отправлять
12. dcc0 - 27 Октября, 2014 - 22:50:02 - перейти к сообщению
С этой картинкой облом.
______________ __
13. vasya_228 - 28 Октября, 2014 - 13:16:40 - перейти к сообщению
То что вы предложили, я ознакомлен с этим. Прост надо было для конкретной простейшей капчи реализовать распознавание. Код же работает, шаблон неверный
14. Panoptik - 28 Октября, 2014 - 14:17:34 - перейти к сообщению
обесцвечивание не самая лучшая идея, ибо при правильном подборе цветов, получится однородно серый рисунок
15. dcc0 - 28 Октября, 2014 - 14:30:10 - перейти к сообщению
Цитата:
То что вы предложили, я ознакомлен с этим. Прост надо было для конкретной простейшей капчи реализовать распознавание. Код же работает, шаблон неверный


Ну так для простейшей каптчи (как пример для дальнейших поисков), например, для
такой
http://oldbk[dot]ru/registrar/register.php
Почти идеально

Цитата:

<?
shell_exec("wget http://oldbk[dot]ru/sec1.php -O sec1.php.gif");
$var_cap=shell_exec("gocr -i sec1.php.gif -C 0-9");
preg_match_all('/.*(\d).*/',$var_cap, $out);
echo $out[0][0];
?>

Только регулярочку подправить и curl чтобы сохранял/отправлял куку
(Добавление)
Данный шаблон в статье делался под совершенно конкретную каптчу.
Если у вас она хоть чуть-чуть другая, то придется писать новый шаблон.
(Причем готовые решения для простейших случаев есть, на хабре видел пару статей про нейронные сети)

Если просто ради интереса, я бы делал так, наверное. Может, неверно:
Есть цифры 0123456789
Отдельный шаблон отдельно для 147, помимо того принципа в статье, дополнительно проверку на уникальность графических характеристик и применение к каждой цифре, результат в процентоной вероятности. Т.е. нашли по тому шаблону 1, еще раз проверили, что это точно не четвека и не 7.
И т.д.

 

Powered by ExBB FM 1.0 RC1