Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

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

> Без описания
AlexDp
Отправлено: 30 Декабря, 2020 - 03:24:21
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 18
Дата рег-ции: Сент. 2020  
Репутация: 0




Добрый день. Работаю с эмулятором Nox. Воспроизвел пример данный Kibor с перещелкиванием смайликов ( поиска нескольких изображений и кликаний по ним ) но вместо кликов прикрутил распознавание текста. Появилась проблема .
Вот код с визуального редактора :
CODE:
string text_KIB;
loadsymbolbase("C:\Áîò Ëîðäà\Ïîèñê\basetext.sib");
int k, x[50], y[50], n=0;
win w_KIB;
int ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;
int sx_KIB, sy_KIB;
int Image_0_KIB[14][16];

start_();

if (findimage_(#Image_0_KIB[0][0], 0, 0, 0, 13, 20, 20, -1, 0, 0, 0, -1, -1, -1, 30, 70, 50, 0, 0, ex_KIB, ey_KIB, #k, #x[n], #y[n])>0) goto m_KIB2;
else goto m_KIB5;
m_KIB2: readtext(NUM, #text_KIB, 8, 1, -1, -1, -1, -1, -1, 0, -1, sx_KIB+x[n], sy_KIB+y[n], sx_KIB+x[n]+14, sy_KIB+y[n]+16, -1);
pause(2000);

messagebox (text_KIB);

n++;
if (n<k) goto m_KIB2;
else goto m_KIB5;
m_KIB5:




function start_()
{
load_image_();
pause(1000);
int x, y;
getmouse(x, y);
w_KIB=getwindow(1, x, y);
ex_KIB=w_KIB.widthclient; ey_KIB=w_KIB.heightclient;
sx_KIB=w_KIB.leftclient; sy_KIB=w_KIB.topclient;
}


function findimage_(int #Image, int t, int p1, int p2, int m, int xm, int ym, int mov_m, int mov_x, int mov_y, int p3, int wait, int cycle, int fon, int r, int p, int k, int xs, int ys, int xf, int yf, int#sum, int#x, int#y)
{
xs=xs+sx_KIB; ys=ys+sy_KIB; xf=xf+sx_KIB; yf=yf+sy_KIB;
int timKIB, sumKIB, xKIB, yKIB, tx, ty, tcycle=0;
sty: pause(p1);
sumKIB=0;
if (t!=0) timKIB=gettime();
a: if (r==0 && p==100){sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, -1); if (sum>0) goto e;}
else {sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, -1); if (sum>0) goto e;}
if (t==0) return 0;
if (gettime()-timKIB<t){sleep(20); goto a;}
return 0;
e: sumKIB=sum; xKIB=x[0]; yKIB=y[0];
pause(p2);
if (m==1){mouse(LEFT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==2){mouse(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==3){mouse(RIGHT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==4){mousedown(LEFT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==5){mousedown(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==6){mousedown(RIGHT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==7){mouseup(LEFT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==8){mouseup(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==9){mouseup(RIGHT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==10){mousedbl(LEFT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==11){mousedbl(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==12){mousedbl(RIGHT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==13)mousemove(xs+xKIB+xm, ys+yKIB+ym);
hy: if (mov_m==1)mousemove(mov_x, mov_y);
if (m>0 && m<14)pause(p3);
if (wait!=-1)
{
for (int ttim=gettime(); gettime()-ttim<wait; sleep(20))
{
if (r==0 && p==100){if (findimage(1, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, -1)==0)return sumKIB;}
else {if (findimage(1, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, -1)==0)return sumKIB;}
}
if (tcycle<cycle){tcycle++; goto sty;}
return 0;
}
return sumKIB;
}




function load_image_()
{
loadimage (#Image_0_KIB[0][0], "C:\Áîò Ëîðäà\Ïîèñê\ìåòêà ñèíÿÿ.bmp");
}



Все работает . Находит картинку и распознает текст с выводом в мессагебокс .Но если изменить параметр начала зоны поиска картинки (например вместо x=0 на x=5 ) то картинки как и прежде находит, а вот распознание текста уже работает не коректно .
Подскажите в чем ошибка .

Речь веду об изменении во в этой строке :
CODE:
if (findimage_(#Image_0_KIB[0][0], 0, 0, 0, 13, 20, 20, -1, 0, 0, 0, -1, -1, -1, 30, 70, 50, 0, 5, ex_KIB, ey_KIB, #k, #x[n], #y[n])>0) goto m_KIB2;


при чем изменение влияет именно начала зоны поиска . Если изменить конец то все работает . Но стоит изменить начало зоны и распознавания текста работать коректно перестает .
 
 Top
Zireael
Отправлено: 30 Декабря, 2020 - 03:48:31
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
в чем ошибка .

Нужно прибавлять координаты начала зоны поиска. Добавьте mousemove и увидите где будет распознавание.
К примеру, картинка находится в координатах 200 100. Если искать от начальных координат 0 0, то findimage вернёт координаты 200 100. Но, если начало зоны поиска будет, допустим, от координат 70 40, то вернёт координаты 130 60. И чтобы навести курсор надо к полученным координатам 130 прибавить 70 и к 40 прибавить 60.
Т. е. если начало зоны поиска по X = 5, то sx_KIB+x[n] + 5 и sx_KIB+x[n]+14 + 5. Тоже самое для Y.
 
 Top
stasrus
Отправлено: 30 Декабря, 2020 - 07:58:46
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 62
Дата рег-ции: Сент. 2020  
Репутация: -1




Вообще странно что так сделано, я постоянно путаюсь в своих проектах с координатами. Либо я просто логику не могу понять.
Почему нельзя считать от верхнего левого угла всегда и во всех случаях.
 
 Top
Arimor
Отправлено: 30 Декабря, 2020 - 15:04:27
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 125
Дата рег-ции: Сент. 2020  
Репутация: 1




stasrus ,
 stasrus пишет:
Почему нельзя считать от верхнего левого угла всегда и во всех случаях.

Экономия ресурсов, можно выделить ту область где искать объект, таким образом он найдется быстрее, нежели искать его по всему экрану особенно в той области где его никогда не будет. Искать в окнах, тогда вы можете перемещать окно по всему экрану и даже сворачивать его, бот всё равно будет его находить и работать в нем, что несомненно удобно. Да и никто не запрещает искать по всему экрану.
 
 Top
stasrus
Отправлено: 30 Декабря, 2020 - 15:19:28
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 62
Дата рег-ции: Сент. 2020  
Репутация: -1




вопрос не стоит где искать обьект. вопрос в том что 0 координаты считать всегда с левого верхнего края. чтоб не было добавлений.
 
 Top
Arimor
Отправлено: 30 Декабря, 2020 - 15:53:58
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 125
Дата рег-ции: Сент. 2020  
Репутация: 1




 stasrus пишет:
вопрос в том что 0 координаты считать всегда с левого верхнего края. чтоб не было добавлений
Если искать с 0.0, то пока он дойдет до 3800, 2160, пройдет слишком много времени чтоб найти нужный пиксель. Это не рациональное использование ресурсов и излишнее увеличение времени. Мы же не просто так отступ делаем, если его делаем значит указали область поиска нужную. А если не делаем значит ищем во всем окне.
 Цитата:
findimage(-1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 800, 600, -1);

Тут поиск во всем окне, значит отступы делать не надо

 Цитата:
findimage(-1, #Image_0[0][0], 0, #PosX_0[0], #PosY_0[0], 132, 445, 800, 600, -1);

а тут мы ищем не от начала координат. Значит нужно сделать смещение на 132, 445 соответственно.
 
 Top
stasrus
Отправлено: 30 Декабря, 2020 - 18:55:28
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 62
Дата рег-ции: Сент. 2020  
Репутация: -1




Arimor , Вы суть вопроса не улавливаете.
Попытаюсь обьяснить

Вот кусок из моего проекта:
CODE:
findcolor(1, #x[0],#y[0], 216, 86, 1550, 626, 4012381,r,r,r,r,r,r, w);

Ищет пиксель конкретного цвета по координатам от 216, 86 до 1550, 626
и нашло допустим 500.500*.
так вот чтобы нажать мышкой на это нужно сделать так
CODE:
mouse(LEFT,x[0]+216,y[0]+86);

К чему эта путаница, почему не сделать сразу
CODE:
mouse(LEFT,x[0],y[0])
координаты то уже известны и они в любом случае 500,500.
Приходится постоянно держать это в голове

* По факту будут другие так как начинает отчет координат не с левого верхнего края. поэтому и предложил
 Цитата:
Почему нельзя считать от верхнего левого угла всегда и во всех случаях.

пусть начинает искать с 218.86. но все координаты привязать к левому краю. жить то станет проще

(Отредактировано автором: 30 Декабря, 2020 - 19:12:43)

 
 Top
Zireael
Отправлено: 30 Декабря, 2020 - 19:31:38
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
пусть начинает искать с 218.86. но все координаты привязать к левому краю.

Ничто не мешает вызвать свою функцию поиска, в которой будут пересчитываться координаты.
 
 Top
Arimor
Отправлено: 30 Декабря, 2020 - 23:07:27
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 125
Дата рег-ции: Сент. 2020  
Репутация: 1




 stasrus пишет:
пусть начинает искать с 218.86. но все координаты привязать к левому краю. жить то станет проще
Всё понял)) mouse (); это отдельная функция она не связана с поиском картинки. Можно создать function mousenew(){}; и передавать в неё нужные значения с учетом.

CODE:
int cord1=216,cord2=86;
int x,y;
findcolor(1, #x[0],#y[0], cord1, cord2, 1550, 626, 4012381,r,r,r,r,r,r, w);

mousenew(x,y,cord1, cord2);

function mousenew(int x1, int y1, int x2, int y) {
mouse(LEFT,x1+y1,x2+y2);
}


как то так)
 
 Top
AlexDp
Отправлено: 31 Декабря, 2020 - 09:55:46
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 18
Дата рег-ции: Сент. 2020  
Репутация: 0




Всем спасибо . Разобрался . Переделал . Поиск сейчас сделал от другой картинки через массив . Начало зоны распознания стало выглядеть примерно так
xn1 , yn1 ( это точка распознания верхнего угла первой картинки,ее же сделал началом зоны поиска второй картинки. )
x, y ( это координаты левого верхнего угла второй картинки в ограниченной зоне поиска )
xn1+x , yn1+y+14 ( вот примерно так стало выглядеть зона распознавания для текста на картинке .
Всем огромное спасибо за подсказки . Радость

(Отредактировано автором: 31 Декабря, 2020 - 10:04:19)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by