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

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

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

> Описание: Прохождение капчи
Zireael
Отправлено: 20 Июля, 2019 - 02:37:37
Post Id



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


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




 Цитата:
Все эти вычисления

Это не актуально пока не будет кода, который корректно распознает цифры.
 Цитата:
1.Запускается первая функция, она ищет красные цифры.
Затем она считает количество найденных цифр

Зачем считать, цифр найдётся 9 или 1. Если 9, то просто проверить какой не хватает.
CODE:
string s="0 1 2 3 4 5 6 8 9"; // допустим это распознанный текст
messagebox(f(s)); // покажет какого числа не хватает

function f(string ss)
{
string temp;
for(int i=0; i<10; i++)
{
if(regexsearch(1, #temp, ss, format(i))==0)return i;
}
return -1;
}
 
 Top
Kinoman
Отправлено: 20 Июля, 2019 - 10:57:39
Post Id



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


Покинул форум
Сообщений всего: 20
Дата рег-ции: Июль 2019  
Репутация: 0




 Kibor пишет:
Это к этому боту? Или там другая задача?
CODE:
string a="5";
string b="2";
int c=formatsn(a)+formatsn(b);
messagebox (c);

А как работать с базами по распознаванию текста через визуальный редактор?
Ну имеется ввиду, как там прописать действие чтоб после распознования цифр
считало их кол-во?
(Добавление)
 Zireael пишет:
 Цитата:
Все эти вычисления

Это не актуально пока не будет кода, который корректно распознает цифры.
 Цитата:
1.Запускается первая функция, она ищет красные цифры.
Затем она считает количество найденных цифр

Зачем считать, цифр найдётся 9 или 1. Если 9, то просто проверить какой не хватает.
CODE:
string s="0 1 2 3 4 5 6 8 9"; // допустим это распознанный текст
messagebox(f(s)); // покажет какого числа не хватает

function f(string ss)
{
string temp;
for(int i=0; i<10; i++)
{
if(regexsearch(1, #temp, ss, format(i))==0)return i;
}
return -1;
}

Окей, а как нажать то её потом? Может я чего-то не понял...
 
 Top
Kibor
Отправлено: 20 Июля, 2019 - 11:06:19
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Это все в этом случае никак не применить. Тут нужен абсолютно другой подход. Попозже посморю по скринам с гугл диска.
 
 Top
Kibor
Отправлено: 20 Июля, 2019 - 13:20:09
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Пример как решить вопрос.
Все расчеты стоит засунуть в DLL для скорости работы.


CODE:
char Text[1000];
int k, n, n1;
int x1=53, y1=337, x2=1260, y2=643;

int Ch[4][1000];
int PosX[4][1000];
int PosY[4][1000];

int Y[4][1000];
int X[4][1000];
int S[4][1000];
int I[4][1000];
int R[4];
int T[4];
double cor=0.5;

int Color_Text1[1]={9999507};//серый белый
int Color_Text2[1]={7654007};//зеленый фиолетовый
int Color_Text3[1]={7916785};//желтый зеленый
int Color_Text4[1]={4013255};//красный желтый



loadsymbolbase ("C:\gta\base.sib");


pause(1000);
for (n=0; n<4; n++)R[n]=0;

//серый белый
k=readtext (NUM, #Text[0], 8, 3, -1, 20, 30, #Color_Text1[0], 1, 70, -1, x1, y1, x2, y2, -1);
for (n=0; n<k; n++)
{
if (symbolcorrect(n)>cor)
{
Y[0][R[0]]=symbolypos(n);
X[0][R[0]]=symbolxpos(n);
S[0][R[0]]=symbolheight(n);
I[0][R[0]]=formatsn(Text[n]);
R[0]++;
}
}


//зеленый фиолетовый
k=readtext (NUM, #Text[0], 8, 3, -1, 20, 30, #Color_Text2[0], 1, 70, -1, x1, y1, x2, y2, -1);
for (n=0; n<k; n++)
{
if (symbolcorrect(n)>cor)
{
Y[1][R[1]]=symbolypos(n);
X[1][R[1]]=symbolxpos(n);
S[1][R[1]]=symbolheight(n);
I[1][R[1]]=formatsn(Text[n]);
R[1]++;
}
}


//желтый зеленый
k=readtext (NUM, #Text[0], 8, 3, -1, 20, 30, #Color_Text3[0], 1, 70, -1, x1, y1, x2, y2, -1);
for (n=0; n<k; n++)
{
if (symbolcorrect(n)>cor)
{
Y[2][R[2]]=symbolypos(n);
X[2][R[2]]=symbolxpos(n);
S[2][R[2]]=symbolheight(n);
I[2][R[2]]=formatsn(Text[n]);
R[2]++;
}
}


//красный желтый
k=readtext (NUM, #Text[0], 8, 3, -1, 20, 30, #Color_Text4[0], 1, 70, -1, x1, y1, x2, y2, -1);
for (n=0; n<k; n++)
{
if (symbolcorrect(n)>cor)
{
Y[3][R[3]]=symbolypos(n);
X[3][R[3]]=symbolxpos(n);
S[3][R[3]]=symbolheight(n);
I[3][R[3]]=formatsn(Text[n]);
R[3]++;
}
}

//0 1 2 3 4 5

for (n=0; n<4; n++)T[n]=0;

for (n=0; n<R[0]; n++)
{
for (n1=0; n1<R[0]; n1++)
{
if (n!=n1)
{
if (Y[0][n]-Y[0][n1]<5 && Y[0][n1]-Y[0][n]<5 && S[0][n]-S[0][n1]<5 && S[0][n1]-S[0][n]<5)
{
if (n>0){if (I[0][n]<=I[0][n-1]) goto q;}
Ch[0][T[0]]=I[0][n];
PosX[0][T[0]]=X[0][n];
PosY[0][T[0]]=Y[0][n];
T[0]++;
q:;
}
}
}
}

for (n=0; n<R[1]; n++)
{
for (n1=0; n1<R[1]; n1++)
{
if (n!=n1)
{
if (Y[1][n]-Y[1][n1]<5 && Y[1][n1]-Y[1][n]<5 && S[1][n]-S[1][n1]<5 && S[1][n1]-S[1][n]<5)
{
if (n>0){if (I[1][n]<=I[1][n-1]) goto q1;}
Ch[1][T[1]]=I[1][n];
PosX[1][T[1]]=X[1][n];
PosY[1][T[1]]=Y[1][n];
T[1]++;
q1:;
}
}
}
}

for (n=0; n<R[2]; n++)
{
for (n1=0; n1<R[2]; n1++)
{
if (n!=n1)
{
if (Y[2][n]-Y[2][n1]<5 && Y[2][n1]-Y[2][n]<5 && S[2][n]-S[2][n1]<5 && S[2][n1]-S[2][n]<5)
{
if (n>0){if (I[2][n]<=I[2][n-1]) goto q2;}
Ch[2][T[2]]=I[2][n];
PosX[2][T[2]]=X[2][n];
PosY[2][T[2]]=Y[2][n];
T[2]++;
q2:;
}
}
}
}

for (n=0; n<R[3]; n++)
{
for (n1=0; n1<R[3]; n1++)
{
if (n!=n1)
{
if (Y[3][n]-Y[3][n1]<5 && Y[3][n1]-Y[3][n]<5 && S[3][n]-S[3][n1]<5 && S[3][n1]-S[3][n]<5)
{
if (n>0){if (I[3][n]<=I[3][n-1]) goto q3;}
Ch[3][T[3]]=I[3][n];
PosX[3][T[3]]=X[3][n];
PosY[3][T[3]]=Y[3][n];
T[3]++;
q3:;
}
}
}
}


resettextout(1);
if (T[0]==0 && T[1]==0 && T[2]==0 && T[3]==0)messagebox ("не определен");
else
{
if (T[0]>=T[1] && T[0]>=T[2] && T[0]>=T[3])
{
for (n=0; n<R[0]; n++)
{
textout(n, x1+PosX[0][n], y1+PosY[0][n], format(Ch[0][n]), 0);
}
messagebox ("серый белый");
}
if (T[1]>=T[0] && T[1]>=T[2] && T[1]>=T[3])
{
for (n=0; n<R[1]; n++)
{
textout(n, x1+PosX[1][n], y1+PosY[1][n], format(Ch[1][n]), 0);
}
messagebox ("зеленый фиолетовый");
}
if (T[2]>=T[0] && T[2]>=T[1] && T[2]>=T[3])
{
for (n=0; n<R[2]; n++)
{
textout(n, x1+PosX[2][n], y1+PosY[2][n], format(Ch[2][n]), 0);
}
messagebox ("желтый зеленый");
}
if (T[3]>=T[0] && T[3]>=T[2] && T[3]>=T[1])
{
for (n=0; n<R[3]; n++)
{
textout(n, x1+PosX[3][n], y1+PosY[3][n], format(Ch[3][n]), 0);
}
messagebox ("красный желтый");
}
}


 
 Top
Kinoman
Отправлено: 20 Июля, 2019 - 17:10:50
Post Id



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


Покинул форум
Сообщений всего: 20
Дата рег-ции: Июль 2019  
Репутация: 0




Спасибо!
(Добавление)
А ещё такой вопрос, может я просто не внимательно пересмотрел 2 раз.
Он же выводит сообщение в котором определён цвет, а он может выводить именно
цифру другого цвета?
 
 Top
Kibor
Отправлено: 20 Июля, 2019 - 19:33:57
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Может.
Когда вы рассчитаете позицию каждого символа исходя из полученной информации и с помощью к примеру findcolor определите в какой позиции (какой номер) находится цифра цветом который надо нажать.
 
 Top
Kinoman
Отправлено: 20 Июля, 2019 - 21:55:20
Post Id



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


Покинул форум
Сообщений всего: 20
Дата рег-ции: Июль 2019  
Репутация: 0




Прошу прощения за свою неграмотность, можно пример этого findcolor? Я только начал свой путь на программировании и пока не очень соображаю что и к чему...
 
 Top
Zireael
Отправлено: 20 Июля, 2019 - 22:18:48
Post Id



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


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




Камеру в игре можно повернуть так чтобы ничего лишнего не попадало? Например, зелёные и фиолетовые цифры совпадают с цветом лодки, что мягко говоря мешает.
 
 Top
Kinoman
Отправлено: 21 Июля, 2019 - 02:24:15
Post Id



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


Покинул форум
Сообщений всего: 20
Дата рег-ции: Июль 2019  
Репутация: 0




 Zireael пишет:
Камеру в игре можно повернуть так чтобы ничего лишнего не попадало? Например, зелёные и фиолетовые цифры совпадают с цветом лодки, что мягко говоря мешает.

Да, и лодка у меня уже другая совершенно. Камера крутится обычно от бездействия, это фиксится банальными рывками мышки ... ну если раз в 10 секунд двинул ничего шевелиться не будет.
 
 Top
Zireael
Отправлено: 21 Июля, 2019 - 09:26:08
Post Id



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


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




Алгоритм стырил с форума другого кликера.
Например, для красных и жёлтых цифр:
1. Ищем все красные и жёлтые пиксели.
2. Сравниваем минимальную координату по X, если красный меньше значит желтая цифра 0.
3. Сравниваем максимальную координату по X, если красный меньше значит желтая цифра 9.
4. Если пункты 2 и 3 не подошли, т. е. жёлтая цифра не 0 и не 9, то считаем среднее расстояние между цифрами.
Из минимальной координаты по X жёлтого цвета вычитаем минимальную координату по X красного и делим на среднее расстояние между цифрами. Получим позицию жёлтой цифры.

CODE:
int num;
int coord[4]={574, 380, 1813, 875} // координаты поиска, левый верхний угол и правый нижний
pause(1000);


//////////////
num=find(3882184, 6081000, 40, 35); // красный, жёлтый, разбежность для красного, разбежность для жёлтого
messagebox(num);
// тоже самое для других цветов, подобрать нужную разбежность


function find(int color1, int color2, int r1, int r2)
{
int x1[9999], y1[9999], x2[9999], y2[9999];
int count1=findcolor(sizearray(x1), #x1[0],#y1[0], coord[0], coord[1], coord[2], coord[3], color1, r1,r1,r1,r1,r1,r1, -1);
int count2=findcolor(sizearray(x2), #x2[0],#y2[0], coord[0], coord[1], coord[2], coord[3], color2, r2,r2,r2,r2,r2,r2, -1);
//messagebox(format(count1)+" "+format(count2)); // сколько найдено цветов
if(count1 && count2) // если найдены
{
if(x1[0]>x2[0])return 0;
if(x1[count1-1]<x2[count2-1])return 9;
int mid=(x1[count1-1]-x1[0]) / 9.5; // среднее расстояние между цифрами
return (x2[count2-1] - x1[0]) / mid;
}
return -1; // вернёт -1 если цвета не найдены
}

(Отредактировано автором: 21 Июля, 2019 - 09:26:29)

 
 Top
Страниц (4): « 1 [2] 3 4 »
Сейчас эту тему просматривают: 6 (гостей: 6, зарегистрированных: 0)
« Заказать скрипт »


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




Powered by