Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2020
Репутация: 0
Здравствуй Кибор, столкнулся с такой задачей...
Проверка Капчи...
Дано 4 картинки, они перевернуты и имеют разный порядок...т.е.
1,2,3,4...2,3,1,4 и т.д. а так же могут иметь разный градус поворота.
Проблему решил таким методом...
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Можно ли упростить?, или ускорить процесс...
Так же есть Вторая проблема...
В определенной области бегают цифры в хаотичном порядке, за короткий промежуток времени на них надо нажать в нужном порядке.
Определение по динамике не работает, так как динамично абсолютно все...
По колличеству пикселей, так же не возможно...."Я так думаю" так как цвет одинаковый...А определение по картинке, просто напросто не успевает за движением капчи... Поиск движущегося объекта по наличию его цветов в Кибор
Движения чуть быстрее, могут двигаться, в любые стороны, картинка меньше, одного цвета, единственное что выделяется это Цифры...
Подскажи, как бороться с такой проблемой
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
Скрины или видео как всё это выглядит.
Sleemer
Отправлено: 30 Января, 2020 - 16:08:50
Прохожий
Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2020
Репутация: 0
Zireael пишет:
Скрины или видео как всё это выглядит.
Это пример капчи
Надо привести всегда к такому варианту
С этим с ясмог разобраться методом выше, но если есть вариант проще, был бы рад...получается немного лишних проверок и задержек...
Так же то самое видео с проблемой. Видео
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
Цитата:
Надо привести всегда к такому варианту
Перевернуть и поменять местами?
Картинки только такие или еще какие-то бывают?
На счёт двигающихся цифр.
1. findheapcolor искать скученность красных пикселей, так найдём примерную область где находится цифра.
2. readtext, распознать цифру, в настройках указать что цвет цифры белый, остальное фон. Если число нужное, то нажимаем на него и переходим снова к findheapcolor. Если число не то, значит распознаём число в следующей области.
Возможно быстрее будет если сделать скрин, использовать findheapcolor и readtext на скрине.
Sleemer
Отправлено: 30 Января, 2020 - 17:04:29
Прохожий
Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2020
Репутация: 0
Zireael пишет:
Перевернуть и поменять местами?
Только повернуть, поворачивает нажатием на картинку...исходя из моего метода, он каждый раз проверяет картинку, и делает клик, проверил каждую клик...повторил
и так пока не выставил поочередно все 4 картинки...Секунд 15-30...в целом не так уж и много...
Zireael пишет:
На счёт двигающихся цифр.
1. findheapcolor искать скученность красных пикселей, так найдём примерную область где находится цифра.
2. readtext, распознать цифру, в настройках указать что цвет цифры белый, остальное фон. Если число нужное, то нажимаем на него и переходим снова к findheapcolor. Если число не то, значит распознаём число в следующей области.
Возможно быстрее будет если сделать скрин, использовать findheapcolor и readtext на скрине.
Тут же куда сложнее сделали, если нажать не на ту цифру, то мы получаем ошибку...
Так же пока мы распознаем картинку, текст....они уже сдвигаются, и мы просто не успеваем прожать.....возможно мой метод был очень медленным....
Но даже тут....я не могу разобраться как нажимать на найденную букву... Изначально пытался по скученности цветов искать, но оказалось бестолково...
Zireael
Отправлено: 30 Января, 2020 - 17:57:37
Эксперт
Покинул форум
Сообщений всего: 4466
Дата рег-ции: Нояб. 2017
Репутация: 585
Цитата:
просто не успеваем прожать
Наведёт курсор на первую найденную цифру (проверял на видео):
CODE:
int r=20; // отклонение в цвете, от 0 до 255, много не ставить дольше искать будет
int color[1]= {11263} // красный цвет вокруг цифры
int kol[1]= {100}; // сколько минимум пикселей
int coord[4]={0, 0, 1920, 1080} // область поиска
int x[3], y[3];//Тут координаты найденные
Если в findheapcolor использовать привязку к окну и уменьшить область поиска, то будет быстрее искать. Распознавание цифры не займет много времени, если правильно указать параметры.
Вообще можно делать 2 поиска с небольшим интервалом, узнать направление движения цифры и делать клик со смещением с учётом направления движения. (Добавление)
int image[4][99][99]; // массив для 4 картинок размером 99*99 или меньше
string path = "C:\Image\"; // путь к картинкам
int coord[4] = {5, 145, 243, 206} // область поиска, левый верхний угол и правый нижний
int r=10; // отклонения в цвете от 0 до 255
int posX, posY; // переменные для координат картинок
int flag[4]={0, 0, 0, 0} // флаг что картинка найдена
int position[4] = {0, 0, 0, 0} // позиция, которую не требуется больше переворачивать
pause(1000); // пауза чтобы кибор успел свернуться
loop(4) // повторить 4 раза
{
for(int i=0; i<4; i++) // поиск картинок
{
if(flag[i] == 0) // если картинка ещё не была найдена
{
if(findimage(1, #image[i][0][0], -1, #posX, #posY, coord[0], coord[1], coord[2], coord[3], r,r,r,r,r,r, 100, 1, -1) == 1) // если найдена
{
int pos = (posX + imagewidth(#image[i][0][0]) / 2) / ((coord[2] - coord[0]) / 4); // считаем позицию картинки
position[pos] = 1; // больше не требуется переворачивать фигуру в этой позиции
flag[i] = 1; // флаг что картинку больше искать не нужно
}
}
}
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.