Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Как найти круг или квадрат?

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

1. Arimor - 16 Декабря, 2020 - 15:55:32 - перейти к сообщению
Как найти круг, квадрат или любую другую геометрическую фигуру, неважно какого он цвета? Не обязательно с помощью распознавания текста, но мне кажется через него как то возможно.
2. Dantes3000 - 17 Декабря, 2020 - 01:52:41 - перейти к сообщению
Arimor , если распознается контур стабильно, то каждую фигуру можно обучить на свою букву и тогда будет ясно где-какая фигура. Круг - к, Р - квадРат...
3. Arimor - 17 Декабря, 2020 - 04:45:10 - перейти к сообщению
Dantes3000 , я в эту сторону и думаю, но как найти этот символ на экране монитора? Фигуры появляются рандомно на экране и каждый раз разный цвет.
(Добавление)
Единственное, что не меняется так это то, что круг это круг а квадрат это квадрат. Даже размер одинаковый.
(Добавление)
может можно как то обесцветить весь экран сделав его черно белым и сделать сопоставление форм. Чем больше думаю, тем больше кажется не реальной задача.
4. Dantes3000 - 17 Декабря, 2020 - 06:27:11 - перейти к сообщению
Arimor , ну для начала не мешало бы нам показать как это всё выглядит.
5. Arimor - 17 Декабря, 2020 - 10:18:52 - перейти к сообщению
Dantes3000 , Вот объект, фон любой может быть, зацепиться не за что. Да находит по цвету, но пока цвет перебирается, объект исчезает.
Смог максимально сократить скорость поиск, но этого недостаточно. Т.к. он может появится на пол секунды в любом месте экрана.
CODE:
int kol[10]={1}; // количество
int x[100], y[100]; // координаты
int r=0; // разбежность
int color[10];
color[1]=65382;
color[2]=16711680;
color[3]=6723840;
color[4]=10066431;
color[5]=3342540;

loop() {
if(klik(1)==1){sleep(rand(10,300));};
if(klik(2)==1){sleep(rand(10,300));};
if(klik(3)==1){sleep(rand(10,300));};
if(klik(4)==1){sleep(rand(10,300));};
if(klik(5)==1){sleep(rand(10,300));};
}
function klik(int num) {
int k=findheapcolor(1, #color[num], #kol[0], 1, 1, #x[0], #y[0], 100, 100, 0, 0, 0, 0, 800, 600, r, r, r, r, r, r, -1);

textbkcolor (255, 65280);
for(int i=0; i<k; i++)
{
beep(300,300);
textout(i, x[i]+100, y[i], format(i)+ format(num), 1);
sleep(rand(20,30));
mouse(LEFT, x[i], y[i]);
sleep(64);
return 1;
}
return 0;
}



Нажмите для увеличения
6. Zireael - 17 Декабря, 2020 - 10:40:55 - перейти к сообщению
 Цитата:
if(klik(1)==1){sleep(rand(10,300));};

; в конце не нужна.
 Цитата:
color[1]=65382;

Индексация начинается с 0, а не 1.
 Цитата:
int k=findheapcolor(1, #color[num], #kol[0], 1, 1

Нет смысла 5 раз вызывать функцию. Можно вызвать 1 раз и искать все цвета, указав что достаточно одного для идентификации объекта.
 Цитата:
int k=findheapcolor(1, #color[num], #kol[0], 5, 1
7. Arimor - 17 Декабря, 2020 - 10:47:28 - перейти к сообщению
 Zireael пишет:
Нет смысла 5 раз вызывать функцию. Можно вызвать 1 раз и искать все цвета, указав что достаточно одного для идентификации объекта.

Спасибо за указание на ошибки. Вначале так и делал, вызывал 1 функцию, но я начал экспериментировать и вызывая их по отдельности он стал находить быстрее раза в два. С чем это связано понять не могу.

Powered by ExBB FM 1.0 Final