Кибор » Кибор - Интегрированная среда разработки ботов » О программе Кибор » Версия 5.27 Функция распознавания текста.

Страниц (30): В начало « ... 8 9 10 11 [12] 13 14 15 16 ... » В конец
 

111. ivantu - 23 Октября, 2018 - 03:42:35 - перейти к сообщению
Теперь понятно, но простите за глупый вопрос, зачем тогда нужны symbolxpos(0) и symbolypos(0) если вручную записываем верхний левый угол, было бы круто еслиб в переменных уже были координаты относительные, а так получается двойная писанина Улыбка
112. Zireael - 23 Октября, 2018 - 04:18:17 - перейти к сообщению
 Цитата:
зачем тогда нужны symbolxpos(0) и symbolypos(0)

Если надо будет найти позицию слова в 3 строке?
 Цитата:
было бы круто еслиб в переменных уже были координаты относительные

Цикл в 3 строчки и будут те что надо.
113. ivantu - 23 Октября, 2018 - 05:01:42 - перейти к сообщению
а можно с примером, а то я начинающий...
114. Zireael - 23 Октября, 2018 - 05:58:08 - перейти к сообщению
 Цитата:
а можно с примером

CODE:
win wind=window ("BlueStacks Android PluginAndroid", -1, window ("BlueStacks", -1, -1));
string Text;
loadsymbolbase ("F:\Soft\Kibor\images\sw_base.sib" );

int i, x, sx=184, sy=231; // sx и sy начальные координаты

x=readtext (RU | MARK, #Text, 2, 1, -1, -1, -1, -1, -1, 0, -1, sx, sy, 299, 262, wind);
messagebox (Text);//тест

if(x>0)
{
x=size(Text); // длина текста
new int coordX[x]; // массив для координат X
new int coordY[x]; // массив для координат Y
for(i=0; i<x; i++)
{
coordX[i]=symbolxpos(i)+sx+symbolwidth(i)/2; // позиция по X + половина ширины символа
coordY[i]=symbolypos(i)+sy-symbolheight(i)/2; // позиция по Y - половина высоты символа
}

//mousemove(coordX[0], coordY[0], wind); // навести курсор в центр первой буквы
for(i=0; i<x; i++)
{
mousemove(coordX[i], coordY[i], wind); // навести курсор в центр каждой буквы
sleep(300);
}
}
115. ivantu - 23 Октября, 2018 - 06:02:30 - перейти к сообщению
Низкий поклон, спасибо большое!
116. Kibor - 06 Ноября, 2018 - 10:50:49 - перейти к сообщению
Как правильно фильтровать распознанный текст когда присутствует распознанный шум и перемешаны символы (левый правее правого).
Следует посмотреть, если хотите использовать распознавание в полном объеме.



Скрипт
CODE:
sleep(500);

string Text;
loadsymbolbase ("C:\бот_ряд\base - 5.sib");
readtext (NUM, #Text, 8, 1, -1, -1, -1, -1, -1, 0, -1, 498, 313, 827, 622, -1);
//messagebox (Text);//тест

char c_text[100];//В этот массив запишем текст весь
int aw=size(Text);//Узнаем кол символов

//messagebox (aw);//тест

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


char A[300];
int X[300];
int kml=0;
int tkml;
int Min;
int tx;
int kor=0;

for (int n=0; n<aw; n++)//Перебираем посимвольно
{
if (c_text[n]!=' ' && symbolcorrect(kor)>0.5 && symbolheight(kor)>25) //если не пробел и корректность более 0.5 и высота более 25
{
A[kml]=c_text[n];//Сохраним символ
X[kml]=symbolxpos(kor);//Сохраним его координаты по X
kml++;
}
kor++;
//if (formatci(c_text[n])==13) kor--;//Если это перевод строки, уменьшим счетчик символов (так как первод строки это 13 10 - 2 символа. А функции используют 1)
}

A[kml]=0;

//messagebox (format(#A[0]));//тест


string T="";

if (kml>0)
{
tkml=0;
ee:;
Min=99999;
for (n=0; n<kml; n++)
{
if (X[n]<Min){Min=X[n]; tx=n;}//Если позиция этого символа самая левая и он не был сохранен
}
T=T+A[tx];//Допишем в string
X[tx]=100000;//Что бы его больше не считать укажем что он находится далеко правее
tkml++;
if (tkml<kml) goto ee;
}

messagebox (T);//тест
117. Kibor - 20 Ноября, 2018 - 12:25:33 - перейти к сообщению
Обновил Кибор.
Теперь не надо отдельно подсчитывать индексы массивов при переводе строки в string 13 10
Теперь эти 2 символа перевода строки будут учитываться за 2 символа во всех функциях и будут совпадать.
118. Rekkon - 05 Декабря, 2018 - 13:58:08 - перейти к сообщению
Добрый вечер.
Уважаемый администратор, скажите есть ли в планах добавить в визуальный редактор функцию:
при распознавании текста, чтобы делался автоматический клик на этом слове?

Уже два дня мучаюсь, собрал все в единую кучу, но не могу решить данную проблему :(

1) Я обучил свою базу под игру (тесты в редакторе работают отлично!)
2) Создал в визуальном редакторе "блок кода"
3) Но ничего не происходит, хоть ошибок и не выдает.

Сам код:

string Text;
loadsymbolbase ("C:\text_base.sib");
readtext(NUM | RU, #Text, 8, -1, -1, -1, -1, -1, -1, 0, -1, 0, 0, 1920, 1080, -1);
if (Text=="кликнуть")
{
sendmouse(LEFT, symbolxpos(0)+rand(10, 15), symbolypos(0)-rand(5, 10), -1);
}


П.С. возможно это не важно, но сне нужно распознать текст в игре которая находится в эмуляторе андроид... но при этом у меня не получилось кликнуть и в обычном окне :(
119. Dantes3000 - 05 Декабря, 2018 - 14:19:54 - перейти к сообщению
 Rekkon пишет:
0, 0, 1920, 1080, -1);

Ты на всём экране ищешь слово "кликнуть"? Сомневаюсь, что в переменной Text будет только это слово)

проверь сначала что оно там находит
CODE:
string Text;
loadsymbolbase ("C:\text_base.sib");
readtext(NUM | RU, #Text, 8, -1, -1, -1, -1, -1, -1, 0, -1, 0, 0, 1920, 1080, -1);
messagebox(Text);
120. Rekkon - 05 Декабря, 2018 - 14:34:35 - перейти к сообщению
CODE:
string Text;
loadsymbolbase ("C:\text_base.sib");
readtext(NUM | RU, #Text, 8, -1, -1, -1, -1, -1, -1, 0, -1, 0, 0, 1920, 1080, -1);
messagebox(Text);
[/quote]



От всей души благодарю за подсказку (я не программист, по этому не верно растолковал функцию readtext)! Действительно нашлось на экране куча различной информации и всякой белеберды!

Если бы вы подсказали как из всего этого хаоса выбрать необходимое слово - я был бы очень признателен

Powered by ExBB FM 1.0 Final