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

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

 Страниц (30): [1] 2 3 4 5 6 7 8 9 » В конец    

> Описание: Обучаемая функция распознавания текста. Инструмент обучения распознавания.
Kibor
Отправлено: 19 Октября, 2017 - 14:22:31
Post Id



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


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




Добавлена обучаемая функция распознавания текста readtext. Назначение - распознавание текста предоставленного в виде изображений (зона экрана, зона окна игры (программы), файл BMP JPG PNG) для дальнейшего перевода его в текст и / или числа.
Добавлен инструмент обучения. Найти его можно в вкладке графика, выделив нужную область с текстом и нажав правую кнопку мыши > Настройка распознавания текста.

Скачать демонстрационную базу
Скачать базу обучения
Обучалась в блокноте на стандартных шрифтах. Около 10.

Как правильно обучать базу


Видео работы функции и процесс обучения.


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


Бот для серфинга. Разгадывает простую капчу, работает в фоновом режиме
Создание бота для Music Wars в реальном времени. Сканирование и распознавание данных с экрана

Пример как исправить текст если вместо букв вставляются цифры, к примеру 0 или 3 вместо о или з
Или наоборот. Вместо цифр похожие буквы.(для просмотра ссылки Вам необходимо авторизоваться)
readtext - сканирует указанную область экрана, окна или двухмерного массива int куда загружено изображение, чистит изображение от шума, распознает текст и записывает его в string или char
loadsymbolbase - загружает обученную базу. Можно загружать несколько баз.
symbolxpos - возвращает позицию символа по X от начала зоны поиска. Левый угол
symbolypos - возвращает позицию символа по Y от начала зоны поиска. Нижний угол
symbolwidth - возвращает ширину символа
symbolheight - возвращает высоту символа
symbolcorrect - возвращает оценку корректности распознания символа. максимальная 1
symboltype - возвращает тип. 0 цифра, 1 русс, 2 англ, 3 знак препинания и т.д.
enablesymbolbase - подключает конкретно выбранную базу загруженную ранее loadsymbolbase
disablesymbolbase - отключает конкретно выбранную базу загруженную ранее loadsymbolbase


Парамтры:
readtext (RU, #ch[0][0], 4, 1, -1, 35, 35, -1, -1, 0, 50, 11, 150, 641, 483, -1);
1 - какие типы символов будем искать
NUM цифры
RU русские
EN английские
MARK знаки
Можно комбинировать
NUM | RU | EN | MARK
 Цитата:
readtext (NUM | RU | EN | MARK, #ch[0][0], 4, 1, -1, 35, 35, -1, -1, 0, 50, 11, 150, 641, 483, -1);


2 - куда будем сохранять текст

Можно в string
 Цитата:
string text;
readtext (RU, #text, 4, 1, -1, 35, 35, -1, -1, 0, 50, 11, 150, 641, 483, -1);


В этом случае многострочный текст будет разделен переводом строки.
 Цитата:
string text[5];
readtext (RU, #text[0], 4, 1, -1, 35, 35, -1, -1, 0, 50, 11, 150, 641, 483, -1);

В этом случае в text[0] будет первая строка, в text[1] вторая и т.д.

Можно в char
 Цитата:
char c;
readtext (RU, #c, 4, 1, -1, 35, 35, -1, -1, 0, 50, 11, 150, 641, 483, -1);

В этом случае в c будет один первый символ.

 Цитата:
char c[200];
readtext (RU, #c[0], 4, 1, -1, 35, 35, -1, -1, 0, 50, 11, 150, 641, 483, -1);

В этом случае в c будет весь текст. Строки будут разделены 0

 Цитата:
char c[5][200];
readtext (RU, #c[0][0], 4, 1, -1, 35, 35, -1, -1, 0, 50, 11, 150, 641, 483, -1);

В этом случае текст
кибор
бот

будет расположен так:
 Цитата:
c[0][0]='к', c[0][1]='и', c[0][2]='б', c[0][3]='о', c[0][4]='р', c[0][5]=0;
c[1][0]='б', c[1][1]='о', c[1][2]='т', c[1][3]=0;

Конец строки заполнится 0, поэтому надо выделять память больше чем текст.


3 - параметр фильтра текст / фон. узнать его можно в инструменте настройки и обучения.
4 - параметр сглаживания
5 - контрасность
6 - длина удаляемых горизонтальных линий
7 - длина удаляемых вертикальных линий
8 - указатель (если надо) на одномерный массив int в котором находятся цвета текста
-1 если не указан ни один цвет
1 если текстовым цветом считаются все кроме указанных фоновых.
9 - указатель (если надо) на одномерный массив int в котором находятся цвета фона
-1 если не указан ни один цвет
1 если фоновым цветом считаются все кроме указанных текстовых.

Если мы для текста или фона указали все цвета, необходимо указать определенный или определенные цвета для противоположного.
Не допускается указывать все цвета для текста и для фона одновременно

10 - допустимая разбежность этих цветов
 Цитата:
int col_text[2];
col_text[0]=236455;
col_text[1]=23445;
int col_fon[1];
col_fon[0]=654767567;
readtext (RU | MARK, #ch[0][0], 4, 1, -1, 35, 35, #col_text[0], #col_fon[0], 25, 50, 11, 150, 641, 483, -1);

Если не надо ставим -1

11 - величина обученности. Этот параметр указывает насколько мы доверяем программе делать решения по разделению символо, слиянию и

т.д. Указывать не более чем показывают оценки в инструменте настроек и обучения.

12 13 14 15 - зона сканирования. Функция требовательная. Не надо указывать большую зону с большим количеством символов. Только то чтонеобходимо распознать.

16 - указатель на окно, экран либо двухмерный массив int в котором находится изображение.

 Цитата:
readtext (RU | MARK, #ch[0][0], 4, 1, -1, 35, 35, #col_text[0], #col_fon[0], 25, 50, 11, 150, 641, 483, -1);//весь экран

 Цитата:
win w=window ("рф онлайн.jpg - Paint", "MSPaintApp", -1);
readtext (RU | MARK, #ch[0][0], 4, 1, -1, 35, 35, #col_text[0], #col_fon[0], 25, 50, 11, 150, 641, 483, w);//окно


 Цитата:
int Image_0[351][82];
loadimage (#Image_0[0][0], "C:\Image_0.bmp");
readtext (RU | MARK, #ch[0][0], 4, 1, -1, 35, 35, #col_text[0], #col_fon[0], 25, 50, 11, 150, 641, 483, #Image_0[0][0]);//изображение



Функция возвращает количество символов включая установленные пробелы и переносы строк.
-1 если зона сканирования вылазит за пределы изображения
-2 если символов больше чем предоставленно выделенной памяти для приема.
==============================


loadsymbolbase
Параметр
 Цитата:
loadsymbolbase ("C:\simvol\База.sib");

Возвращает количество символов базы
Загружать одну и ту же базу необходимо только Один раз!

symbolxpos
Параметы:
 Цитата:
symbolxpos(5);

Вернет позицию по X 5 распознанного символа. Распознается построчно с левого верхнего угла.

 Цитата:
symbolxpos(2, 7);

Вернет позицию по X 8 символа в 3 строке.


 Цитата:
symbolcorrect(0);

Вернет оценку корректности распознания первого символа от 1 и ниже.
Чем выше значение тем мы можем более доверять что символ распознан точно.

С остальными функциями аналогично


=====


loadsymbolbase позволяет загружать несколько баз распознавания текста.

loadsymbolbase("C:\basetext.sib");//0 база
loadsymbolbase("C:\mer.sib");//1 база
loadsymbolbase("C:\кум.sib");//2 база


Они все сливались в одну с которой работала функция распознавания текста readtext


Появились функции
enablesymbolbase - подключает конкретно выбранную базу загруженную ранее loadsymbolbase
disablesymbolbase - отключает конкретно выбранную базу загруженную ранее loadsymbolbase

Использовать данные функции можно динамически вовремя выполнения скрипта в любом месте.

Синтаксис:
enablesymbolbase(0);
disablesymbolbase(2);

Во время загрузки баз loadsymbolbase, они нумеруются по порядку загрузки от 0

Выше написанный код включает первую загруженную базу и отключает 3.

Так же возможно подключить или отключить все базы сразу

enablesymbolbase(ALL);
disablesymbolbase(ALL);

Подключать и отключать базы так же можно указав в enablesymbolbase или disablesymbolbase путь к загруженной базе:

Данный код загрузит три базы, но работать будет только с одной "C:\basetext1.sib"
CODE:
loadsymbolbase ("C:\basetext.sib");
loadsymbolbase ("C:\basetext1.sib");
loadsymbolbase ("C:\basetext2.sib");

/////////////////////

disablesymbolbase (ALL);
enablesymbolbase ("C:\basetext1.sib");

=========================

По умолчанию во время загрузки базы loadsymbolbase , она подключается автоматически и не требует вызова enablesymbolbase



Пример сканирования экрана и вывода текстовой информации в виде строки


CODE:
string text;
loadsymbolbase ("C:\simvol\TEST\База.sib");//Загружаем базу данных

loop()
{
readtext(RU | NUM | MARK, #text, 2, 1, -1, -1, -1, -1, -1, 0, -1, 77, 162, 248, 192, -1);
textout(0, 50, 50, text+" ", 0);
sleep(20);
}




Пример сканирования части экрана и поиска на нем нужных слов с указанием их позиций.
CODE:
char ch[20][100];
string t;
int n, u, u1, k, n1, x, y;

loadsymbolbase ("C:\simvol\TEST\База.sib");//Загружаем базу данных

sleep(500);
for (n=0; n<20; n++)ch[n][0]=0;
//Сканируем и распознаем текст. Записываем его в двухмерный массив char посточно
readtext(RU, #ch[0][0], 4, 1, -1, 35, 35, -1, -1, 0, 50, 11, 150, 641, 483, -1);
n1=0;


//Ищем в этом массиве слова КИБОР
for (n=0; n<20; n++)
{
t="";
k=size(#ch[n][0]);
for (u=0; u<k; u++)
{
if (ch[n][u]=='к')
{
x=symbolxpos(n, u)+11;
y=symbolypos(n, u)+153;
for (u1=u; u1<k; u1++)
{
if (ch[n][u1]!=' ')
{
t=t+ch[n][u1];
if (t=="кибор")
{
textout(n1, x, y, t, 0);
// mousemove(symbolxpos(n, u1)+11-10, symbolypos(n, u1)+150-2);
n1++;
//pause(1000);
t="";
u=u1;
goto d;
}
}
}
}
d:;
}
}

loop()sleep(100);;


Работу этих скриптов можно увидеть на видео.



Нажмите для увеличения



Нажмите для увеличения


Для получения кода настроенной функции readtext можно нажать на кнопку
ПОЛУЧИТЬ КОД READTEXT

Генерируется полный код настроенной функции readtext, loadsymbolbase, переменных и т.д.
Координаты зоны сканирования вставляются экранные и совпадают с реальными только при получение снимка в режиме ЭКРАН. Поэтому при работе в оконном режиме их надо указать самому, так же как и указатель на окно.

=========================================

Этот код найдет зоны текста где написаны имена игроков и распознает имена.
Зоны определяются относительно фрагмента таблички под текстом. Пояснение на скрине.

Скачать
Базу распознавания с первого поста http://kibor-bot.com/files/basetext.sib
Искомое изображение части таблички http://kibor-bot.com/files/readtext_fifa/tab.bmp

Пояснение:

Нажмите для увеличения


Сканируется это изображение и распознается на нем текст. Расположить его так, что бы был на экране весь.

Нажмите для увеличения





CODE:
int tab[50][50];
int x[10], y[10];
int r=50, p=100;

int col, ex, ey;

int smX=38, smY=55;
int razmX=93, razmY=12;

int zona_text_X1, zona_text_Y1;
int zona_text_X2, zona_text_Y2;

string Text;

if (loadimage (#tab[0][0], "C:\tab.bmp")<1){messagebox ("нет C:\tab.bmp"); goto er;}
if (loadsymbolbase ("C:\basetext.sib")<1){messagebox ("нетC:\basetext.sib"); goto er;}


getdisplay(col, ex, ey);

pause(1000);
int k=findimage(10, #tab[0][0], 0, #x[0], #y[0], 0, 0, ex, ey, r, r, r, r, r, r, p, 1, -1);


for (int n=0; n<k; n++)
{
zona_text_X1=x[n]-smX;
zona_text_Y1=y[n]-smY;
zona_text_X2=zona_text_X1+razmX;
zona_text_Y2=zona_text_Y1+razmY;

readtext (EN, #Text, 9, 1, 50, -1, -1, -1, -1, 0, 50, zona_text_X1, zona_text_Y1, zona_text_X2, zona_text_Y2, -1);
messagebox (Text);
pause(1000);
}

er:;
 
 Top
pashahous
Отправлено: 19 Октября, 2017 - 15:44:51
Post Id



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


Покинул форум
Сообщений всего: 24
Дата рег-ции: Февр. 2016  
Репутация: 2




Супер, спасибо вам за старания.
 
 Top
007wan
Отправлено: 21 Октября, 2017 - 15:56:50
Post Id



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


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




Kibor , Ошибка в видео: время записи: 12:49, там буква "Ё", он не видит две точки сверху, а значит посчитает букву, как букву "Е" .
(Добавление)
А не всё) просто дальше не смотрел)
(Добавление)
А почему вы не можете прикрепить уже полностью обученную БД со всеми буквами, символами, а так же их видами итд.?
 
 Top
Kibor
Отправлено: 21 Октября, 2017 - 16:20:07
Post Id



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


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




В начале темы есть ссылка на базу которую я демонстрировал.
Это инструмент, каждый сам себе может обучить по потребностям.
 
 Top
007wan
Отправлено: 21 Октября, 2017 - 16:22:48
Post Id



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


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




Kibor , Ой) не заметил)
(Добавление)
007wan , А он может интерпретировать найденные буквы так, как они нарисованы, т.е если большая буква, то выведет большую, а то всегда с маленькой и все буквы. было бы прекрасно добавить функцию, которая считает букву прописной или строчной и будет выводить так, как они нарисованы. Конечно и за это вам большая благодарность.
 
 Top
Kibor
Отправлено: 21 Октября, 2017 - 16:44:13
Post Id



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


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




вы сначала попробуйте обучить.
Тогда увидите что от программы это не зависит. Если обучите на большую что это большая - будет большая. если обучите маленькую - маленькая. Если поставите знак вопроса на Ж , будет не ж а знак вопроса.

Но зачем делить на заглавные и строчные? Что бы потом программа путала "П" с "п"? и усложнять себе жизнь при анализе текста?
Это не FineReader что б красиво писать. Это для того что бы можно было понять что написано и делать выводы..
 
 Top
007wan
Отправлено: 21 Октября, 2017 - 16:57:28
Post Id



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


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




 Kibor пишет:
вы сначала попробуйте обучить.
Тогда увидите что от программы это не зависит. Если обучите на большую что это большая - будет большая. если обучите маленькую - маленькая. Если поставите знак вопроса на Ж , будет не ж а знак вопроса.

Но зачем делить на заглавные и строчные? Что бы потом программа путала "П" с "п"? и усложнять себе жизнь при анализе текста?
Это не FineReader что б красиво писать. Это для того что бы можно было понять что написано и делать выводы..

А ну понятно) ну попробую)
 
 Top
anton2017
Отправлено: 21 Октября, 2017 - 20:43:08
Post Id



Пользователь
Наблюдатель


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




Владимир, дайте обнову со снифером)(оч облегчит ботоводство) уж очень жду)! Закатив глазки
 
 Top
007wan
Отправлено: 22 Октября, 2017 - 16:55:38
Post Id



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


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




 anton2017 пишет:
Владимир, дайте обнову со снифером)(оч облегчит ботоводство) уж очень жду)! ::rolleyes24.gif::

что такое снифер?
 
 Top
konctantin777
Отправлено: 22 Октября, 2017 - 17:24:15
Post Id



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


Покинул форум
Сообщений всего: 1134
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




 anton2017 пишет:
Владимир, дайте обнову со снифером)(оч облегчит ботоводство) уж очень жду)! Закатив глазки

Для этой программы бывает ???
 
 Top
Страниц (30): [1] 2 3 4 5 6 7 8 9 » В конец
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« О программе Кибор »


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




Powered by