All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
ltrresultiterator.h
Go to the documentation of this file.
1 // File: ltrresultiterator.h
3 // Description: Iterator for tesseract results in strict left-to-right
4 // order that avoids using tesseract internal data structures.
5 // Author: Ray Smith
6 // Created: Fri Feb 26 11:01:06 PST 2010
7 //
8 // (C) Copyright 2010, Google Inc.
9 // Licensed under the Apache License, Version 2.0 (the "License");
10 // you may not use this file except in compliance with the License.
11 // You may obtain a copy of the License at
12 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
20 
21 #ifndef TESSERACT_CCMAIN_LTR_RESULT_ITERATOR_H__
22 #define TESSERACT_CCMAIN_LTR_RESULT_ITERATOR_H__
23 
24 #include "platform.h"
25 #include "pageiterator.h"
26 #include "unichar.h"
27 
28 class BLOB_CHOICE_IT;
29 class WERD_RES;
30 
31 namespace tesseract {
32 
33 class Tesseract;
34 
35 // Class to iterate over tesseract results, providing access to all levels
36 // of the page hierarchy, without including any tesseract headers or having
37 // to handle any tesseract structures.
38 // WARNING! This class points to data held within the TessBaseAPI class, and
39 // therefore can only be used while the TessBaseAPI class still exists and
40 // has not been subjected to a call of Init, SetImage, Recognize, Clear, End
41 // DetectOS, or anything else that changes the internal PAGE_RES.
42 // See apitypes.h for the definition of PageIteratorLevel.
43 // See also base class PageIterator, which contains the bulk of the interface.
44 // LTRResultIterator adds text-specific methods for access to OCR output.
45 
47  friend class ChoiceIterator;
48  public:
49  // page_res and tesseract come directly from the BaseAPI.
50  // The rectangle parameters are copied indirectly from the Thresholder,
51  // via the BaseAPI. They represent the coordinates of some rectangle in an
52  // original image (in top-left-origin coordinates) and therefore the top-left
53  // needs to be added to any output boxes in order to specify coordinates
54  // in the original image. See TessBaseAPI::SetRectangle.
55  // The scale and scaled_yres are in case the Thresholder scaled the image
56  // rectangle prior to thresholding. Any coordinates in tesseract's image
57  // must be divided by scale before adding (rect_left, rect_top).
58  // The scaled_yres indicates the effective resolution of the binary image
59  // that tesseract has been given by the Thresholder.
60  // After the constructor, Begin has already been called.
62  int scale, int scaled_yres,
63  int rect_left, int rect_top,
64  int rect_width, int rect_height);
65  virtual ~LTRResultIterator();
66 
67  // LTRResultIterators may be copied! This makes it possible to iterate over
68  // all the objects at a lower level, while maintaining an iterator to
69  // objects at a higher level. These constructors DO NOT CALL Begin, so
70  // iterations will continue from the location of src.
71  // TODO: For now the copy constructor and operator= only need the base class
72  // versions, but if new data members are added, don't forget to add them!
73 
74  // ============= Moving around within the page ============.
75 
76  // See PageIterator.
77 
78  // ============= Accessing data ==============.
79 
80  // Returns the null terminated UTF-8 encoded text string for the current
81  // object at the given level. Use delete [] to free after use.
82  char* GetUTF8Text(PageIteratorLevel level) const;
83 
84  // Set the string inserted at the end of each text line. "\n" by default.
85  void SetLineSeparator(const char *new_line);
86 
87  // Set the string inserted at the end of each paragraph. "\n" by default.
88  void SetParagraphSeparator(const char *new_para);
89 
90  // Returns the mean confidence of the current object at the given level.
91  // The number should be interpreted as a percent probability. (0.0f-100.0f)
92  float Confidence(PageIteratorLevel level) const;
93 
94  // ============= Functions that refer to words only ============.
95 
96  // Returns the font attributes of the current word. If iterating at a higher
97  // level object than words, eg textlines, then this will return the
98  // attributes of the first word in that textline.
99  // The actual return value is a string representing a font name. It points
100  // to an internal table and SHOULD NOT BE DELETED. Lifespan is the same as
101  // the iterator itself, ie rendered invalid by various members of
102  // TessBaseAPI, including Init, SetImage, End or deleting the TessBaseAPI.
103  // Pointsize is returned in printers points (1/72 inch.)
104  const char* WordFontAttributes(bool* is_bold,
105  bool* is_italic,
106  bool* is_underlined,
107  bool* is_monospace,
108  bool* is_serif,
109  bool* is_smallcaps,
110  int* pointsize,
111  int* font_id) const;
112 
113  // Return the name of the language used to recognize this word.
114  // On error, NULL. Do not delete this pointer.
115  const char* WordRecognitionLanguage() const;
116 
117  // Return the overall directionality of this word.
118  StrongScriptDirection WordDirection() const;
119 
120  // Returns true if the current word was found in a dictionary.
121  bool WordIsFromDictionary() const;
122 
123  // Returns true if the current word is numeric.
124  bool WordIsNumeric() const;
125 
126  // Returns true if the word contains blamer information.
127  bool HasBlamerInfo() const;
128 
129  // Returns the pointer to ParamsTrainingBundle stored in the BlamerBundle
130  // of the current word.
131  const void *GetParamsTrainingBundle() const;
132 
133  // Returns a pointer to the string with blamer information for this word.
134  // Assumes that the word's blamer_bundle is not NULL.
135  const char *GetBlamerDebug() const;
136 
137  // Returns a pointer to the string with misadaption information for this word.
138  // Assumes that the word's blamer_bundle is not NULL.
139  const char *GetBlamerMisadaptionDebug() const;
140 
141  // Returns true if a truth string was recorded for the current word.
142  bool HasTruthString() const;
143 
144  // Returns true if the given string is equivalent to the truth string for
145  // the current word.
146  bool EquivalentToTruth(const char *str) const;
147 
148  // Returns a null terminated UTF-8 encoded truth string for the current word.
149  // Use delete [] to free after use.
150  char* WordTruthUTF8Text() const;
151 
152  // Returns a null terminated UTF-8 encoded normalized OCR string for the
153  // current word. Use delete [] to free after use.
154  char* WordNormedUTF8Text() const;
155 
156  // Returns a pointer to serialized choice lattice.
157  // Fills lattice_size with the number of bytes in lattice data.
158  const char *WordLattice(int *lattice_size) const;
159 
160  // ============= Functions that refer to symbols only ============.
161 
162  // Returns true if the current symbol is a superscript.
163  // If iterating at a higher level object than symbols, eg words, then
164  // this will return the attributes of the first symbol in that word.
165  bool SymbolIsSuperscript() const;
166  // Returns true if the current symbol is a subscript.
167  // If iterating at a higher level object than symbols, eg words, then
168  // this will return the attributes of the first symbol in that word.
169  bool SymbolIsSubscript() const;
170  // Returns true if the current symbol is a dropcap.
171  // If iterating at a higher level object than symbols, eg words, then
172  // this will return the attributes of the first symbol in that word.
173  bool SymbolIsDropcap() const;
174 
175  protected:
176  const char *line_separator_;
177  const char *paragraph_separator_;
178 };
179 
180 // Class to iterate over the classifier choices for a single RIL_SYMBOL.
182  public:
183  // Construction is from a LTRResultIterator that points to the symbol of
184  // interest. The ChoiceIterator allows a one-shot iteration over the
185  // choices for this symbol and after that is is useless.
186  explicit ChoiceIterator(const LTRResultIterator& result_it);
187  ~ChoiceIterator();
188 
189  // Moves to the next choice for the symbol and returns false if there
190  // are none left.
191  bool Next();
192 
193  // ============= Accessing data ==============.
194 
195  // Returns the null terminated UTF-8 encoded text string for the current
196  // choice.
197  // NOTE: Unlike LTRResultIterator::GetUTF8Text, the return points to an
198  // internal structure and should NOT be delete[]ed to free after use.
199  const char* GetUTF8Text() const;
200 
201  // Returns the confidence of the current choice.
202  // The number should be interpreted as a percent probability. (0.0f-100.0f)
203  float Confidence() const;
204 
205  private:
206  // Pointer to the WERD_RES object owned by the API.
207  WERD_RES* word_res_;
208  // Iterator over the blob choices.
209  BLOB_CHOICE_IT* choice_it_;
210 };
211 
212 } // namespace tesseract.
213 
214 #endif // TESSERACT_CCMAIN_LTR_RESULT_ITERATOR_H__
StrongScriptDirection
Definition: unichar.h:40
#define new_line()
Definition: cutil.h:83
#define TESS_API
Definition: platform.h:73
const char * GetUTF8Text() const
ChoiceIterator(const LTRResultIterator &result_it)