С# ZennoPoster + Tesseract.Net SDK

  • Автор темы Автор темы swiniks
  • Дата начала Дата начала

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


  • Всего проголосовало
    130
а при чём собака если в коде переменные вообще в другом формате пишутся, или ты в ява ? или в новых версиях сделали что два варианта переменых работают
 
а при чём собака если в коде переменные вообще в другом формате пишутся, или ты в ява ? или в новых версиях сделали что два варианта переменных работают
Код:
Развернуть Свернуть Копировать
Bitmap bmp = new Bitmap(@"{-Project.Directory-}\{-Variable.name-}");
Ну у меня версия 5.9.8.1 и в таком случае отрабатывает без ошибки!
 
Последнее редактирование:
Ребята? чета у меня вместо номера это слова "(ussmasmn". В чем может быть проблема?
 
Подскажите, как в коде прописать, чтобы капчу чуть повернуть по часовой стрелке, а то разгадывает не верно?
Решилось, екшеном работы с изображением поворотом на несколько градусов и обрезкой. :by:
 
Последнее редактирование:
Подскажите, как в коде прописать, чтобы капчу чуть повернуть по часовой стрелке, а то разгадывает не верно?
Решилось, екшеном работы с изображением поворотом на несколько градусов и обрезкой. :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*
А кто-нибудь это дело в многопотоке запускал?

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

Решение:
Код:
Развернуть Свернуть Копировать
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*
помогите внедрить, за монетку
 
помогите внедрить, за монетку
смотря что внедрить =)
распознавание в многопотоке - я вроде "без монетки" написал как реализовать...
и tesseract подходит не для всех картинок...
 
Что это может быть?
Код:
Развернуть Свернуть Копировать
Не удалось загрузить файл или сборку "Patagames.Ocr, Version=1.9.2.341, Culture=neutral, PublicKeyToken=c2dc709ce62c6191" либо одну из их зависимостей. Не удается найти указанный файл.
 
Та вроде бы все по инструкции =)
84439a27ce2181469052be282c6d0826.png
 
Что это может быть?
Код:
Развернуть Свернуть Копировать
Не удалось загрузить файл или сборку "Patagames.Ocr, Version=1.9.2.341, Culture=neutral, PublicKeyToken=c2dc709ce62c6191" либо одну из их зависимостей. Не удается найти указанный файл.
Скорее всего папку tessdata в C:\Program Files (x86)\ZennoLab\ZennoPoster\Progs не положил, там языковые файлы лежат.
 
Реально прочитать текст с такой каптчи?
jGKU8Ec.png


Стоит заморачиваться?
 
tatarin реально убираешь шум / обрезаешь / выравниваешь и все
 
минуснуть всё, кроме черного и дело в шляпе. Если конечно в этом плане всё стабильно
Даю зуб что он D от 0 не отличит, так что смысла нет тут юзать его.
 
При желании можно избавиться от серых символов, черные разрезать и закинуть в единую базу, собрать базу побольше и замутить модуль с учетом того, что наклон там не выше 15 градусов и шрифт скорее всего 1 и тот же, то пробив должен быть под 80+% при ручном написании модуля без КМ. Но тут опыт нужен для таких дел и время.
 
а я зуб даю что если его обучить как надо то всё различит
А ты научи нас как его надо обучать. Только ссылки в гугл не кидай. Реальный опыт обучения тессаракта в студию.
 
  • Спасибо
Реакции: avtostopshik и rediffusion
А ты научи нас как его надо обучать. Только ссылки в гугл не кидай. Реальный опыт обучения тессаракта в студию.
ты ведь зуб давал не выкладавая, поэтому и я даю слово что его можно обучить по своему, для тебя ломануть тем более чтото не проблема ты профисиональней меня, поэтому студия это халява и отпадает в моём случае

P.S. недавно даже смог нейронку обучить но что то всё равно ни то, для обучения много епли надо
 
А ты научи нас как его надо обучать. Только ссылки в гугл не кидай. Реальный опыт обучения тессаракта в студию.
примером будет где ты вопрос задавал на форуме, напиши сам себе как тебе надо, там всё разжовано, хотя для твоего примера и нейронки нинадо
а вот пример где сивол нашёлся в искажении

2016-11-06_053225.png
 
Подскажите кто знающий. Вот я все настроил как в этом посте, все работает. Но картинка капчи получается не черно-белая, а бело-черная. Ну то есть фон серый, а сама капча белая. И в итоге он ее не распознает. Если же просто в фотошопе закрасить капчу черным - все работает. В общем как через С# сделать инферсию цветов? Чет гугл не помог, ну или просто я тупой.
 
Подскажите кто знающий. Вот я все настроил как в этом посте, все работает. Но картинка капчи получается не черно-белая, а бело-черная. Ну то есть фон серый, а сама капча белая. И в итоге он ее не распознает. Если же просто в фотошопе закрасить капчу черным - все работает. В общем как через С# сделать инферсию цветов? Чет гугл не помог, ну или просто я тупой.
Капча случаем не антиботовская? Пример в студию
 
Всем привет
скажите а как настроить данную приблуду чтобы она два языка распознавала в одном тексте
например вполне читабельный текст - но в нем слова на двух языках русский и английский = на выходе надо получить строку на двух языках.
спасибо
 
А ты научи нас как его надо обучать. Только ссылки в гугл не кидай. Реальный опыт обучения тессаракта в студию.

в ручную запилил чтобы для пнонимания было понятно что можно и тессерактом распознать
два видео конечно из за того что программа когда захват видео делает не скринит
1.увеливаем картинку
2.очищаем от мусора


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


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

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