Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Распознавание цифр


Автор: killobyte 1.9.2010, 17:45
Вообщем задача: дано трехзначное число в виде изображения, нудно распознать число. Известно что изображение сгенерировано стандартным системным шрифтом размером от 20 до 50.
вот пример 
http://dl.dropbox.com/u/1507766/samples.tar.bz2
но есть некоторые ограничения. размер исходника до 64кб. программа вся одним файлом. за счет чего возникает сомнения по использование однослойного перцептрона. Может можно как то реализовать генерацию изображения заданного шрифта?

Автор: ИванМ 1.9.2010, 19:22
Можно попробовать воспользоваться нейронными сетями. На них такие задачи решают.

Автор: killobyte 1.9.2010, 19:49
facepalm >_______<
 
я же написал про ограничение размера, и то что считаю сомнительным использование однослойного перцептрона

Автор: VictorTsaregorodtsev 1.9.2010, 20:31
killobyte, Них... не понял. Причём тут персептрон для
реализовать генерацию изображения заданного шрифта? 

А 64кил исходника хватит и для реализации нейросетки посложнее персептрона. Или надо 64кил исполняемого файла?

Автор: killobyte 1.9.2010, 20:41
для генерации изображения нейросеть не нужна. это просто вариант исходящий из того что шрифты стандартные.
а 64 кб мало потому что

максимальный размер цифры 64х64 (шрифт 50 + закорючки)
10 нейронов, у каждого 64*64 входа. итого получаем 40960 весовых коэффициентов. каждый из них записывается в исходник. числа там 1-2 знака, плюс половна отрицательные, так что на каждое число нужно в среднем 2-3 байта. итого получаем около 100кб

Автор: maxim1000 1.9.2010, 21:02
если время не критично - перебор smile
генерируем изображения цифр всеми шрифтами всех размеров и сравниваем попиксельно smile
можно сузить поиск, измерив высоту

естественно, есть смысл распознавать цифры отдельно

Автор: killobyte 1.9.2010, 21:07
вот как раз и вопрос как генерировать изображение с заданным шрифтом?

Автор: maxim1000 1.9.2010, 22:27
а... ну по вопросам того, как получить изображение того или иного текста с нужным шрифтом, эффективнее будет обратиться в форум, соответствующий той операционке, на которой всё должно работать

например, в WinAPI это - вызов нескольких функций (создать картинку, контекст к ней, шрифт, написать, всё поудалять), в других ОС, думаю, не сложнее

если дело касается C++, то адреса форумов такие:
http://forum.vingrad.ru/forum/c-c++programming-under-Unix-Linux.html
http://forum.vingrad.ru/forum/c-c++system-programming-WinAPI.html
http://forum.vingrad.ru/forum/c-c++QT-gtk-wxWidgets.html

Автор: W4FhLF 2.9.2010, 10:39
http://habrahabr.ru/blogs/algorithm/101446/

Вот этот вариант может сработать. 

Автор: Bitter 2.9.2010, 11:44
а зачем для каждого нейрона делать 64х64 входа? Сделайте 32х32, усредняя соседние значения пикселов. Думаю распознавание цифр от этого не пострадает

Автор: ИванМ 2.9.2010, 16:40
Цитата(maxim1000 @  1.9.2010,  21:02 Найти цитируемый пост)
генерируем изображения цифр всеми шрифтами всех размеров и сравниваем попиксельно

Этот вариант, думаю, не подойдет, т.к. существует размытие текста по границам, которое у разных программ свое. Нужно еще знать, с помощью какой программы нарисован шрифт.

Автор: Enter 2.9.2010, 16:58
я бы сделал так:
1. берем картинку
Код
Bitmap bitmap = new Bitmap("C:\\путь к картинке.jpg");

2. отделяем 1 символ
3. либо определяем размер шрифта, либо растягиваем картинку до нужной величины
4. пишем на ней сверху белым цветом цифру
Код
Graphics g = Graphics.FromImage(bitmap);
g.DrawString("1", new Font("Helvetica", 30), Brushes.White, new Point(0, 0));

5. определяем яркость картинки, суммируя яркость всех пикселей
Код
bitmap.GetPixel(e.X, e.Y).GetBrightness();

6. далее цикл по цифрам и по шрифтам
7. самая подходящая цифра будет с самой большой яркостью

ну и далее по символам
естественно, всё это в потоке(ах)

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

ззы.. эх, ветку не посмотрел. ну думаю алгоритм понятен, и в других языках похожее можно сваять

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)