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

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

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

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

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


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


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


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

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);

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

По умолчанию во время загрузки базы 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:;
2. pashahous - 19 Октября, 2017 - 15:44:51 - перейти к сообщению
Супер, спасибо вам за старания.
3. 007wan - 21 Октября, 2017 - 15:56:50 - перейти к сообщению
Kibor , Ошибка в видео: время записи: 12:49, там буква "Ё", он не видит две точки сверху, а значит посчитает букву, как букву "Е" .
(Добавление)
А не всё) просто дальше не смотрел)
(Добавление)
А почему вы не можете прикрепить уже полностью обученную БД со всеми буквами, символами, а так же их видами итд.?
4. Kibor - 21 Октября, 2017 - 16:20:07 - перейти к сообщению
В начале темы есть ссылка на базу которую я демонстрировал.
Это инструмент, каждый сам себе может обучить по потребностям.
5. 007wan - 21 Октября, 2017 - 16:22:48 - перейти к сообщению
Kibor , Ой) не заметил)
(Добавление)
007wan , А он может интерпретировать найденные буквы так, как они нарисованы, т.е если большая буква, то выведет большую, а то всегда с маленькой и все буквы. было бы прекрасно добавить функцию, которая считает букву прописной или строчной и будет выводить так, как они нарисованы. Конечно и за это вам большая благодарность.
6. Kibor - 21 Октября, 2017 - 16:44:13 - перейти к сообщению
вы сначала попробуйте обучить.
Тогда увидите что от программы это не зависит. Если обучите на большую что это большая - будет большая. если обучите маленькую - маленькая. Если поставите знак вопроса на Ж , будет не ж а знак вопроса.

Но зачем делить на заглавные и строчные? Что бы потом программа путала "П" с "п"? и усложнять себе жизнь при анализе текста?
Это не FineReader что б красиво писать. Это для того что бы можно было понять что написано и делать выводы..
7. 007wan - 21 Октября, 2017 - 16:57:28 - перейти к сообщению
 Kibor пишет:
вы сначала попробуйте обучить.
Тогда увидите что от программы это не зависит. Если обучите на большую что это большая - будет большая. если обучите маленькую - маленькая. Если поставите знак вопроса на Ж , будет не ж а знак вопроса.

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

А ну понятно) ну попробую)
8. anton2017 - 21 Октября, 2017 - 20:43:08 - перейти к сообщению
Владимир, дайте обнову со снифером)(оч облегчит ботоводство) уж очень жду)! Закатив глазки
9. 007wan - 22 Октября, 2017 - 16:55:38 - перейти к сообщению
 anton2017 пишет:
Владимир, дайте обнову со снифером)(оч облегчит ботоводство) уж очень жду)! ::rolleyes24.gif::

что такое снифер?
10. konctantin777 - 22 Октября, 2017 - 17:24:15 - перейти к сообщению
 anton2017 пишет:
Владимир, дайте обнову со снифером)(оч облегчит ботоводство) уж очень жду)! Закатив глазки

Для этой программы бывает ???

Powered by ExBB FM 1.0 Final