288386 (Распознавание графических символов), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Распознавание графических символов", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "288386"

Текст 2 страницы из документа "288386"

После открытия изображения становится активным кнопка "Сегментация", после нажатия на которую, текст на изображении разбивается на слова.

Результат сегментации представлен на рисунке 3.6.

Рисунок 3.6 – Результат сегментации

Перед непосредственным распознаванием текста необходимо произвести обучение персептрона, нажав кнопку "обучить", либо загрузить ранее сохраненные параметры, нажав кнопку "загрузить". Обучение персептрона осуществляется изображением содержащим слово "Указ", написанное разными шрифтами. После обучения, можно сохранить параметры персептрона в файл, нажав "сохранить", и прочитать их при следующем распознавании.

После обучения, либо загрузки параметров персептрона, можно производить распознавание изображений. Результат распознавания показан на рисунке 3.7.

Рисунок 3.7 – Результат распознавания

При углубленном тестировании также не было найдено ошибок. Интерфейс программы разработан таким образом, что пользователю на каждом этапе обработки изображения может выполнить только определенные действия, что значительно снижает риск появления ошибок выполнения.

Результат работы программы при загрузке не файла изображения представлен на рисунке 3.8.

Рисунок 3.8 – Результат работы приложения при неверно формате файла



ВЫВОДЫ

В результате выполнения данного курсового проекта было разработано приложение, позволяющее распознавать слово "Указ" в тексте на изображении. Размеры изображения и шрифта текста может быть практически любым, что дает гибкие возможности для применения приложения.

Для распознавания применяется персептрон. Качество распознавания изображения зависит от количества предложенных образов для обучения и количество А-элементов. Количество поддерживаемых шрифтов зависит от шрифтов, которым написаны слова на изображениях для обучения.

Перед непосредственным распознаванием, как правило, необходимо выполнять сегментацию изображения. Сегментация является неотъемлемой частью при распознавании образов, в общем случае, и непосредственно в данном проекте, так как ее результатом являются изображения, содержащие только необходимые для распознания объекты (слова текста).


СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Microsoft Developer Network (MSDN) [Электрон. ресурс]. ‑ Режим доступа: http://msdn.ru/

  2. Ковалева И.Л., "Алгоритмы обработки изображений", БНТУ, 2007


ПРИЛОЖЕНИЕ A


Небольшой мануал по проге:

- Текст должен быть черным по белому

- Картинки для теста есть в архиве.

- Ориентация текста не под углом.

- Размер картинки желательно не меньше чем, те, что лежат в архиве, потому что при маленьком изображении плохо распознается из-за сливания пикселей.

- Распознавание персептроном с несколькими сумматорами и алгоритмом обучения без учета правильности ответа (она может это спросить=)

- Для обучения персептрона надо открыть изображение "Картинка для обучения.png" из папки "тестовые изображения" или создать аналогичную самостоятельно и открыть ее. Потом нажать "сегментация", Потом "Обучить", можно сохранить обучение, нажав "сохранить". Теперь можно открывать изображение, которое будет распознаваться. Для распознавания надо нажать "сегментация", потом "распознать".

- Если проводилось сохранение обучения, то можно не обучать. Для распознавания в таком случае надо делать следующие: открываешь распознаваемое изображение, нажимаешь "Сегментация", нажимаешь "загрузить", нажимаешь "распознать".

- В записке в графической части нужно вставить некоторые свои данные, я их отметил красным.

- путь к EXE-шнику: \WordSearcher\WordSearcher\bin\Debug\ WordSearcher.exe

Если будут какие-то баги или вопросы, сообщай - исправлю.

С уважением, Свирко Юрий

Mail: sv1r4.sd@gmail.com

Phone: 8-033-63-123-60

ЛИСТИНГ ПРОГРАММЫ

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WordSearcher

{

public partial class FormMain : Form

{

///

/// Флаг разрешения распознавания

///

bool enableRecognize = false;

///

/// Размер битмапа со словом "Указ"

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

///

private static Size imSize = new Size(65, 25);

///

/// Состояние формы

///

private FormState formState = FormState.Empty;

///

/// Масив битмапов сос словами текста

///

private List words;

///

/// Объект класса для распознавания(персептрон)

///

private Recognizer r = new Recognizer(imSize, 750, 2);

///

/// Метод для делания активными неактивными кнопок управления

/// в зависимости от этапа обработк изображения

///

/// текущее состояние

private void ButtonsEnabled(FormState fs)

{

formState = fs;

switch (fs)

{

case FormState.Empty:

buttonOpen.Enabled = true;

buttonSegment.Enabled = false;

buttonRecognize.Enabled = false;

buttonTeach.Enabled = false;

buttonLoadTeaching.Enabled = false;

buttonSaveTeaching.Enabled = false;

pictureBoxMain.Image = null;

dataGridViewSegments.Rows.Clear();

break;

case FormState.Open:

buttonOpen.Enabled = true;

buttonSegment.Enabled = true;

buttonRecognize.Enabled = false;

buttonTeach.Enabled = false;

buttonLoadTeaching.Enabled = false;

buttonSaveTeaching.Enabled = false;

dataGridViewSegments.Rows.Clear();

break;

case FormState.Segmented:

buttonOpen.Enabled = true;

buttonSegment.Enabled = true;

if (enableRecognize)

buttonRecognize.Enabled = true;

else

buttonRecognize.Enabled = false;

buttonTeach.Enabled = true;

buttonLoadTeaching.Enabled = true;

buttonSaveTeaching.Enabled = false;

break;

case FormState.Teached:

buttonOpen.Enabled = true;

buttonSegment.Enabled = false;

buttonRecognize.Enabled = true;

buttonTeach.Enabled = false;

buttonLoadTeaching.Enabled = false;

buttonSaveTeaching.Enabled = true;

enableRecognize = true;

break;

case FormState.Deserialized:

buttonOpen.Enabled = true;

buttonSegment.Enabled = false;

buttonRecognize.Enabled = true;

buttonTeach.Enabled = false;

buttonLoadTeaching.Enabled = false;

buttonSaveTeaching.Enabled = true;

enableRecognize = true;

break;

case FormState.Recognized:

buttonOpen.Enabled = true;

buttonSegment.Enabled = false;

buttonRecognize.Enabled = true;

buttonTeach.Enabled = false;

buttonLoadTeaching.Enabled = true;

buttonSaveTeaching.Enabled = true;

break;

}

}

public FormMain()

{

InitializeComponent();

}

private void buttonOpen_Click(object sender, EventArgs e)

{

try

{

Bitmap b;

if (openFileDialog1.ShowDialog() == DialogResult.OK)

{

//Если изобраение имеет индексированный формат

//то переводим его в обычный, потомутчо с индексировнным не работат

//setpixel

b = new Bitmap(openFileDialog1.FileName);

if (b.PixelFormat == System.Drawing.Imaging.PixelFormat.Format1bppIndexed ||

b.PixelFormat == System.Drawing.Imaging.PixelFormat.Format4bppIndexed ||

b.PixelFormat == System.Drawing.Imaging.PixelFormat.Format8bppIndexed)

b = new Bitmap(b);

pictureBoxMain.Image = b;

this.ButtonsEnabled(FormState.Open);

}

else

{

this.ButtonsEnabled(FormState.Empty);

}

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

private void buttonSegment_Click(object sender, EventArgs e)

{

//Получаем набор битмапов соответствующих словам текста

words = Segmentation.GetWords((Bitmap)pictureBoxMain.Image);

dataGridViewSegments.RowCount = words.Count;

int i =0;

//Перебираем слов и отображаем в таблице

foreach (Bitmap word in words)

{

dataGridViewSegments.Rows[i].Cells[0].Value = word;

i++;

}

ButtonsEnabled(FormState.Segmented);

}

private void buttonRecognize_Click(object sender, EventArgs e)

{

int i = 0;

foreach (Bitmap word in words)

{

dataGridViewSegments.Rows[i].Cells[1].Value = r.Recognize(Recognizer.NormalizeBitmap(word,imSize));

i++;

}

ButtonsEnabled(FormState.Recognized);

}

private void buttonTeach_Click(object sender, EventArgs e)

{

//Перебираем слова и обучаем ими

//т.к. класса для распознаваня два то

//первый класс обучаем просто изображение слова

//а второй обучаем противопорложным изображение(т.е инвертируем цвета исходного изображения)

for (int i = 0; i < 5; i++)

{

foreach (Bitmap word in words)

{

r.Teach(Recognizer.NormalizeBitmap(word, imSize), 0);

r.Teach(Recognizer.InverseBitmap(Recognizer.NormalizeBitmap(word, imSize)), 1);

}

}

ButtonsEnabled(FormState.Teached);

}

private void buttonSaveTeaching_Click(object sender, EventArgs e)

{

r.SerializeParams();

ButtonsEnabled(FormState.Serialized);

}

private void buttonLoadTeaching_Click(object sender, EventArgs e)

{

r.DeserializeParams();

ButtonsEnabled(FormState.Deserialized);

}

private void FormMain_Load(object sender, EventArgs e)

{

this.ButtonsEnabled(FormState.Empty);

}

}

//

/// Состояния изображения

///

enum FormState

{

///

/// изображение не открыто

///

Empty,

///

/// Изображение открыто

///

Open,

///

/// Сегментировано

///

Segmented,

///

/// Персептрон обучен

///

Teached,

///

/// Параметры персептрона сохранены

///

Serialized,

///

/// Параметры персептрона загружены

///

Deserialized,

///

/// Распознано

///

Recognized

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Drawing;

using System.Windows.Forms;

using System.IO;

using System.Runtime.Serialization.Formatters.Binary;

namespace WordSearcher

{

///

/// Реализует распозноание изображений

/// на базе персептрона

///

class Recognizer

{

///

/// матрица знаков входов персептрона

///

private int[,] xa;

///

/// Массив лямд

///

private int[,] l;

///

/// Массив имен классов

///

private string[] classes = {"Указ",

"Не указ"};

///

/// Массив имен классов

///

public string[] ClassesList

{

get { return classes; }

}

///

/// Инициализирует xa-матрицу

///

/// размер изображения

/// количесвто а-элементов

/// количесвто классов

public Recognizer(Size sz, int aCount, int lCount)

{

Random r = new Random();

//Создание матрцы ха

xa = new int[sz.Height * sz.Width, aCount];

//Создание матрицы лямд

l = new int[lCount,aCount];

//Первоначальная

//иницализация лямд еденицами

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5136
Авторов
на СтудИзбе
443
Средний доход
с одного платного файла
Обучение Подробнее