Felix_I |
Отправлено: 09 Марта, 2020 - 22:23:58
|
Прохожий
Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2020
Откуда: Челябинск
Репутация: 0
|
Zireael пишет: Цитата: Есть какие нибудь идеи по-этому поводу?
Использовать распознавание текста readtext.
Потом уже не проблема посчитать результат и нажать куда надо.
Подскажи пожалуйста, как результат сложения распознать в строке ответов и чтобы она нажала на него?
Совсем новичок в этом, очень интересно разобраться. |
|
|
Zireael |
Отправлено: 10 Марта, 2020 - 09:32:35
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: что нужно прописать, чтобы программа это посчитала и вывела в виде другой переменной.
CODE:string Text="5 + 6 = ?"; // допустим это распознанный текст
messagebox(Text);
string num[2];
int summa;
if(regexsearch(2, #num[0], Text, "\d+") == 2) // поиск в строке 2х чисел
{
summa=formatsn(num[0])+formatsn(num[1]); // складываем числа
messagebox("Результат сложения: "+format(summa));
// дальнейшие действия
}
else messagebox("2 числа не найдены"); |
|
|
Felix_I |
Отправлено: 10 Марта, 2020 - 18:20:13
|
Прохожий
Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2020
Откуда: Челябинск
Репутация: 0
|
Zireael пишет: Для начала разберитесь с распознаванием текста, чтобы корректно распознавались цифры. Остальное потом, иначе просто запутаетесь в коде.
Мне осталось последнее действие, навести мышью на ответ и выполнить левый клик по нему, не могу допереть до этого. Остальное я все уже прописал, она считывает пример, считает его. После чего смотрит нижнюю строку, также распознает ее и переводит в текстовый формат.
На messagebox не обращайте внимания, пока так для себя.
CODE:string Text;
string answer;
int color_text_KIB_6[2];
color_text_KIB_6[0]=16579836; color_text_KIB_6[1]=16575447;
int color_text_KIB_5[1];
color_text_KIB_5[0]=16579836;
int color_fon_KIB_6[2];
color_fon_KIB_6[0]=2235931; color_fon_KIB_6[1]=15502097;
int color_fon_KIB_5[1];
color_fon_KIB_5[0]=2235931;
loadsymbolbase("C:\Users\User\Desktop\Kibor\BOTS\bCif.sib");
loadsymbolbase("C:\Users\User\Desktop\Kibor\BOTS\Cifres.sib");
win w_KIB;
int ex_KIB, ey_KIB, sum_KIB, x_KIB, yKIB;
start();
messagebox ("next blok");
goto m_KIB1;
m_KIB9: capcha:;
goto m_KIB7;
m_KIB3: ans:;
readtext(NUM | MARK, #answer, 8, 1, -1, -1, -1, #color_text_KIB_6[0], #color_fon_KIB_6[0], 126, -1, 676, 421, 924, 433, w_KIB);
messagebox(answer);
goto exit_KIB;
m_KIB6: int summa;
string num[2];
if(regexsearch(2, #num[0], Text, "\d+") == 2)
{
summa=formatsn(num[0])+formatsn(num[1]);
messagebox ("resul: "+format(summa));
}
goto ans;
goto exit_KIB;
m_KIB7: readtext(NUM | MARK, #Text, 8, 1, -1, -1, -1, #color_text_KIB_5[0], #color_fon_KIB_5[0], 37, -1, 752, 384, 813, 405, w_KIB);
goto m_KIB6;
m_KIB1: goto capcha;
exitKIB:;
function start()
{
pause(1000);
int x, y;
getmouse(x, y);
w_KIB=getwindow(0, x, y);
ex_KIB=w_KIB.widthclient; ey_KIB=w_KIB.heightclient;
}
(Добавление)
Не много сократил код, в визуальном редакторе все в отдельные функции проставил.
function select_answer() - эта функция будет наведение мышки на правильный ответ по координате
CODE:string Text, answer;
int color_text_KIB_6[2];
color_text_KIB_6[0]=16579836; color_text_KIB_6[1]=16575447;
int color_text_KIB_5[2];
color_text_KIB_5[0]=16579836; color_text_KIB_5[1]=16575447;
int color_fon_KIB_6[2];
color_fon_KIB_6[0]=2235931; color_fon_KIB_6[1]=15502097;
int color_fon_KIB_5[2];
color_fon_KIB_5[0]=2235931; color_fon_KIB_5[1]=15502097;
loadsymbolbase("C:\Users\User\Desktop\Kibor\BOTS\Cifres.sib");
win w_KIB;
int ex_KIB, ey_KIB, sum_KIB, x_KIB, yKIB;
start();
read_capcha();
read_answer();
selectanswer();
function start()
{
pause(1000);
int x, y;
getmouse(x, y);
w_KIB=getwindow(0, x, y);
ex_KIB=w_KIB.widthclient; ey_KIB=w_KIB.heightclient;
}
function read_capcha()
{
readtext(NUM | MARK, #Text, 8, 1, -1, -1, -1, #color_text_KIB_5[0], #color_fon_KIB_5[0], 126, -1, 748, 383, 813, 408, w_KIB);
int summa;
string num[2];
if(regexsearch(2, #num[0], Text, "\d+") == 2)
{
summa=formatsn(num[0])+formatsn(num[1]);
messagebox ("resul: "+format(summa));
}
}
function read_answer()
{
loadsymbolbase("C:\Users\User\Desktop\Kibor\BOTS\bCif.sib");
for (int n=0; n<5; n++)
{
readtext(NUM | MARK, #answer[n][0], 8, 1, -1, -1, -1, #color_text_KIB_6[0], #color_fon_KIB_6[0], 126, -1, 679, 421, 919, 434, w_KIB);
}
}
function select_answer()
{ (Отредактировано автором: 10 Марта, 2020 - 18:21:11) |
|
|
Zireael |
Отправлено: 11 Марта, 2020 - 00:15:57
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
code (Отобразить)CODE:int coord[4] = {236, 227, 379, 264} // экранные координаты примера, левый верхний угол и правый нижний
int coord2[4] = {118, 275, 501, 309} // экранные координаты ответов
string path = "D:\Kibor2\NewBase.sib"; // путь к базе символов
string Text, num[9];
int summa, Pos_start;
if(loadsymbolbase (path)<1){messagebox("База символов не найдена"); goto end;}
// распознавание примера
readtext (NUM | MARK, #Text, 8, 1, -1, -1, -1, -1, -1, 0, -1, coord[0], coord[1], coord[2], coord[3], -1);
messagebox ("Распознанный текст примера: "+Text);
if(regexsearch(2, #num[0], Text, "\d+") == 2) // поиск 2х чисел из примера
{
summa=formatsn(num[0])+formatsn(num[1]); // складываем числа
messagebox("Результат сложения: "+format(summa));
// распознавание ответов
readtext (NUM, #Text, 2, 1, -1, -1, -1, -1, -1, 0, -1, coord2[0], coord2[1], coord2[2], coord2[3], -1);
messagebox ("Распознанный текст ответов: "+Text);
int count=regexsearch(sizearray(num), #num[0], Text, "\d+"); // поиск чисел в строке ответа
messagebox("Количество ответов: "+format(count));
for(int i=0; i<count; i++) // цикл для всех найденных чисел
{
if(summa == formatsn(num[i])) // если результат сложения равен распознанному числу
{
regexsearch(1, #Text, Text, num[i]); // ищем это число в строке
regexstart(#Pos_start); // узнаём его позицию в строке
messagebox("Правильный ответ: "+format(i+1));
mousemove(symbolxpos(Pos_start) + coord2[0], symbolypos(Pos_start) + coord2[1]); // навести курсор на ответ
break;
}
}
if(i==count)messagebox("Ответ не найден");
}
else messagebox("2 числа в примере не найдены");
end:; |
|
|
|