Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
Добавлена обучаемая функция распознавания текста readtext. Назначение - распознавание текста предоставленного в виде изображений (зона экрана, зона окна игры (программы), файл BMP JPG PNG) для дальнейшего перевода его в текст и / или числа.
Добавлен инструмент обучения. Найти его можно в вкладке графика, выделив нужную область с текстом и нажав правую кнопку мыши > Настройка распознавания текста.
Скачать демонстрационную базу Скачать базу обучения
Обучалась в блокноте на стандартных шрифтах. Около 10.
Как правильно обучать базу
Видео работы функции и процесс обучения.
На этом видео показано использование оптического распознавания текста при создание бота для игры в визуальном редакторе.
Пример как исправить текст если вместо букв вставляются цифры, к примеру 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
Конец строки заполнится 0, поэтому надо выделять память больше чем текст.
3 - параметр фильтра текст / фон. узнать его можно в инструменте настройки и обучения.
4 - параметр сглаживания
5 - контрасность
6 - длина удаляемых горизонтальных линий
7 - длина удаляемых вертикальных линий
8 - указатель (если надо) на одномерный массив int в котором находятся цвета текста
-1 если не указан ни один цвет
1 если текстовым цветом считаются все кроме указанных фоновых.
9 - указатель (если надо) на одномерный массив int в котором находятся цвета фона
-1 если не указан ни один цвет
1 если фоновым цветом считаются все кроме указанных текстовых.
Если мы для текста или фона указали все цвета, необходимо указать определенный или определенные цвета для противоположного.
Не допускается указывать все цвета для текста и для фона одновременно
11 - величина обученности. Этот параметр указывает насколько мы доверяем программе делать решения по разделению символо, слиянию и
т.д. Указывать не более чем показывают оценки в инструменте настроек и обучения.
12 13 14 15 - зона сканирования. Функция требовательная. Не надо указывать большую зону с большим количеством символов. Только то чтонеобходимо распознать.
16 - указатель на окно, экран либо двухмерный массив int в котором находится изображение.
Функция возвращает количество символов включая установленные пробелы и переносы строк.
-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
Использовать данные функции можно динамически вовремя выполнения скрипта в любом месте.
Пример сканирования части экрана и поиска на нем нужных слов с указанием их позиций.
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, переменных и т.д.
Координаты зоны сканирования вставляются экранные и совпадают с реальными только при получение снимка в режиме ЭКРАН. Поэтому при работе в оконном режиме их надо указать самому, так же как и указатель на окно.
=========================================
Этот код найдет зоны текста где написаны имена игроков и распознает имена.
Зоны определяются относительно фрагмента таблички под текстом. Пояснение на скрине.
Покинул форум
Сообщений всего: 24
Дата рег-ции: Февр. 2016
Репутация: 2
Супер, спасибо вам за старания.
007wan
Отправлено: 21 Октября, 2017 - 15:56:50
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
Kibor , Ошибка в видео: время записи: 12:49, там буква "Ё", он не видит две точки сверху, а значит посчитает букву, как букву "Е" . (Добавление)
А не всё) просто дальше не смотрел) (Добавление)
А почему вы не можете прикрепить уже полностью обученную БД со всеми буквами, символами, а так же их видами итд.?
Kibor
Отправлено: 21 Октября, 2017 - 16:20:07
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
В начале темы есть ссылка на базу которую я демонстрировал.
Это инструмент, каждый сам себе может обучить по потребностям.
007wan
Отправлено: 21 Октября, 2017 - 16:22:48
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
Kibor , Ой) не заметил) (Добавление) 007wan , А он может интерпретировать найденные буквы так, как они нарисованы, т.е если большая буква, то выведет большую, а то всегда с маленькой и все буквы. было бы прекрасно добавить функцию, которая считает букву прописной или строчной и будет выводить так, как они нарисованы. Конечно и за это вам большая благодарность.
Kibor
Отправлено: 21 Октября, 2017 - 16:44:13
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
вы сначала попробуйте обучить.
Тогда увидите что от программы это не зависит. Если обучите на большую что это большая - будет большая. если обучите маленькую - маленькая. Если поставите знак вопроса на Ж , будет не ж а знак вопроса.
Но зачем делить на заглавные и строчные? Что бы потом программа путала "П" с "п"? и усложнять себе жизнь при анализе текста?
Это не FineReader что б красиво писать. Это для того что бы можно было понять что написано и делать выводы..
007wan
Отправлено: 21 Октября, 2017 - 16:57:28
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
Kibor пишет:
вы сначала попробуйте обучить.
Тогда увидите что от программы это не зависит. Если обучите на большую что это большая - будет большая. если обучите маленькую - маленькая. Если поставите знак вопроса на Ж , будет не ж а знак вопроса.
Но зачем делить на заглавные и строчные? Что бы потом программа путала "П" с "п"? и усложнять себе жизнь при анализе текста?
Это не FineReader что б красиво писать. Это для того что бы можно было понять что написано и делать выводы..
А ну понятно) ну попробую)
anton2017
Отправлено: 21 Октября, 2017 - 20:43:08
Наблюдатель
Покинул форум
Сообщений всего: 39
Дата рег-ции: Май 2017
Репутация: 0
Владимир, дайте обнову со снифером)(оч облегчит ботоводство) уж очень жду)!
007wan
Отправлено: 22 Октября, 2017 - 16:55:38
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
anton2017 пишет:
Владимир, дайте обнову со снифером)(оч облегчит ботоводство) уж очень жду)! ::rolleyes24.gif::
что такое снифер?
konctantin777
Отправлено: 22 Октября, 2017 - 17:24:15
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017 Откуда: Архангельск
Репутация: 6
anton2017 пишет:
Владимир, дайте обнову со снифером)(оч облегчит ботоводство) уж очень жду)!
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.