~f0ma/cuneiform-linux/devel

« back to all changes in this revision

Viewing changes to cuneiform_src/cli/ocelot.h

  • Committer: Stanislav Ivanov
  • Date: 2017-06-07 15:03:51 UTC
  • Revision ID: ivstdm@gmail.com-20170607150351-dlzbzl54zvs57z57
New command line interface with multipage support and input image filtering.
Alpha state. No checks for build in other platform. Tests is missing.
Magick++ and C++0x is requried.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Ocelot - CPP Wrapper for PUMA - cuneiform recognition engine
 
2
// Ocelot - Singleton class. PUMA used global variables
 
3
 
 
4
#ifndef OCELOT_H
 
5
#define OCELOT_H
 
6
 
 
7
#include <vector>
 
8
#include <map>
 
9
#include <string>
 
10
#include <iostream>
 
11
#include <sstream>
 
12
#include <iomanip>
 
13
#include <stdio.h>
 
14
#include <stdlib.h>
 
15
#include <cstring>
 
16
 
 
17
#include "cttypes.h"
 
18
#include "config.h"
 
19
 
 
20
#include "lang_def.h"
 
21
#include "puma.h"
 
22
#include "compat_defs.h"
 
23
#include "cpage.h"
 
24
#include "cstrdefs.h"
 
25
#include "cstr.h"
 
26
#include "utf8-tables.h"
 
27
 
 
28
using namespace std;
 
29
 
 
30
#include <Magick++.h>
 
31
 
 
32
struct PumaLangList {
 
33
    int puma_number;
 
34
    const char *name;
 
35
    const char * descr;
 
36
};
 
37
 
 
38
struct PumaFormatList {
 
39
    int puma_number;
 
40
    const char * name;
 
41
    const char * descr;
 
42
};
 
43
 
 
44
class OcelotPage {
 
45
    
 
46
    string fileName;
 
47
    uint pageNumber;
 
48
    Magick::Image * image;
 
49
    char * dib;
 
50
    
 
51
    bool applyFilterLeveler = false;
 
52
    double proportionFilterLeveler = 0.3;
 
53
    
 
54
    bool applyFilterBSH = false;
 
55
    double maskSize = 2.0;
 
56
    
 
57
    bool saveFiltredImage = false;
 
58
    string imageDumpFilename = "";
 
59
 
 
60
public:
 
61
    
 
62
    OcelotPage(string fName, uint page = 0);
 
63
    ~OcelotPage();
 
64
    
 
65
    bool loadRaster(string density = "300");
 
66
    void freeRaster();
 
67
    string textCode();
 
68
    char * getDib();
 
69
 
 
70
    void setFilterLeveler(int factor = 30);
 
71
    void setFilterBSH(int size = 4);
 
72
    void setSaveRaster(string filename);
 
73
    
 
74
};
 
75
 
 
76
class OcelotBlock {
 
77
 
 
78
    POLY_ block;
 
79
    uint usernum = 0;
 
80
    
 
81
public:
 
82
 
 
83
    OcelotBlock(POLY_ pumaBlock);
 
84
    OcelotBlock(Handle type, uint x, uint y, uint w, uint h, uint usernum = 0);
 
85
    ~OcelotBlock();
 
86
    
 
87
    Handle type();
 
88
    POLY_ getBlock();
 
89
    string typeName();
 
90
    
 
91
    
 
92
    void setUserTag(uint n);
 
93
    uint getUserTag();
 
94
    void setBlockNumber(uint n);
 
95
    uint x();
 
96
    uint y();
 
97
    uint w();
 
98
    uint h();   
 
99
    
 
100
};
 
101
 
 
102
//CSTR_f_no           0   // not init
 
103
//CSTR_f_let          1   // letter component
 
104
//CSTR_f_bad          2   // badly recognized
 
105
//CSTR_f_dust         4   // dust
 
106
//CSTR_f_punct        8   // punctuation
 
107
//CSTR_f_space        16  // space
 
108
//CSTR_f_solid        32  // spelled solid text
 
109
//CSTR_f_confirmed    64   // confirmed letter
 
110
//CSTR_f_all          127  // non fictive element
 
111
//CSTR_f_fict         128  // fictive element
 
112
//CSTR_f_detouch      256  // fictive element ???
 
113
//CSTR_f_spell        512  // speller solid cstr
 
114
 
 
115
class OcelotSymbol {
 
116
    uint flags;
 
117
    uint symbol_x;
 
118
    uint symbol_y;
 
119
    uint symbol_w;
 
120
    uint symbol_h;
 
121
    uint usernum;
 
122
    vector<string> vtext;
 
123
    
 
124
    public:
 
125
    
 
126
    OcelotSymbol(CSTR_rast rastr, uint tag);
 
127
    ~OcelotSymbol();
 
128
        
 
129
    bool is(uint flag);
 
130
    bool isNot(uint flag);
 
131
    string text(uint variant = 0);
 
132
    uint getUserTag();
 
133
    
 
134
};
 
135
 
 
136
class OcelotLine {
 
137
    uint line_x;
 
138
    uint line_y;
 
139
    uint line_w;
 
140
    uint line_h;
 
141
    uint usernum;
 
142
    
 
143
public:
 
144
    
 
145
    OcelotLine(CSTR_line lin, uint tag);
 
146
    ~OcelotLine();
 
147
    
 
148
    vector <OcelotSymbol> symbols;
 
149
 
 
150
    uint x();
 
151
    uint y();
 
152
    uint w();
 
153
    uint h();
 
154
    uint getUserTag();
 
155
    
 
156
};
 
157
 
 
158
 
 
159
class Ocelot {
 
160
 
 
161
        vector<OcelotPage> pages;
 
162
        
 
163
        string pumaDataPath;
 
164
        
 
165
        uint pumaLanguage;
 
166
        bool pumaDotMatrix;
 
167
        bool pumaFax;
 
168
        bool pumaOneColumn;
 
169
        uint pumaFormat;
 
170
        
 
171
        bool pumaStarted = false;
 
172
        
 
173
        string imageDensity = "300";        
 
174
        uint currentPage = -1;
 
175
        
 
176
        string outputFileName;
 
177
        
 
178
        
 
179
    public:
 
180
        Ocelot();
 
181
        ~Ocelot();
 
182
            
 
183
        void startPuma();
 
184
        
 
185
        bool addPages(string fileName, bool multipage = true, int index = -1);
 
186
        uint pageCount();
 
187
        bool deletePage(uint index);
 
188
 
 
189
        void filterLeveler(int factor, int index = -1);
 
190
        void filterBSH(int size, int index = -1);
 
191
        void filterSaveImage(string filename, int index = -1);
 
192
        
 
193
        bool setCurrentPage(uint index);
 
194
        
 
195
        bool loadRaster(int index = -1);
 
196
        bool freeRaster(int index = -1);
 
197
       
 
198
        bool layoutPage(int index = -1);
 
199
        
 
200
        vector<OcelotBlock> getBlockInfo(int index = -1);
 
201
        void setBlockInfo(vector<OcelotBlock> blks, int index = -1);
 
202
        
 
203
        bool recognizePage(int index = -1);
 
204
        
 
205
        vector<OcelotLine> getRecognizedLines();
 
206
        
 
207
        bool savePage(int index = -1, int format = -1);
 
208
        
 
209
        bool setDataPath(string path);
 
210
        
 
211
        bool setLanguage(string lang = "eng");
 
212
        void setDotMatrixMode(bool set = true);
 
213
        void setFaxMode(bool set = true);
 
214
        void setOneColumn(bool set = true);
 
215
        void setDensity(string set = "300");
 
216
        void setOutputFileName(string name);
 
217
        bool setOutputFormat(string set = "starttext");
 
218
        
 
219
   
 
220
};
 
221
 
 
222
#endif