Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/35: Рейтинг темы: голосов - 35, средняя оценка - 4.89
Сашаю
1

Распознавание текста с картинки

11.06.2012, 17:37. Показов 7217. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо написать программу на входе которой изображение jpg с формулами, текстом и картинками на выходе программы - текст.
Этапы
1) Выделение блоков (текстовый, картинка, формула) на выходе структура: Номер блока, координата верхнего, координата нижнего угла, тип блока.

2)Выделение знакомест
2.1) разделение блока на горизонтальные и вертикальные линии. на выходе Структура: Номер блока, номер знакоместа, координаты верхнего угла, координаты нижнего угла

3)Распознавание по эталонами.
Сравнение идет методом полной цены.


есть программка выделения знакомест (все не оптимизировано конечно)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
using System.IO;
 
namespace Image004
{
    public class Form_Image : Form //класс Form_Image001 наследуется из класса Form
    {
 
        public Form_Image(string name_Image) //передача параметра из главной функции
        {
 
            int HeightScreen = Screen.PrimaryScreen.WorkingArea.Height; //ширина экрана
            int WidthScreen = Screen.PrimaryScreen.WorkingArea.Width; // длина экрана
            //установка свойств формы
            KeyPreview = true;//cвойство формы,которое передает все события клавиатуры для объектов формы непосредственно на форму.
            AutoSize = true; //подгонка размера формы
            TopMost = true; // изображение на форме поверх всех панелей 
            //Задаем параметры PictureBox
            PictureBox pb = new PictureBox();//создаем объект класса PictureBox,куда поместим картинку
            pb.Name = "picturebox";
            pb.Image = Image.FromFile(name_Image);//вставить картинку из файла-папки с проектом
            int IM_H = Convert.ToInt32(pb.Image.Size.Height);
            int IM_W = Convert.ToInt32(pb.Image.Size.Width);
            pb.Width = WidthScreen;//ширина 
            pb.Height = HeightScreen;//длина 
            this.Controls.Add(pb); // добавление элемента
            Bitmap bitmap_frame = new Bitmap(pb.Image);//создаем новый объект класса Bitmap
            KeyDown += new System.Windows.Forms.KeyEventHandler(Form_Image_KeyDown);  // подписка на событие  KeyDown
            Pixel(name_Image, bitmap_frame, IM_H, IM_W);//вызов  функции Pixel для разложения пикселей картинки на составляющие RGB
           
        }
 
 
 
 
        public void Pixel(string name_Image, Bitmap bitmap_frame,  int IM_H, int IM_W)//объявляем функцию Pixel
        {
            try
            {
                Color[,] pix = new Color[IM_W, IM_H];// в массив pix записываем координаты каждого пикселя
                //в циклах выбираем фрагмент изображения,каждый пиксель которого будем раскладывать на составляющие RGB
                Color pi = bitmap_frame.GetPixel(0, 0);
                int[] vertikal = new int[IM_H];
                int s =1;
                for (int y = 0; y < IM_H; y++)//фрагмент от 0 до  IM_H по высоте
                {
                    bool flag = true;
                        for (int x = 0; x < IM_W; x++)//возьмем фрагмент от 0 до IM_W по ширине
                    {
                        pix[x, y] = bitmap_frame.GetPixel(x, y);//получаем и заносим в массив pix цветовую схему  каждого пикселя
                        if (Convert.ToInt32(pix[x, y].R) <= 220 && Convert.ToInt32(pix[x, y].G) <= 220 && Convert.ToInt32(pix[x, y].B) <= 220)
                        {
                            flag = false;
                            
                         }
                    }
                    if (flag)
                    {
                         for (int k = 0; k < IM_W; k++)
                            
                              pix[k, y] = Color.Blue; 
                            
                     }
 
                }
                
 
               for (int l = 0; l < IM_H; l++)
                {
                    if (pix[0, l] == Color.Blue && (l+1)<IM_H && pix[0, l + 1]!= Color.Blue)
                    {
                       
                        vertikal[s] = l;
                        s++;
                    }
                    else if (pix[0, l] == Color.White && (l + 1) < IM_H && pix[0, l + 1] == Color.Blue)
                    {
                        
                        vertikal[s] = l;
                        s++;
                    }
                }
          
              for (s = 1; (s+2) < vertikal.Length; s += 2)
               {
                   for (int x = 0; x < IM_W; x++)
                   {
                       bool flag1 = true;
                       for (int y = vertikal[s]; y <= vertikal[s + 1]; y++)
                       {
                           pix[x, y] = bitmap_frame.GetPixel(x, y);//получаем и заносим в массив pix цветовую схему  каждого пикселя
                           if (Convert.ToInt32(pix[x, y].R) <=220 && Convert.ToInt32(pix[x, y].G) <= 220 && Convert.ToInt32(pix[x, y].B) <= 220)
                           {
                               flag1 = false;
                           }
                       }
                       if (flag1)
                       {
                           for (int y = vertikal[s]; y <= vertikal[s + 1]; y++)
                           
                           {
                               pix[x, y] = Color.Blue;
                           }
                       }
                   }
                   
               }
                     
            
                Bitmap bmp = new Bitmap(IM_W, IM_H);//создаем обект bmp битовой карты 
                for (int j = 0; j < IM_H; j++)
                    for (int i = 0; i < IM_W; i++)
                    {
 
                        bmp.SetPixel(i, j, pix[i, j]);//определяем для объекта bmp пиксель с координатами i и j
                    }
 
                IntPtr bmp_handle = bmp.GetHbitmap(); //Создаем дескриптор bmp_handle - указатель на объект точечного рисунка,хранящегося в bmp
                PictureBox pbox = (Controls.Find("picturebox", true)[0]) as PictureBox;//создаем объект класса PictureBox
 
                pbox.SizeMode = PictureBoxSizeMode.StretchImage;//растянуть изображение на всю, заданную pbox область с размерами(IM_W,IM_H)
               // pbox.Location = new System.Drawing.Point(0, 0);//точка с координатами верхнего левого угла расположения pbox
                pbox.Size = new System.Drawing.Size(IM_W, IM_H);// размер pbox
                pbox.Image = Image.FromHbitmap(bmp_handle);
            }
            catch (Exception e)//если прочитать не получилось
            {
                // Let the user know what went wrong.
                Console.WriteLine("The file could not be read:");
                Console.WriteLine(e.Message);
            }
            
        }
       
        private void Form_Image_KeyDown(object sender, KeyEventArgs e) // событие нажатия клавиши
        {
            if (e.KeyCode >= Keys.A || e.KeyCode >= Keys.Tab) // проверка нажата ли одна из клавиш
            {
                this.Close(); // закрытие формы
            }
        }
    }
 
    class Program
    {
 
        static void Main(string[] args)
        {
            
           
            /*System.Diagnostics.Process proc = new System.Diagnostics.Process();
            // Приложение, которое будем запускать
            proc.StartInfo.FileName = "PDF Image Extraction Wizard 3.1\\PdfWiz.exe";
            proc.EnableRaisingEvents = true;
            //proc.Exited += new EventHandler(proc_Exited);
            proc.Start();
            proc.WaitForExit();
            proc.Close();
 
            Console.WriteLine("Press any key to stop this application ...");
            Console.ReadKey(true);*/
 
            Application.EnableVisualStyles();//сделать возможными визуальные стили для приложения
 
            Application.Run(new Form_Image(args[0])); // передача строки с названием картинки в функции
 
        }
      
    }
}
Над этапом распознавания сейчас работаю. но с первым Выделение блоков не знаю что делать, помогите пожалуйста
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2012, 17:37
Ответы с готовыми решениями:

Распознавание определенного текста с картинки
Приветики Пистолетики) Меня зовут Ира, ребят, помогите пожалуйста... Нужно выполнить работу, а...

Tesseract - некорректно работает распознавание текста с картинки
Ребят, работаю с данной библиотекой, а точнее с ее врапером Tesseract by charlesw, На данный...

Tessnet2: неверное распознавание картинки
Кто нибудь пользовался OCR библиотеками Tessnet2? Bitmap image = new Bitmap(@&quot;ttest.png&quot;); ...

Распознавание текста
Пишу программку(c#) для распознавания текста на изображениях. После бинаризации получил...

2
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
11.06.2012, 19:41 2
вам в сторону фриланса наверняка. Не подумайте, что я пытаюсь вам себя рекомендовать, но здесь весьма не простецкая задача
0
magirus
11.06.2012, 21:05     Распознавание текста с картинки
  #3

Не по теме:

Монфрид прав. и готовьте пару тройку килобаксов... как минимум...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2012, 21:05

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

Распознавание точечного текста
Добрых времени суток. Стоит задача в распознавании серии и номера паспорта, которые представлены...

Обработка изображений (распознавание текста)
Здравствуйте. Задача следующая: имеется сканированный документ с рукописным текстом. Каким образом...

Распознавание текста - Aforge.OCR
Доброго времени суток, уважаемые форумчане, намерен написать OCR библиотеку для своих нужд, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru