С# ZennoPoster + Tesseract.Net SDK

Полезная ли для вас информация ?


  • Всего проголосовало
    115

ezotonal

Client
Регистрация
13.01.2014
Сообщения
793
Благодарностей
216
Баллы
43

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 386
Благодарностей
2 002
Баллы
113
а при чём собака если в коде переменные вообще в другом формате пишутся, или ты в ява ? или в новых версиях сделали что два варианта переменых работают
 

ezotonal

Client
Регистрация
13.01.2014
Сообщения
793
Благодарностей
216
Баллы
43
а при чём собака если в коде переменные вообще в другом формате пишутся, или ты в ява ? или в новых версиях сделали что два варианта переменных работают
Код:
Bitmap bmp = new Bitmap(@"{-Project.Directory-}\{-Variable.name-}");
Ну у меня версия 5.9.8.1 и в таком случае отрабатывает без ошибки!
 
Последнее редактирование:

globator

Client
Регистрация
30.03.2016
Сообщения
31
Благодарностей
1
Баллы
8
Ребята? чета у меня вместо номера это слова "(ussmasmn". В чем может быть проблема?
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 558
Благодарностей
601
Баллы
113
Подскажите, как в коде прописать, чтобы капчу чуть повернуть по часовой стрелке, а то разгадывает не верно?
Решилось, екшеном работы с изображением поворотом на несколько градусов и обрезкой. :by:
 
Последнее редактирование:

swiniks

Client
Регистрация
19.02.2015
Сообщения
236
Благодарностей
164
Баллы
43
Подскажите, как в коде прописать, чтобы капчу чуть повернуть по часовой стрелке, а то разгадывает не верно?
Решилось, екшеном работы с изображением поворотом на несколько градусов и обрезкой. :by:
Что то типа такого должно быть, если не применять библиотеки для работы с изображением. Можно воспользоваться например такой библиотекой.

C#:
public static Bitmap RotateImage(Image image, float angle)
        {
            if (image == null)
                throw new ArgumentNullException("image");

            const double pi2 = Math.PI / 2.0;

            // Why can't C# allow these to be const, or at least readonly
            // *sigh*  I'm starting to talk like Christian Graus :omg:
            double oldWidth = (double)image.Width;
            double oldHeight = (double)image.Height;

            // Convert degrees to radians
            double theta = ((double)angle) * Math.PI / 180.0;
            double locked_theta = theta;

            // Ensure theta is now [0, 2pi)
            while (locked_theta < 0.0)
                locked_theta += 2 * Math.PI;

            double newWidth, newHeight;
            int nWidth, nHeight; // The newWidth/newHeight expressed as ints

  

            double adjacentTop, oppositeTop;
            double adjacentBottom, oppositeBottom;
  
            if ((locked_theta >= 0.0 && locked_theta < pi2) ||
                (locked_theta >= Math.PI && locked_theta < (Math.PI + pi2)))
            {
                adjacentTop = Math.Abs(Math.Cos(locked_theta)) * oldWidth;
                oppositeTop = Math.Abs(Math.Sin(locked_theta)) * oldWidth;

                adjacentBottom = Math.Abs(Math.Cos(locked_theta)) * oldHeight;
                oppositeBottom = Math.Abs(Math.Sin(locked_theta)) * oldHeight;
            }
            else
            {
                adjacentTop = Math.Abs(Math.Sin(locked_theta)) * oldHeight;
                oppositeTop = Math.Abs(Math.Cos(locked_theta)) * oldHeight;

                adjacentBottom = Math.Abs(Math.Sin(locked_theta)) * oldWidth;
                oppositeBottom = Math.Abs(Math.Cos(locked_theta)) * oldWidth;
            }

            newWidth = adjacentTop + oppositeBottom;
            newHeight = adjacentBottom + oppositeTop;

            nWidth = (int)Math.Ceiling(newWidth);
            nHeight = (int)Math.Ceiling(newHeight);

            Bitmap rotatedBmp = new Bitmap(nWidth, nHeight,System.Drawing.Imaging.PixelFormat.Format24bppRgb);

            using (Graphics g = Graphics.FromImage(rotatedBmp))
            {
                // This array will be used to pass in the three points that
                // make up the rotated image
                Point[] points;

    
                if (locked_theta >= 0.0 && locked_theta < pi2)
                {
                    points = new Point[] {
                                             new Point( (int) oppositeBottom, 0 ),
                                             new Point( nWidth, (int) oppositeTop ),
                                             new Point( 0, (int) adjacentBottom )
                                         };

                }
                else if (locked_theta >= pi2 && locked_theta < Math.PI)
                {
                    points = new Point[] {
                                             new Point( nWidth, (int) oppositeTop ),
                                             new Point( (int) adjacentTop, nHeight ),
                                             new Point( (int) oppositeBottom, 0 )                
                                         };
                }
                else if (locked_theta >= Math.PI && locked_theta < (Math.PI + pi2))
                {
                    points = new Point[] {
                                             new Point( (int) adjacentTop, nHeight ),
                                             new Point( 0, (int) adjacentBottom ),
                                             new Point( nWidth, (int) oppositeTop )
                                         };
                }
                else
                {
                    points = new Point[] {
                                             new Point( 0, (int) adjacentBottom ),
                                             new Point( (int) oppositeBottom, 0 ),
                                             new Point( (int) adjacentTop, nHeight )
                                         };
                }

                g.FillRectangle(Brushes.White, 0, 0, rotatedBmp.Width, rotatedBmp.Height);
                g.DrawImage(image, points);
            }

            return rotatedBmp;
        }
 
Последнее редактирование:
  • Спасибо
Реакции: Roman*

Leoneed

Client
Регистрация
03.05.2015
Сообщения
53
Благодарностей
35
Баллы
18
А кто-нибудь это дело в многопотоке запускал?

Если сохранять постоянно некую картинку в файл с одним и тем-же названием (например как в исходном коде "C:\quote.jpg") в многопотоке появляются ошибки при обращении к этому файлу.
Подскажите, как вместо прямого пути "C:\quote.jpg" внедрить переменную с путём к файлу.
 

Leoneed

Client
Регистрация
03.05.2015
Сообщения
53
Благодарностей
35
Баллы
18
Спасибо Роману подсказал как правильно писать.

Решение:
Код:
using (var api = OcrApi.Create())
{
api.Init(Languages.English); // англ язык распознавания
api.Init(Languages.Russian);// рус язык распознавания если скачали пакет с сайта Tesseract
// api.SetVariable("tessedit_char_whitelist", "0123456789"); // если гадать только цифры - раскомментировать строку
var path = project.Variables["picture"].Value;//название переменной в которой путь к файлу
string plainText = api.GetTextFromImage(path);
return plainText; // возвращаем ответ переменой екшена
}
return "bad";
У меня алгоритм следующий:
1. GET запросом сохраняю картинку (результат кладу в переменную picture)
2. Запускаю распознавание
3. Удаляю файл картинки через экшн "Удаление файла" в котором вместо пути указываю переменную picture

p.s.
Использую RamDisk - поэтому всё ненужное сразу удаляю.
 
Последнее редактирование:
  • Спасибо
Реакции: rol, samsonnn и Roman*

Vavildi

Client
Регистрация
29.02.2016
Сообщения
186
Благодарностей
102
Баллы
43
помогите внедрить, за монетку
 

Leoneed

Client
Регистрация
03.05.2015
Сообщения
53
Благодарностей
35
Баллы
18
помогите внедрить, за монетку
смотря что внедрить =)
распознавание в многопотоке - я вроде "без монетки" написал как реализовать...
и tesseract подходит не для всех картинок...
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 208
Благодарностей
1 253
Баллы
113
Что это может быть?
Код:
Не удалось загрузить файл или сборку "Patagames.Ocr, Version=1.9.2.341, Culture=neutral, PublicKeyToken=c2dc709ce62c6191" либо одну из их зависимостей. Не удается найти указанный файл.
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 208
Благодарностей
1 253
Баллы
113
Та вроде бы все по инструкции =)
 

swiniks

Client
Регистрация
19.02.2015
Сообщения
236
Благодарностей
164
Баллы
43
Что это может быть?
Код:
Не удалось загрузить файл или сборку "Patagames.Ocr, Version=1.9.2.341, Culture=neutral, PublicKeyToken=c2dc709ce62c6191" либо одну из их зависимостей. Не удается найти указанный файл.
Скорее всего папку tessdata в C:\Program Files (x86)\ZennoLab\ZennoPoster\Progs не положил, там языковые файлы лежат.
 

tatarin

Client
Регистрация
28.10.2012
Сообщения
790
Благодарностей
129
Баллы
43
Реально прочитать текст с такой каптчи?


Стоит заморачиваться?
 

Max

Client
Регистрация
17.06.2012
Сообщения
167
Благодарностей
36
Баллы
28
tatarin реально убираешь шум / обрезаешь / выравниваешь и все
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 246
Благодарностей
4 314
Баллы
113

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 499
Благодарностей
1 236
Баллы
113
минуснуть всё, кроме черного и дело в шляпе. Если конечно в этом плане всё стабильно
Даю зуб что он D от 0 не отличит, так что смысла нет тут юзать его.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 303
Благодарностей
1 164
Баллы
113
При желании можно избавиться от серых символов, черные разрезать и закинуть в единую базу, собрать базу побольше и замутить модуль с учетом того, что наклон там не выше 15 градусов и шрифт скорее всего 1 и тот же, то пробив должен быть под 80+% при ручном написании модуля без КМ. Но тут опыт нужен для таких дел и время.
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 499
Благодарностей
1 236
Баллы
113
а я зуб даю что если его обучить как надо то всё различит
А ты научи нас как его надо обучать. Только ссылки в гугл не кидай. Реальный опыт обучения тессаракта в студию.
 
  • Спасибо
Реакции: avtostopshik и rediffusion

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 386
Благодарностей
2 002
Баллы
113
А ты научи нас как его надо обучать. Только ссылки в гугл не кидай. Реальный опыт обучения тессаракта в студию.
ты ведь зуб давал не выкладавая, поэтому и я даю слово что его можно обучить по своему, для тебя ломануть тем более чтото не проблема ты профисиональней меня, поэтому студия это халява и отпадает в моём случае

P.S. недавно даже смог нейронку обучить но что то всё равно ни то, для обучения много епли надо
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 386
Благодарностей
2 002
Баллы
113
А ты научи нас как его надо обучать. Только ссылки в гугл не кидай. Реальный опыт обучения тессаракта в студию.
примером будет где ты вопрос задавал на форуме, напиши сам себе как тебе надо, там всё разжовано, хотя для твоего примера и нейронки нинадо
а вот пример где сивол нашёлся в искажении

2016-11-06_053225.png
 

MagnatBelka

Client
Регистрация
01.02.2016
Сообщения
25
Благодарностей
0
Баллы
1
Подскажите кто знающий. Вот я все настроил как в этом посте, все работает. Но картинка капчи получается не черно-белая, а бело-черная. Ну то есть фон серый, а сама капча белая. И в итоге он ее не распознает. Если же просто в фотошопе закрасить капчу черным - все работает. В общем как через С# сделать инферсию цветов? Чет гугл не помог, ну или просто я тупой.
 

Radzhab

Client
Регистрация
23.05.2014
Сообщения
1 499
Благодарностей
1 236
Баллы
113
Подскажите кто знающий. Вот я все настроил как в этом посте, все работает. Но картинка капчи получается не черно-белая, а бело-черная. Ну то есть фон серый, а сама капча белая. И в итоге он ее не распознает. Если же просто в фотошопе закрасить капчу черным - все работает. В общем как через С# сделать инферсию цветов? Чет гугл не помог, ну или просто я тупой.
Капча случаем не антиботовская? Пример в студию
 

xsaz

Новичок
Регистрация
14.11.2016
Сообщения
10
Благодарностей
0
Баллы
1
Всем привет
скажите а как настроить данную приблуду чтобы она два языка распознавала в одном тексте
например вполне читабельный текст - но в нем слова на двух языках русский и английский = на выходе надо получить строку на двух языках.
спасибо
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 386
Благодарностей
2 002
Баллы
113
А ты научи нас как его надо обучать. Только ссылки в гугл не кидай. Реальный опыт обучения тессаракта в студию.
в ручную запилил чтобы для пнонимания было понятно что можно и тессерактом распознать
два видео конечно из за того что программа когда захват видео делает не скринит
1.увеливаем картинку
2.очищаем от мусора


символы я нарезал заранее


теперь всю эту красоту связываешь в автоматический режим и в путь
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)