Limbaugh |
Отправлено: 04 Мая, 2019 - 14:15:09
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Такое ощущение, как будто функция - int deltaX=46; // расстояние между стрелками , меняет не расстояние между стрелками , а зону поиска
(Добавление)
Zireael пишет: Весь код выложите.
Code (Отобразить)
CODE:int color_text_KIB_5[1]={16777215} // цвет текста
int coord[4]={750, 787, 1171, 839} // зона поиска
int deltaX=46; // расстояние между стрелками
int pause_=100; // пауза между поиском стрелок
loadsymbolbase("C:\Users\Limbaugh\Desktop\Arrows.sib"); // база для readtext
int script=0, i;
string text_KIB;
int posX=coord[0];
enabletimer(0);
loop()
{
textbkcolor (65280, 255);
textout(0, 300, 300, "Запуск/остановка скрипта Ctrl+Z", 1);
while(script)
{
textbkcolor (255, 65280);
textout(0, 300, 300, "Скрипт работает", 1);
mousemove(posX, coord[1]);
sleep(500);
mousemove(posX+deltaX, coord[3]);
sleep(500);
i=0;
while(posX < coord[2])
{
readtext(RU, #text_KIB, 8, 1, -1, -1, -1, #color_text_KIB_5[0], 1, 5, -1, posX, coord[1], posX+deltaX, coord[3], -1);
textout(1, 300, 320, "Распознанный текст: "+text_KIB, 1);
func(text_KIB, i); // вызов функции, которая проверяет корректность символов и нажимает клавиши
posX=posX+deltaX; i++;
sleep(pause_);
}
posX=coord[0];
sleep(10);
}
sleep(10);
}
function func(string s, int number)
{
new char c[size(s)+1];
strcpy(#c[0], s); // скопировать строку в массив
for(int i=0; i<size(s); i++) // для всех символов
{
if(symbolcorrect(i)>0.7) // если корректность символа больше 0.7
{
if(c[i]=='п'){textout(10, 300, 400, format(number)+" Вправо", 1); key(39); continue;}
if(c[i]=='л'){textout(10, 300, 400, format(number)+" Влево", 1); key(37); continue;}
if(c[i]=='н'){textout(10, 300, 400, format(number)+" Вниз", 1); key(40); continue;}
if(c[i]=='в'){textout(10, 300, 400, format(number)+" Вверх", 1); key(38); continue;}
}
}
delete c;
}
CREATE_TIMER(0, 30)
{
if(getkeystate(CONTROL) && getkeystate(90)) // Ctrl+Z включает/выключает
{
while(getkeystate(CONTROL) && getkeystate(90))sleep(10);
if(script)script=0;
else script=1;
}
} (Отредактировано автором: 04 Мая, 2019 - 14:18:59) |
|
|
Limbaugh |
Отправлено: 04 Мая, 2019 - 14:33:58
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Цитата: Перед распознаванием:
CODE:
mousemove(posX, coord[1]);
sleep(500);
mousemove(posX+deltaX, coord[3]);
sleep(500);
Т. е. перед readtext.
Вот что получилось, снял видео, что бы понятней было -
[vkvideo](для просмотра ссылки Вам необходимо авторизоваться) /vkvideo](Отредактировано автором: 04 Мая, 2019 - 14:37:10) |
|
|
Zireael |
Отправлено: 04 Мая, 2019 - 15:00:40
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Ну так видно же что стрелки появляются в разных местах, в зависимости от их количества. Из-за это они не распознаются.
Можно так попробовать:
code (Отобразить)CODE:int color_text_KIB_5[1]={16777215} // цвет текста
int coord[4]={750, 787, 1171, 839} // зона поиска
int deltaX=46; // расстояние между стрелками
int pause_=100; // пауза между поиском стрелок
loadsymbolbase("C:\Users\Limbaugh\Desktop\Arrows.sib"); // база для readtext
int script=0, i;
string text_KIB;
int posX=coord[0];
enabletimer(0);
loop()
{
textbkcolor (65280, 255);
textout(0, 300, 300, "Запуск/остановка скрипта Ctrl+Z", 1);
while(script)
{
textbkcolor (255, 65280);
textout(0, 300, 300, "Скрипт работает", 1);
// ждём когда появится первая стрелка
loop()
{
if(readtext(RU, #text_KIB, 8, 1, -1, -1, -1, #color_text_KIB_5[0], 1, 5, -1, coord[0], coord[1], coord[2], coord[3], -1))
{
if(symbolcorrect(0)>0.7)
{
posX=coord[0]+symbolxpos(0); break; // запоминаем её координаты
}
}
sleep(10);
}
////////
// дальше поиск относительно первой найденой стрелки
i=0;
while(posX < coord[2])
{
mousemove(posX, coord[1]);
sleep(pause_);
mousemove(posX+deltaX, coord[3]);
sleep(pause_);
readtext(RU, #text_KIB, 8, 1, -1, -1, -1, #color_text_KIB_5[0], 1, 5, -1, posX, coord[1], posX+deltaX, coord[3], -1);
textout(1, 300, 320, "Распознанный текст: "+text_KIB, 1);
func(text_KIB, i); // вызов функции, которая проверяет корректность символов и нажимает клавиши
posX=posX+deltaX; i++;
sleep(pause_);
}
posX=coord[0];
sleep(10);
}
sleep(10);
}
function func(string s, int number)
{
new char c[size(s)+1];
strcpy(#c[0], s); // скопировать строку в массив
for(int i=0; i<size(s); i++) // для всех символов
{
if(symbolcorrect(i)>0.7) // если корректность символа больше 0.7
{
if(c[i]=='п'){textout(10, 300, 400, format(number)+" Вправо", 1); key(39); continue;}
if(c[i]=='л'){textout(10, 300, 400, format(number)+" Влево", 1); key(37); continue;}
if(c[i]=='н'){textout(10, 300, 400, format(number)+" Вниз", 1); key(40); continue;}
if(c[i]=='в'){textout(10, 300, 400, format(number)+" Вверх", 1); key(38); continue;}
}
}
delete c;
}
CREATE_TIMER(0, 30)
{
if(getkeystate(CONTROL) && getkeystate(90)) // Ctrl+Z включает/выключает
{
while(getkeystate(CONTROL) && getkeystate(90))sleep(10);
if(script)script=0;
else script=1;
}
}
Вообще тестить на чём-то надо. |
|
|
Limbaugh |
Отправлено: 04 Мая, 2019 - 15:07:16
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Ну так видно же что стрелки появляются в разных местах, в зависимости от их количества. Из-за это они не распознаются.
Можно так попробовать:
code (Отобразить)CODE:int color_text_KIB_5[1]={16777215} // цвет текста
int coord[4]={750, 787, 1171, 839} // зона поиска
int deltaX=46; // расстояние между стрелками
int pause_=100; // пауза между поиском стрелок
loadsymbolbase("C:\Users\Limbaugh\Desktop\Arrows.sib"); // база для readtext
int script=0, i;
string text_KIB;
int posX=coord[0];
enabletimer(0);
loop()
{
textbkcolor (65280, 255);
textout(0, 300, 300, "Запуск/остановка скрипта Ctrl+Z", 1);
while(script)
{
textbkcolor (255, 65280);
textout(0, 300, 300, "Скрипт работает", 1);
// ждём когда появится первая стрелка
loop()
{
if(readtext(RU, #text_KIB, 8, 1, -1, -1, -1, #color_text_KIB_5[0], 1, 5, -1, coord[0], coord[1], coord[2], coord[3], -1))
{
if(symbolcorrect(0)>0.7)
{
posX=coord[0]+symbolxpos(0); break; // запоминаем её координаты
}
}
sleep(10);
}
////////
// дальше поиск относительно первой найденой стрелки
i=0;
while(posX < coord[2])
{
mousemove(posX, coord[1]);
sleep(pause_);
mousemove(posX+deltaX, coord[3]);
sleep(pause_);
readtext(RU, #text_KIB, 8, 1, -1, -1, -1, #color_text_KIB_5[0], 1, 5, -1, posX, coord[1], posX+deltaX, coord[3], -1);
textout(1, 300, 320, "Распознанный текст: "+text_KIB, 1);
func(text_KIB, i); // вызов функции, которая проверяет корректность символов и нажимает клавиши
posX=posX+deltaX; i++;
sleep(pause_);
}
posX=coord[0];
sleep(10);
}
sleep(10);
}
function func(string s, int number)
{
new char c[size(s)+1];
strcpy(#c[0], s); // скопировать строку в массив
for(int i=0; i<size(s); i++) // для всех символов
{
if(symbolcorrect(i)>0.7) // если корректность символа больше 0.7
{
if(c[i]=='п'){textout(10, 300, 400, format(number)+" Вправо", 1); key(39); continue;}
if(c[i]=='л'){textout(10, 300, 400, format(number)+" Влево", 1); key(37); continue;}
if(c[i]=='н'){textout(10, 300, 400, format(number)+" Вниз", 1); key(40); continue;}
if(c[i]=='в'){textout(10, 300, 400, format(number)+" Вверх", 1); key(38); continue;}
}
}
delete c;
}
CREATE_TIMER(0, 30)
{
if(getkeystate(CONTROL) && getkeystate(90)) // Ctrl+Z включает/выключает
{
while(getkeystate(CONTROL) && getkeystate(90))sleep(10);
if(script)script=0;
else script=1;
}
}
Вообще тестить на чём-то надо.
Слишком долго все находит, не успевает все нажать
Я могу акк дать, что бы ты потестил |
|
|
Zireael |
Отправлено: 04 Мая, 2019 - 15:43:35
|
Эксперт
Покинул форум
Сообщений всего: 4456
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Слишком долго все находит, не успевает все нажать
Ну так паузы уменьшите.
CODE:int pause_=100; // пауза между поиском стрелок
mousemove тоже можно убрать, он лишь для наглядности, где происходит поиск. |
|
|
Limbaugh |
Отправлено: 04 Мая, 2019 - 15:56:24
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Цитата: Слишком долго все находит, не успевает все нажать
Ну так паузы уменьшите.
CODE:int pause_=100; // пауза между поиском стрелок
mousemove тоже можно убрать, он лишь для наглядности, где происходит поиск.
Я уменьшил, все равно странно как то получается, не нажимает нормально
(Добавление)
Limbaugh пишет: Zireael пишет: Цитата: Слишком долго все находит, не успевает все нажать
Ну так паузы уменьшите.
CODE:int pause_=100; // пауза между поиском стрелок
mousemove тоже можно убрать, он лишь для наглядности, где происходит поиск.
Я уменьшил, все равно странно как то получается, не нажимает нормально
Поставил 50 |
|
|
Limbaugh |
Отправлено: 04 Мая, 2019 - 18:45:14
|
Участник
Покинул форум
Сообщений всего: 86
Дата рег-ции: Май 2019
Репутация: 0
|
Zireael пишет: Цитата: Слишком долго все находит, не успевает все нажать
Ну так паузы уменьшите.
CODE:int pause_=100; // пауза между поиском стрелок
mousemove тоже можно убрать, он лишь для наглядности, где происходит поиск.
А еще одна проблема в том, что есть стрелки только не с синим фоном , а с красным , тоже их 4 , но что бы их нажать, нужно нажимать обратное тому, что на картинке, то есть, если красная стрелка вверх, то нужно нажимать вниз, и такие иногда попадаются в финальных шагах |
|
|
|