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

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

1. Kostick - 01 Декабря, 2021 - 13:06:38 - перейти к сообщению
Я не умею программировать, но визуальный редактор спасает.
В игре Black Desert есть рыбалка. Нужно Нажать Space, чтобы закинуть удочку, потом дождать клева и снова нажать Space, чтобы подсечь. Появится полоса ловли. Когда она будет в синей зоне, нужно снова нажать Space. После появится капча: нужно ввести рандомную последовательность из клавиш W, A, S, D. Я смог дойти до капчи, т.е. все нажатия Space kibor выполняет, но дальше нужно прожать клавиши из капчи.
Например, на данном скриншоте надо ввести wwaads.
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Т.е. кибор распознает текст из определенной области [667, 493, 1227, 623].
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Т.к. кроме нужных символов есть лишние из-за стрелок под буквами того же цвета, нужно провести корректность распознавания. Окно распознавания текста выглядит так:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Я знаю, что в блок кода нужно примерно ввести вот это:
 Цитата:
char A[300];
int kml=0;
int nkml;
int kor=0;

for (int n=0; n<aw; n++) // Перебираем посимвольно
{
if (c_text[n]!=' ' && symbolcorrect(kor)>0.45) // если корректность более 0.45
{
A[kml]=c_text[n]; // Сохраним символ
kml++;
key(c_text[n]); // нажми распознанный символ, у которого корректность больше 0.45
pause(100); // пауза 100 мс
}
kor++;
}

A[kml]=0;

Его я использовал в прошлом боте год назад, но бот перестал работать, и за этот год визуальный редактор теперь не открывает файлы расширения ".vc", которое было год назад. Вот так выглядел код в визуальном редакторе тогда:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Таймер был нужен, чтобы прожимать свитки на бафы на клавиши 2 и 5, но его я пока не вставлял.
Теперь при добавлении этого кода выдает ошибку:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Не могу понять, как в блоке распознавания текста в новом визуальном редакторе называется массив после корректного распознавания и не перекликаются ли другие переменные этого отрывка с остальным кодом. Подскажите пожалуйста,
Прилагаю архив файлов визуального редактора, базу для распознавания текста, код для кибора и изображения, необходимые для блока распознавания изображения. Плюс код прошлогоднего бота.
Ссылка на архив
*Необходима расширенная версия для запуска кода, т.к. в коде задействуется функция распознавание текста*
2. konctantin777 - 01 Декабря, 2021 - 13:31:51 - перейти к сообщению
Если распознавать только буквы без знаков ?
3. Kostick - 01 Декабря, 2021 - 14:11:20 - перейти к сообщению
 konctantin777 пишет:
Если распознавать только буквы без знаков ?

Да, только английские буквы
4. Ilya001 - 01 Декабря, 2021 - 15:25:48 - перейти к сообщению
 Цитата:
for (int n=0; n<aw; n++)

А где этот переменный aw? Что в нём храниться?
5. Kostick - 01 Декабря, 2021 - 15:51:19 - перейти к сообщению
 Ilya001 пишет:
 Цитата:
for (int n=0; n<aw; n++)

А где этот переменный aw? Что в нём храниться?

Нашел в коде прошлого бота. Это переменная на количество символов. Я пропустил, сейчас попробую с ней вот так, спасибо.
CODE:
char c_Text_S[100]; // В этот массив запишем текст весь
int aw=size(Text_S); // Узнаем кол-во символов

strcpy(#c_Text_S[0], Text_S); // Скопируем текст с string в массив char

char A[300];
int kml=0;
int nkml;
int kor=0;

for (int n=0; n<aw; n++) // Перебираем посимвольно
{
if (c_Text_S[n]!=' ' && symbolcorrect(kor)>0.45) // если корректность более 0.45
{
A[kml]=c_Text_S[n]; // Сохраним символ
kml++;
key(c_Text_S[n]); // нажми распознанный символ, у которого корректность больше 0.45
pause(100); // пауза 100 мс
}
kor++;
}

A[kml]=0;

(Добавление)
 Kostick пишет:
 Ilya001 пишет:
 Цитата:
for (int n=0; n<aw; n++)

А где этот переменный aw? Что в нём храниться?

Нашел в коде прошлого бота. Это переменная на количество символов. Я пропустил, сейчас попробую с ней вот так, спасибо.
CODE:
char c_Text_S[100]; // В этот массив запишем текст весь
int aw=size(Text_S); // Узнаем кол-во символов

strcpy(#c_Text_S[0], Text_S); // Скопируем текст с string в массив char

char A[300];
int kml=0;
int nkml;
int kor=0;

for (int n=0; n<aw; n++) // Перебираем посимвольно
{
if (c_Text_S[n]!=' ' && symbolcorrect(kor)>0.45) // если корректность более 0.45
{
A[kml]=c_Text_S[n]; // Сохраним символ
kml++;
key(c_Text_S[n]); // нажми распознанный символ, у которого корректность больше 0.45
pause(100); // пауза 100 мс
}
kor++;
}

A[kml]=0;

Так, он начал писать, но не те клавиши. Как посмотреть, какие он нажимает клавиши, например, вывести сообщение на экран через команду messangebox? Просто что нужно туда вписать?
Когда вставляю
CODE:
messagebox(c_Text_S[n]);

выводит пустое сообщение.
6. Ilya001 - 02 Декабря, 2021 - 03:41:20 - перейти к сообщению
Вот такой код у меня работает:
CODE:
char C_Text[100];
string Text;

loadsymbolbase (*/Путь к вашей базе/*);

read(); // вызов функции OCR для распознавания текста
beep(700, 200); // просто сигнал об успешной работе
perebor(); // тут перебор


function read()
{
pause(1000);
readtext (RU, #Text, 13, 1, -1, -1, -1, -1, -1, 0, -1, 29, 316, 384, 352, -1);
//messagebox (Text);
//regexreplace(-1, #Text, Text, " ", ""); этого можно не использовать, оно пробелы убирает просто
strcpy(#C_Text[0], Text);
}

function perebor()
{
int aw=size(Text);
for (int n=0; n<aw; n++)
{
key(C_Text[n]);
//messagebox(C_Text[n]);
sleep(200);
}
}

(Добавление)
Для визуального редактора:
https://ibb.co/mqwKwhR
(Добавление)
[quote=Ilya001]Для визуального редактора:(для просмотра ссылки Вам необходимо авторизоваться) /quote]
(Добавление)
[youtube=Пример работы кода](для просмотра ссылки Вам необходимо авторизоваться) /youtube]
Это просто пример, если что-то не правильно работает, проверяйте хорошо ли распознаются тексты.
7. Kostick - 02 Декабря, 2021 - 05:50:47 - перейти к сообщению
[quote=Ilya001]Вот такой код у меня работает:
CODE:
char C_Text[100];
string Text;

loadsymbolbase (*/Путь к вашей базе/*);

read(); // вызов функции OCR для распознавания текста
beep(700, 200); // просто сигнал об успешной работе
perebor(); // тут перебор


function read()
{
pause(1000);
readtext (RU, #Text, 13, 1, -1, -1, -1, -1, -1, 0, -1, 29, 316, 384, 352, -1);
//messagebox (Text);
//regexreplace(-1, #Text, Text, " ", ""); этого можно не использовать, оно пробелы убирает просто
strcpy(#C_Text[0], Text);
}

function perebor()
{
int aw=size(Text);
for (int n=0; n<aw; n++)
{
key(C_Text[n]);
//messagebox(C_Text[n]);
sleep(200);
}
}

(Добавление)
Для визуального редактора:
https://ibb.co/mqwKwhR
(Добавление)
 Ilya001 пишет:
Для визуального редактора:(для просмотра ссылки Вам необходимо авторизоваться) /quote]
(Добавление)
[youtube=Пример работы кода](для просмотра ссылки Вам необходимо авторизоваться) /youtube]
Это просто пример, если что-то не правильно работает, проверяйте хорошо ли распознаются тексты.

Хорошо, это сработало. Но как добавить функцию symbolcorrect в этот цикл? Потому что кроме нужных символов имеются просто точки
Что пишет:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Что видит:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
(Добавление)
[quote=Kostick]
 Ilya001 пишет:
Вот такой код у меня работает:
CODE:
char C_Text[100];
string Text;

loadsymbolbase (*/Путь к вашей базе/*);

read(); // вызов функции OCR для распознавания текста
beep(700, 200); // просто сигнал об успешной работе
perebor(); // тут перебор


function read()
{
pause(1000);
readtext (RU, #Text, 13, 1, -1, -1, -1, -1, -1, 0, -1, 29, 316, 384, 352, -1);
//messagebox (Text);
//regexreplace(-1, #Text, Text, " ", ""); этого можно не использовать, оно пробелы убирает просто
strcpy(#C_Text[0], Text);
}

function perebor()
{
int aw=size(Text);
for (int n=0; n<aw; n++)
{
key(C_Text[n]);
//messagebox(C_Text[n]);
sleep(200);
}
}

(Добавление)
Для визуального редактора:
https://ibb.co/mqwKwhR
(Добавление)
 Ilya001 пишет:
Для визуального редактора:(для просмотра ссылки Вам необходимо авторизоваться) /quote]
(Добавление)
[youtube=Пример работы кода](для просмотра ссылки Вам необходимо авторизоваться) /youtube]
Это просто пример, если что-то не правильно работает, проверяйте хорошо ли распознаются тексты.

Хорошо, это сработало. Но как добавить функцию symbolcorrect в этот цикл? Потому что кроме нужных символов имеются просто точки
Что пишет:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Что видит:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]

А, кажется получилось. Сделал так:
CODE:
char c_Text[100];
strcpy(#c_Text[0], Text_S);

int aw=size(Text_S);
int kor=0;

for (int n=0; n<aw; n++)
{
if (c_Text[n]!=' ' && symbolcorrect(kor)>0.45)
{
key(c_Text[n]);
sleep(200);
}
kor++
}
8. Ilya001 - 02 Декабря, 2021 - 06:39:53 - перейти к сообщению
[quote=Kostick](для просмотра ссылки Вам необходимо авторизоваться) /quote]от лишнего шума можно избавиться и вот так: youtube.com/watch?v=jgmTeEpcIVg
9. Kostick - 02 Декабря, 2021 - 07:29:13 - перейти к сообщению
[quote=Ilya001]
 Kostick пишет:
(для просмотра ссылки Вам необходимо авторизоваться) /quote]от лишнего шума можно избавиться и вот так: youtube.com/watch?v=jgmTeEpcIVg

К сожалению не получится. Уже пробовал. Тут несколько факторов:
Во-первых: Окно с капчей почему-то всегда появляется с небольшим сдвигом в рандомном направлении, поэтому когда забивается такая маленькая область распознавания, то буквы бывают обрезанными;
Получается вот так:
Когда я выбираю такую область:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
То следующая капча уже такая:
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
Во-вторых: цвет букв тоже рандомный от серого до ярко-красного, отчего придется забивать каждый цвет отдельно (что я уже пробовал). Экспериментировал с разбежностью, но все равно вышло чуть больше 40 цветов, а потом я не помню, или я забил, или кибор стал виснуть.
10. Ilya001 - 02 Декабря, 2021 - 07:36:57 - перейти к сообщению
 Kostick пишет:
То следующая капча уже такая:

тогда вам нужно сделать поиск какой то части этого капчи(через findimage к примеру), а потом относительно него распознавать текст, тогда не будет такого

Powered by ExBB FM 1.0 Final