tesseract_bin 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (612) hide show
  1. data/.document +5 -0
  2. data/Gemfile +14 -0
  3. data/Gemfile.lock +23 -0
  4. data/LICENSE.txt +20 -0
  5. data/README.rdoc +19 -0
  6. data/Rakefile +46 -0
  7. data/VERSION +1 -0
  8. data/ext/tesseract_bin/extconf.rb +17 -0
  9. data/lib/tesseract_bin.rb +12 -0
  10. data/tesseract_bin.gemspec +660 -0
  11. data/test/helper.rb +18 -0
  12. data/test/test_tesseract_bin.rb +7 -0
  13. data/vendor/tesseract-2.04/AUTHORS +8 -0
  14. data/vendor/tesseract-2.04/COPYING +23 -0
  15. data/vendor/tesseract-2.04/ChangeLog +71 -0
  16. data/vendor/tesseract-2.04/INSTALL +229 -0
  17. data/vendor/tesseract-2.04/Makefile.am +20 -0
  18. data/vendor/tesseract-2.04/Makefile.in +641 -0
  19. data/vendor/tesseract-2.04/NEWS +1 -0
  20. data/vendor/tesseract-2.04/README +138 -0
  21. data/vendor/tesseract-2.04/ReleaseNotes +213 -0
  22. data/vendor/tesseract-2.04/StdAfx.cpp +8 -0
  23. data/vendor/tesseract-2.04/StdAfx.h +24 -0
  24. data/vendor/tesseract-2.04/ccmain/Makefile.am +63 -0
  25. data/vendor/tesseract-2.04/ccmain/Makefile.in +735 -0
  26. data/vendor/tesseract-2.04/ccmain/adaptions.cpp +1082 -0
  27. data/vendor/tesseract-2.04/ccmain/adaptions.h +109 -0
  28. data/vendor/tesseract-2.04/ccmain/applybox.cpp +891 -0
  29. data/vendor/tesseract-2.04/ccmain/applybox.h +73 -0
  30. data/vendor/tesseract-2.04/ccmain/baseapi.cpp +1105 -0
  31. data/vendor/tesseract-2.04/ccmain/baseapi.h +256 -0
  32. data/vendor/tesseract-2.04/ccmain/blobcmp.cpp +76 -0
  33. data/vendor/tesseract-2.04/ccmain/blobcmp.h +29 -0
  34. data/vendor/tesseract-2.04/ccmain/callnet.cpp +93 -0
  35. data/vendor/tesseract-2.04/ccmain/callnet.h +32 -0
  36. data/vendor/tesseract-2.04/ccmain/charcut.cpp +704 -0
  37. data/vendor/tesseract-2.04/ccmain/charcut.h +120 -0
  38. data/vendor/tesseract-2.04/ccmain/charsample.cpp +699 -0
  39. data/vendor/tesseract-2.04/ccmain/control.cpp +1842 -0
  40. data/vendor/tesseract-2.04/ccmain/control.h +198 -0
  41. data/vendor/tesseract-2.04/ccmain/docqual.cpp +1481 -0
  42. data/vendor/tesseract-2.04/ccmain/docqual.h +155 -0
  43. data/vendor/tesseract-2.04/ccmain/expandblob.cpp +82 -0
  44. data/vendor/tesseract-2.04/ccmain/expandblob.h +13 -0
  45. data/vendor/tesseract-2.04/ccmain/fixspace.cpp +989 -0
  46. data/vendor/tesseract-2.04/ccmain/fixspace.h +72 -0
  47. data/vendor/tesseract-2.04/ccmain/fixxht.cpp +825 -0
  48. data/vendor/tesseract-2.04/ccmain/fixxht.h +93 -0
  49. data/vendor/tesseract-2.04/ccmain/imgscale.cpp +154 -0
  50. data/vendor/tesseract-2.04/ccmain/imgscale.h +32 -0
  51. data/vendor/tesseract-2.04/ccmain/matmatch.cpp +391 -0
  52. data/vendor/tesseract-2.04/ccmain/matmatch.h +48 -0
  53. data/vendor/tesseract-2.04/ccmain/output.cpp +1273 -0
  54. data/vendor/tesseract-2.04/ccmain/output.h +116 -0
  55. data/vendor/tesseract-2.04/ccmain/pagewalk.cpp +666 -0
  56. data/vendor/tesseract-2.04/ccmain/pagewalk.h +155 -0
  57. data/vendor/tesseract-2.04/ccmain/paircmp.cpp +107 -0
  58. data/vendor/tesseract-2.04/ccmain/paircmp.h +43 -0
  59. data/vendor/tesseract-2.04/ccmain/pgedit.cpp +1867 -0
  60. data/vendor/tesseract-2.04/ccmain/pgedit.h +181 -0
  61. data/vendor/tesseract-2.04/ccmain/reject.cpp +1775 -0
  62. data/vendor/tesseract-2.04/ccmain/reject.h +181 -0
  63. data/vendor/tesseract-2.04/ccmain/scaleimg.cpp +366 -0
  64. data/vendor/tesseract-2.04/ccmain/scaleimg.h +35 -0
  65. data/vendor/tesseract-2.04/ccmain/tessbox.cpp +375 -0
  66. data/vendor/tesseract-2.04/ccmain/tessbox.h +110 -0
  67. data/vendor/tesseract-2.04/ccmain/tessedit.cpp +278 -0
  68. data/vendor/tesseract-2.04/ccmain/tessedit.h +49 -0
  69. data/vendor/tesseract-2.04/ccmain/tessembedded.cpp +110 -0
  70. data/vendor/tesseract-2.04/ccmain/tessembedded.h +38 -0
  71. data/vendor/tesseract-2.04/ccmain/tesseractfull.cc +37 -0
  72. data/vendor/tesseract-2.04/ccmain/tesseractmain.cpp +387 -0
  73. data/vendor/tesseract-2.04/ccmain/tesseractmain.h +58 -0
  74. data/vendor/tesseract-2.04/ccmain/tessio.h +110 -0
  75. data/vendor/tesseract-2.04/ccmain/tessvars.cpp +38 -0
  76. data/vendor/tesseract-2.04/ccmain/tessvars.h +48 -0
  77. data/vendor/tesseract-2.04/ccmain/tfacep.h +62 -0
  78. data/vendor/tesseract-2.04/ccmain/tfacepp.cpp +443 -0
  79. data/vendor/tesseract-2.04/ccmain/tfacepp.h +85 -0
  80. data/vendor/tesseract-2.04/ccmain/tstruct.cpp +549 -0
  81. data/vendor/tesseract-2.04/ccmain/tstruct.h +108 -0
  82. data/vendor/tesseract-2.04/ccmain/varabled.cpp +346 -0
  83. data/vendor/tesseract-2.04/ccmain/varabled.h +125 -0
  84. data/vendor/tesseract-2.04/ccmain/werdit.cpp +193 -0
  85. data/vendor/tesseract-2.04/ccmain/werdit.h +67 -0
  86. data/vendor/tesseract-2.04/ccstruct/Makefile.am +25 -0
  87. data/vendor/tesseract-2.04/ccstruct/Makefile.in +650 -0
  88. data/vendor/tesseract-2.04/ccstruct/blckerr.h +29 -0
  89. data/vendor/tesseract-2.04/ccstruct/blobbox.cpp +778 -0
  90. data/vendor/tesseract-2.04/ccstruct/blobbox.h +381 -0
  91. data/vendor/tesseract-2.04/ccstruct/blobs.cpp +247 -0
  92. data/vendor/tesseract-2.04/ccstruct/blobs.h +119 -0
  93. data/vendor/tesseract-2.04/ccstruct/blread.cpp +537 -0
  94. data/vendor/tesseract-2.04/ccstruct/blread.h +63 -0
  95. data/vendor/tesseract-2.04/ccstruct/callcpp.cpp +252 -0
  96. data/vendor/tesseract-2.04/ccstruct/coutln.cpp +650 -0
  97. data/vendor/tesseract-2.04/ccstruct/coutln.h +186 -0
  98. data/vendor/tesseract-2.04/ccstruct/crakedge.h +39 -0
  99. data/vendor/tesseract-2.04/ccstruct/genblob.cpp +133 -0
  100. data/vendor/tesseract-2.04/ccstruct/genblob.h +52 -0
  101. data/vendor/tesseract-2.04/ccstruct/hpddef.h +39 -0
  102. data/vendor/tesseract-2.04/ccstruct/hpdsizes.h +8 -0
  103. data/vendor/tesseract-2.04/ccstruct/ipoints.h +479 -0
  104. data/vendor/tesseract-2.04/ccstruct/labls.cpp +188 -0
  105. data/vendor/tesseract-2.04/ccstruct/labls.h +38 -0
  106. data/vendor/tesseract-2.04/ccstruct/linlsq.cpp +249 -0
  107. data/vendor/tesseract-2.04/ccstruct/linlsq.h +102 -0
  108. data/vendor/tesseract-2.04/ccstruct/lmedsq.cpp +453 -0
  109. data/vendor/tesseract-2.04/ccstruct/lmedsq.h +84 -0
  110. data/vendor/tesseract-2.04/ccstruct/mod128.cpp +100 -0
  111. data/vendor/tesseract-2.04/ccstruct/mod128.h +85 -0
  112. data/vendor/tesseract-2.04/ccstruct/normalis.cpp +176 -0
  113. data/vendor/tesseract-2.04/ccstruct/normalis.h +108 -0
  114. data/vendor/tesseract-2.04/ccstruct/ocrblock.cpp +369 -0
  115. data/vendor/tesseract-2.04/ccstruct/ocrblock.h +235 -0
  116. data/vendor/tesseract-2.04/ccstruct/ocrrow.cpp +216 -0
  117. data/vendor/tesseract-2.04/ccstruct/ocrrow.h +133 -0
  118. data/vendor/tesseract-2.04/ccstruct/pageblk.cpp +879 -0
  119. data/vendor/tesseract-2.04/ccstruct/pageblk.h +318 -0
  120. data/vendor/tesseract-2.04/ccstruct/pageres.cpp +330 -0
  121. data/vendor/tesseract-2.04/ccstruct/pageres.h +313 -0
  122. data/vendor/tesseract-2.04/ccstruct/pdblock.cpp +361 -0
  123. data/vendor/tesseract-2.04/ccstruct/pdblock.h +181 -0
  124. data/vendor/tesseract-2.04/ccstruct/pdclass.h +54 -0
  125. data/vendor/tesseract-2.04/ccstruct/points.cpp +102 -0
  126. data/vendor/tesseract-2.04/ccstruct/points.h +299 -0
  127. data/vendor/tesseract-2.04/ccstruct/polyaprx.cpp +588 -0
  128. data/vendor/tesseract-2.04/ccstruct/polyaprx.h +51 -0
  129. data/vendor/tesseract-2.04/ccstruct/polyblk.cpp +398 -0
  130. data/vendor/tesseract-2.04/ccstruct/polyblk.h +122 -0
  131. data/vendor/tesseract-2.04/ccstruct/polyblob.cpp +357 -0
  132. data/vendor/tesseract-2.04/ccstruct/polyblob.h +102 -0
  133. data/vendor/tesseract-2.04/ccstruct/polyvert.cpp +23 -0
  134. data/vendor/tesseract-2.04/ccstruct/polyvert.h +58 -0
  135. data/vendor/tesseract-2.04/ccstruct/poutline.cpp +441 -0
  136. data/vendor/tesseract-2.04/ccstruct/poutline.h +125 -0
  137. data/vendor/tesseract-2.04/ccstruct/quadlsq.cpp +147 -0
  138. data/vendor/tesseract-2.04/ccstruct/quadlsq.h +67 -0
  139. data/vendor/tesseract-2.04/ccstruct/quadratc.cpp +21 -0
  140. data/vendor/tesseract-2.04/ccstruct/quadratc.h +63 -0
  141. data/vendor/tesseract-2.04/ccstruct/quspline.cpp +382 -0
  142. data/vendor/tesseract-2.04/ccstruct/quspline.h +113 -0
  143. data/vendor/tesseract-2.04/ccstruct/ratngs.cpp +372 -0
  144. data/vendor/tesseract-2.04/ccstruct/ratngs.h +198 -0
  145. data/vendor/tesseract-2.04/ccstruct/rect.cpp +229 -0
  146. data/vendor/tesseract-2.04/ccstruct/rect.h +320 -0
  147. data/vendor/tesseract-2.04/ccstruct/rejctmap.cpp +545 -0
  148. data/vendor/tesseract-2.04/ccstruct/rejctmap.h +284 -0
  149. data/vendor/tesseract-2.04/ccstruct/rwpoly.cpp +89 -0
  150. data/vendor/tesseract-2.04/ccstruct/rwpoly.h +45 -0
  151. data/vendor/tesseract-2.04/ccstruct/statistc.cpp +905 -0
  152. data/vendor/tesseract-2.04/ccstruct/statistc.h +135 -0
  153. data/vendor/tesseract-2.04/ccstruct/stepblob.cpp +296 -0
  154. data/vendor/tesseract-2.04/ccstruct/stepblob.h +88 -0
  155. data/vendor/tesseract-2.04/ccstruct/txtregn.cpp +230 -0
  156. data/vendor/tesseract-2.04/ccstruct/txtregn.h +155 -0
  157. data/vendor/tesseract-2.04/ccstruct/vecfuncs.cpp +63 -0
  158. data/vendor/tesseract-2.04/ccstruct/vecfuncs.h +91 -0
  159. data/vendor/tesseract-2.04/ccstruct/werd.cpp +967 -0
  160. data/vendor/tesseract-2.04/ccstruct/werd.h +277 -0
  161. data/vendor/tesseract-2.04/ccutil/Makefile.am +19 -0
  162. data/vendor/tesseract-2.04/ccutil/Makefile.in +626 -0
  163. data/vendor/tesseract-2.04/ccutil/basedir.cpp +118 -0
  164. data/vendor/tesseract-2.04/ccutil/basedir.h +32 -0
  165. data/vendor/tesseract-2.04/ccutil/bits16.cpp +30 -0
  166. data/vendor/tesseract-2.04/ccutil/bits16.h +61 -0
  167. data/vendor/tesseract-2.04/ccutil/boxread.cpp +105 -0
  168. data/vendor/tesseract-2.04/ccutil/boxread.h +44 -0
  169. data/vendor/tesseract-2.04/ccutil/clst.cpp +626 -0
  170. data/vendor/tesseract-2.04/ccutil/clst.h +1085 -0
  171. data/vendor/tesseract-2.04/ccutil/debugwin.cpp +500 -0
  172. data/vendor/tesseract-2.04/ccutil/debugwin.h +103 -0
  173. data/vendor/tesseract-2.04/ccutil/elst.cpp +593 -0
  174. data/vendor/tesseract-2.04/ccutil/elst.h +1125 -0
  175. data/vendor/tesseract-2.04/ccutil/elst2.cpp +606 -0
  176. data/vendor/tesseract-2.04/ccutil/elst2.h +1121 -0
  177. data/vendor/tesseract-2.04/ccutil/errcode.cpp +104 -0
  178. data/vendor/tesseract-2.04/ccutil/errcode.h +104 -0
  179. data/vendor/tesseract-2.04/ccutil/fileerr.h +34 -0
  180. data/vendor/tesseract-2.04/ccutil/globaloc.cpp +115 -0
  181. data/vendor/tesseract-2.04/ccutil/globaloc.h +40 -0
  182. data/vendor/tesseract-2.04/ccutil/hashfn.cpp +57 -0
  183. data/vendor/tesseract-2.04/ccutil/hashfn.h +30 -0
  184. data/vendor/tesseract-2.04/ccutil/host.h +180 -0
  185. data/vendor/tesseract-2.04/ccutil/hosthplb.h +1 -0
  186. data/vendor/tesseract-2.04/ccutil/lsterr.h +43 -0
  187. data/vendor/tesseract-2.04/ccutil/mainblk.cpp +126 -0
  188. data/vendor/tesseract-2.04/ccutil/mainblk.h +39 -0
  189. data/vendor/tesseract-2.04/ccutil/memblk.cpp +1106 -0
  190. data/vendor/tesseract-2.04/ccutil/memblk.h +189 -0
  191. data/vendor/tesseract-2.04/ccutil/memry.cpp +532 -0
  192. data/vendor/tesseract-2.04/ccutil/memry.h +192 -0
  193. data/vendor/tesseract-2.04/ccutil/memryerr.h +38 -0
  194. data/vendor/tesseract-2.04/ccutil/mfcpch.cpp +5 -0
  195. data/vendor/tesseract-2.04/ccutil/mfcpch.h +37 -0
  196. data/vendor/tesseract-2.04/ccutil/ndminx.h +31 -0
  197. data/vendor/tesseract-2.04/ccutil/notdll.h +28 -0
  198. data/vendor/tesseract-2.04/ccutil/nwmain.h +176 -0
  199. data/vendor/tesseract-2.04/ccutil/ocrclass.h +345 -0
  200. data/vendor/tesseract-2.04/ccutil/ocrshell.cpp +772 -0
  201. data/vendor/tesseract-2.04/ccutil/ocrshell.h +191 -0
  202. data/vendor/tesseract-2.04/ccutil/platform.h +18 -0
  203. data/vendor/tesseract-2.04/ccutil/scanutils.cpp +543 -0
  204. data/vendor/tesseract-2.04/ccutil/scanutils.h +55 -0
  205. data/vendor/tesseract-2.04/ccutil/secname.h +9 -0
  206. data/vendor/tesseract-2.04/ccutil/serialis.cpp +117 -0
  207. data/vendor/tesseract-2.04/ccutil/serialis.h +93 -0
  208. data/vendor/tesseract-2.04/ccutil/stderr.h +26 -0
  209. data/vendor/tesseract-2.04/ccutil/strngs.cpp +495 -0
  210. data/vendor/tesseract-2.04/ccutil/strngs.h +138 -0
  211. data/vendor/tesseract-2.04/ccutil/tessclas.h +135 -0
  212. data/vendor/tesseract-2.04/ccutil/tessopt.cpp +61 -0
  213. data/vendor/tesseract-2.04/ccutil/tessopt.h +30 -0
  214. data/vendor/tesseract-2.04/ccutil/tprintf.cpp +122 -0
  215. data/vendor/tesseract-2.04/ccutil/tprintf.h +35 -0
  216. data/vendor/tesseract-2.04/ccutil/unichar.cpp +144 -0
  217. data/vendor/tesseract-2.04/ccutil/unichar.h +84 -0
  218. data/vendor/tesseract-2.04/ccutil/unicharmap.cpp +172 -0
  219. data/vendor/tesseract-2.04/ccutil/unicharmap.h +82 -0
  220. data/vendor/tesseract-2.04/ccutil/unicharset.cpp +307 -0
  221. data/vendor/tesseract-2.04/ccutil/unicharset.h +267 -0
  222. data/vendor/tesseract-2.04/ccutil/varable.cpp +672 -0
  223. data/vendor/tesseract-2.04/ccutil/varable.h +419 -0
  224. data/vendor/tesseract-2.04/classify/Makefile.am +24 -0
  225. data/vendor/tesseract-2.04/classify/Makefile.in +647 -0
  226. data/vendor/tesseract-2.04/classify/adaptive.cpp +535 -0
  227. data/vendor/tesseract-2.04/classify/adaptive.h +199 -0
  228. data/vendor/tesseract-2.04/classify/adaptmatch.cpp +2958 -0
  229. data/vendor/tesseract-2.04/classify/adaptmatch.h +86 -0
  230. data/vendor/tesseract-2.04/classify/baseline.cpp +58 -0
  231. data/vendor/tesseract-2.04/classify/baseline.h +91 -0
  232. data/vendor/tesseract-2.04/classify/blobclass.cpp +123 -0
  233. data/vendor/tesseract-2.04/classify/blobclass.h +49 -0
  234. data/vendor/tesseract-2.04/classify/chartoname.cpp +74 -0
  235. data/vendor/tesseract-2.04/classify/chartoname.h +21 -0
  236. data/vendor/tesseract-2.04/classify/cluster.cpp +2834 -0
  237. data/vendor/tesseract-2.04/classify/cluster.h +158 -0
  238. data/vendor/tesseract-2.04/classify/clusttool.cpp +507 -0
  239. data/vendor/tesseract-2.04/classify/clusttool.h +70 -0
  240. data/vendor/tesseract-2.04/classify/cutoffs.cpp +73 -0
  241. data/vendor/tesseract-2.04/classify/cutoffs.h +49 -0
  242. data/vendor/tesseract-2.04/classify/extern.h +32 -0
  243. data/vendor/tesseract-2.04/classify/extract.cpp +100 -0
  244. data/vendor/tesseract-2.04/classify/extract.h +36 -0
  245. data/vendor/tesseract-2.04/classify/featdefs.cpp +244 -0
  246. data/vendor/tesseract-2.04/classify/featdefs.h +71 -0
  247. data/vendor/tesseract-2.04/classify/flexfx.cpp +87 -0
  248. data/vendor/tesseract-2.04/classify/flexfx.h +34 -0
  249. data/vendor/tesseract-2.04/classify/float2int.cpp +126 -0
  250. data/vendor/tesseract-2.04/classify/float2int.h +65 -0
  251. data/vendor/tesseract-2.04/classify/fpoint.cpp +73 -0
  252. data/vendor/tesseract-2.04/classify/fpoint.h +63 -0
  253. data/vendor/tesseract-2.04/classify/fxdefs.cpp +74 -0
  254. data/vendor/tesseract-2.04/classify/fxdefs.h +93 -0
  255. data/vendor/tesseract-2.04/classify/fxid.h +69 -0
  256. data/vendor/tesseract-2.04/classify/hideedge.cpp +35 -0
  257. data/vendor/tesseract-2.04/classify/hideedge.h +76 -0
  258. data/vendor/tesseract-2.04/classify/intfx.cpp +608 -0
  259. data/vendor/tesseract-2.04/classify/intfx.h +63 -0
  260. data/vendor/tesseract-2.04/classify/intmatcher.cpp +1524 -0
  261. data/vendor/tesseract-2.04/classify/intmatcher.h +199 -0
  262. data/vendor/tesseract-2.04/classify/intproto.cpp +1823 -0
  263. data/vendor/tesseract-2.04/classify/intproto.h +320 -0
  264. data/vendor/tesseract-2.04/classify/kdtree.cpp +884 -0
  265. data/vendor/tesseract-2.04/classify/kdtree.h +118 -0
  266. data/vendor/tesseract-2.04/classify/mf.cpp +106 -0
  267. data/vendor/tesseract-2.04/classify/mf.h +43 -0
  268. data/vendor/tesseract-2.04/classify/mfdefs.cpp +58 -0
  269. data/vendor/tesseract-2.04/classify/mfdefs.h +60 -0
  270. data/vendor/tesseract-2.04/classify/mfoutline.cpp +1087 -0
  271. data/vendor/tesseract-2.04/classify/mfoutline.h +277 -0
  272. data/vendor/tesseract-2.04/classify/mfx.cpp +436 -0
  273. data/vendor/tesseract-2.04/classify/mfx.h +52 -0
  274. data/vendor/tesseract-2.04/classify/normfeat.cpp +132 -0
  275. data/vendor/tesseract-2.04/classify/normfeat.h +63 -0
  276. data/vendor/tesseract-2.04/classify/normmatch.cpp +305 -0
  277. data/vendor/tesseract-2.04/classify/normmatch.h +38 -0
  278. data/vendor/tesseract-2.04/classify/ocrfeatures.cpp +310 -0
  279. data/vendor/tesseract-2.04/classify/ocrfeatures.h +148 -0
  280. data/vendor/tesseract-2.04/classify/outfeat.cpp +262 -0
  281. data/vendor/tesseract-2.04/classify/outfeat.h +76 -0
  282. data/vendor/tesseract-2.04/classify/picofeat.cpp +297 -0
  283. data/vendor/tesseract-2.04/classify/picofeat.h +65 -0
  284. data/vendor/tesseract-2.04/classify/protos.cpp +472 -0
  285. data/vendor/tesseract-2.04/classify/protos.h +258 -0
  286. data/vendor/tesseract-2.04/classify/sigmenu.cpp +225 -0
  287. data/vendor/tesseract-2.04/classify/sigmenu.h +39 -0
  288. data/vendor/tesseract-2.04/classify/speckle.cpp +127 -0
  289. data/vendor/tesseract-2.04/classify/speckle.h +69 -0
  290. data/vendor/tesseract-2.04/classify/xform2d.cpp +120 -0
  291. data/vendor/tesseract-2.04/classify/xform2d.h +60 -0
  292. data/vendor/tesseract-2.04/config/config.guess +1466 -0
  293. data/vendor/tesseract-2.04/config/config.h.in +188 -0
  294. data/vendor/tesseract-2.04/config/config.sub +1579 -0
  295. data/vendor/tesseract-2.04/config/depcomp +530 -0
  296. data/vendor/tesseract-2.04/config/install-sh +269 -0
  297. data/vendor/tesseract-2.04/config/missing +198 -0
  298. data/vendor/tesseract-2.04/config/mkinstalldirs +40 -0
  299. data/vendor/tesseract-2.04/config/stamp-h.in +0 -0
  300. data/vendor/tesseract-2.04/configure +10424 -0
  301. data/vendor/tesseract-2.04/cutil/Makefile.am +14 -0
  302. data/vendor/tesseract-2.04/cutil/Makefile.in +612 -0
  303. data/vendor/tesseract-2.04/cutil/bitvec.cpp +115 -0
  304. data/vendor/tesseract-2.04/cutil/bitvec.h +100 -0
  305. data/vendor/tesseract-2.04/cutil/callcpp.h +190 -0
  306. data/vendor/tesseract-2.04/cutil/const.h +108 -0
  307. data/vendor/tesseract-2.04/cutil/cutil.cpp +92 -0
  308. data/vendor/tesseract-2.04/cutil/cutil.h +159 -0
  309. data/vendor/tesseract-2.04/cutil/danerror.cpp +144 -0
  310. data/vendor/tesseract-2.04/cutil/danerror.h +41 -0
  311. data/vendor/tesseract-2.04/cutil/debug.cpp +97 -0
  312. data/vendor/tesseract-2.04/cutil/debug.h +348 -0
  313. data/vendor/tesseract-2.04/cutil/efio.cpp +62 -0
  314. data/vendor/tesseract-2.04/cutil/efio.h +32 -0
  315. data/vendor/tesseract-2.04/cutil/emalloc.cpp +91 -0
  316. data/vendor/tesseract-2.04/cutil/emalloc.h +44 -0
  317. data/vendor/tesseract-2.04/cutil/freelist.cpp +75 -0
  318. data/vendor/tesseract-2.04/cutil/freelist.h +45 -0
  319. data/vendor/tesseract-2.04/cutil/funcdefs.h +35 -0
  320. data/vendor/tesseract-2.04/cutil/general.h +33 -0
  321. data/vendor/tesseract-2.04/cutil/globals.cpp +69 -0
  322. data/vendor/tesseract-2.04/cutil/globals.h +70 -0
  323. data/vendor/tesseract-2.04/cutil/listio.cpp +68 -0
  324. data/vendor/tesseract-2.04/cutil/listio.h +43 -0
  325. data/vendor/tesseract-2.04/cutil/minmax.h +40 -0
  326. data/vendor/tesseract-2.04/cutil/oldheap.cpp +337 -0
  327. data/vendor/tesseract-2.04/cutil/oldheap.h +126 -0
  328. data/vendor/tesseract-2.04/cutil/oldlist.cpp +393 -0
  329. data/vendor/tesseract-2.04/cutil/oldlist.h +350 -0
  330. data/vendor/tesseract-2.04/cutil/structures.cpp +66 -0
  331. data/vendor/tesseract-2.04/cutil/structures.h +112 -0
  332. data/vendor/tesseract-2.04/cutil/tessarray.cpp +115 -0
  333. data/vendor/tesseract-2.04/cutil/tessarray.h +166 -0
  334. data/vendor/tesseract-2.04/cutil/tordvars.cpp +95 -0
  335. data/vendor/tesseract-2.04/cutil/tordvars.h +61 -0
  336. data/vendor/tesseract-2.04/cutil/variables.cpp +317 -0
  337. data/vendor/tesseract-2.04/cutil/variables.h +170 -0
  338. data/vendor/tesseract-2.04/dict/Makefile.am +13 -0
  339. data/vendor/tesseract-2.04/dict/Makefile.in +609 -0
  340. data/vendor/tesseract-2.04/dict/choicearr.h +96 -0
  341. data/vendor/tesseract-2.04/dict/choices.cpp +210 -0
  342. data/vendor/tesseract-2.04/dict/choices.h +241 -0
  343. data/vendor/tesseract-2.04/dict/context.cpp +270 -0
  344. data/vendor/tesseract-2.04/dict/context.h +82 -0
  345. data/vendor/tesseract-2.04/dict/dawg.cpp +363 -0
  346. data/vendor/tesseract-2.04/dict/dawg.h +394 -0
  347. data/vendor/tesseract-2.04/dict/hyphen.cpp +84 -0
  348. data/vendor/tesseract-2.04/dict/hyphen.h +125 -0
  349. data/vendor/tesseract-2.04/dict/lookdawg.cpp +228 -0
  350. data/vendor/tesseract-2.04/dict/lookdawg.h +76 -0
  351. data/vendor/tesseract-2.04/dict/makedawg.cpp +449 -0
  352. data/vendor/tesseract-2.04/dict/makedawg.h +83 -0
  353. data/vendor/tesseract-2.04/dict/matchdefs.h +145 -0
  354. data/vendor/tesseract-2.04/dict/permdawg.cpp +415 -0
  355. data/vendor/tesseract-2.04/dict/permdawg.h +98 -0
  356. data/vendor/tesseract-2.04/dict/permngram.cpp +358 -0
  357. data/vendor/tesseract-2.04/dict/permngram.h +33 -0
  358. data/vendor/tesseract-2.04/dict/permnum.cpp +522 -0
  359. data/vendor/tesseract-2.04/dict/permnum.h +83 -0
  360. data/vendor/tesseract-2.04/dict/permute.cpp +1704 -0
  361. data/vendor/tesseract-2.04/dict/permute.h +93 -0
  362. data/vendor/tesseract-2.04/dict/reduce.cpp +424 -0
  363. data/vendor/tesseract-2.04/dict/reduce.h +112 -0
  364. data/vendor/tesseract-2.04/dict/states.cpp +382 -0
  365. data/vendor/tesseract-2.04/dict/states.h +111 -0
  366. data/vendor/tesseract-2.04/dict/stopper.cpp +1458 -0
  367. data/vendor/tesseract-2.04/dict/stopper.h +103 -0
  368. data/vendor/tesseract-2.04/dict/trie.cpp +683 -0
  369. data/vendor/tesseract-2.04/dict/trie.h +190 -0
  370. data/vendor/tesseract-2.04/dlltest/Makefile.am +2 -0
  371. data/vendor/tesseract-2.04/dlltest/Makefile.in +388 -0
  372. data/vendor/tesseract-2.04/dlltest/dlltest.cpp +163 -0
  373. data/vendor/tesseract-2.04/dlltest/dlltest.dsp +186 -0
  374. data/vendor/tesseract-2.04/dlltest/dlltest.vcproj +637 -0
  375. data/vendor/tesseract-2.04/eurotext.tif +0 -0
  376. data/vendor/tesseract-2.04/image/Makefile.am +10 -0
  377. data/vendor/tesseract-2.04/image/Makefile.in +596 -0
  378. data/vendor/tesseract-2.04/image/bitstrm.cpp +157 -0
  379. data/vendor/tesseract-2.04/image/bitstrm.h +73 -0
  380. data/vendor/tesseract-2.04/image/img.h +336 -0
  381. data/vendor/tesseract-2.04/image/imgbmp.cpp +223 -0
  382. data/vendor/tesseract-2.04/image/imgbmp.h +50 -0
  383. data/vendor/tesseract-2.04/image/imgerrs.h +35 -0
  384. data/vendor/tesseract-2.04/image/imgio.cpp +321 -0
  385. data/vendor/tesseract-2.04/image/imgio.h +22 -0
  386. data/vendor/tesseract-2.04/image/imgs.cpp +1764 -0
  387. data/vendor/tesseract-2.04/image/imgs.h +102 -0
  388. data/vendor/tesseract-2.04/image/imgtiff.cpp +723 -0
  389. data/vendor/tesseract-2.04/image/imgtiff.h +89 -0
  390. data/vendor/tesseract-2.04/image/imgunpk.h +1377 -0
  391. data/vendor/tesseract-2.04/image/svshowim.cpp +40 -0
  392. data/vendor/tesseract-2.04/image/svshowim.h +25 -0
  393. data/vendor/tesseract-2.04/java/Makefile.am +4 -0
  394. data/vendor/tesseract-2.04/java/Makefile.in +473 -0
  395. data/vendor/tesseract-2.04/java/com/Makefile.am +1 -0
  396. data/vendor/tesseract-2.04/java/com/Makefile.in +470 -0
  397. data/vendor/tesseract-2.04/java/com/google/Makefile.am +1 -0
  398. data/vendor/tesseract-2.04/java/com/google/Makefile.in +470 -0
  399. data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.am +4 -0
  400. data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.in +473 -0
  401. data/vendor/tesseract-2.04/java/com/google/scrollview/ScrollView.java +421 -0
  402. data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.am +5 -0
  403. data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.in +474 -0
  404. data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEvent.java +87 -0
  405. data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventHandler.java +296 -0
  406. data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventType.java +31 -0
  407. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.am +7 -0
  408. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.in +476 -0
  409. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVAbstractMenuItem.java +58 -0
  410. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVCheckboxMenuItem.java +60 -0
  411. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVEmptyMenuItem.java +48 -0
  412. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVImageHandler.java +228 -0
  413. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuBar.java +130 -0
  414. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuItem.java +61 -0
  415. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVPopupMenu.java +142 -0
  416. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVSubMenuItem.java +41 -0
  417. data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVWindow.java +643 -0
  418. data/vendor/tesseract-2.04/java/makefile +55 -0
  419. data/vendor/tesseract-2.04/pageseg/Makefile.am +13 -0
  420. data/vendor/tesseract-2.04/pageseg/Makefile.in +596 -0
  421. data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.cpp +363 -0
  422. data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.h +90 -0
  423. data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.cpp +82 -0
  424. data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.h +30 -0
  425. data/vendor/tesseract-2.04/pageseg/pageseg.cpp +170 -0
  426. data/vendor/tesseract-2.04/pageseg/pageseg.h +29 -0
  427. data/vendor/tesseract-2.04/phototest.tif +0 -0
  428. data/vendor/tesseract-2.04/tessdata/Makefile.am +31 -0
  429. data/vendor/tesseract-2.04/tessdata/Makefile.in +529 -0
  430. data/vendor/tesseract-2.04/tessdata/configs/Makefile.am +3 -0
  431. data/vendor/tesseract-2.04/tessdata/configs/Makefile.in +344 -0
  432. data/vendor/tesseract-2.04/tessdata/configs/api_config +1 -0
  433. data/vendor/tesseract-2.04/tessdata/configs/box.train +19 -0
  434. data/vendor/tesseract-2.04/tessdata/configs/box.train.stderr +18 -0
  435. data/vendor/tesseract-2.04/tessdata/configs/inter +4 -0
  436. data/vendor/tesseract-2.04/tessdata/configs/kannada +4 -0
  437. data/vendor/tesseract-2.04/tessdata/configs/makebox +1 -0
  438. data/vendor/tesseract-2.04/tessdata/configs/unlv +3 -0
  439. data/vendor/tesseract-2.04/tessdata/confsets +3 -0
  440. data/vendor/tesseract-2.04/tessdata/eng.DangAmbigs +39 -0
  441. data/vendor/tesseract-2.04/tessdata/eng.freq-dawg +0 -0
  442. data/vendor/tesseract-2.04/tessdata/eng.inttemp +0 -0
  443. data/vendor/tesseract-2.04/tessdata/eng.normproto +1247 -0
  444. data/vendor/tesseract-2.04/tessdata/eng.pffmtable +111 -0
  445. data/vendor/tesseract-2.04/tessdata/eng.unicharset +113 -0
  446. data/vendor/tesseract-2.04/tessdata/eng.user-words +921 -0
  447. data/vendor/tesseract-2.04/tessdata/eng.word-dawg +0 -0
  448. data/vendor/tesseract-2.04/tessdata/makedummies +8 -0
  449. data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.am +3 -0
  450. data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.in +344 -0
  451. data/vendor/tesseract-2.04/tessdata/tessconfigs/batch +2 -0
  452. data/vendor/tesseract-2.04/tessdata/tessconfigs/batch.nochop +2 -0
  453. data/vendor/tesseract-2.04/tessdata/tessconfigs/matdemo +7 -0
  454. data/vendor/tesseract-2.04/tessdata/tessconfigs/msdemo +13 -0
  455. data/vendor/tesseract-2.04/tessdata/tessconfigs/nobatch +2 -0
  456. data/vendor/tesseract-2.04/tessdata/tessconfigs/segdemo +9 -0
  457. data/vendor/tesseract-2.04/tessdll.cpp +351 -0
  458. data/vendor/tesseract-2.04/tessdll.dsp +2050 -0
  459. data/vendor/tesseract-2.04/tessdll.h +143 -0
  460. data/vendor/tesseract-2.04/tessdll.vcproj +5495 -0
  461. data/vendor/tesseract-2.04/tesseract.dsp +2124 -0
  462. data/vendor/tesseract-2.04/tesseract.dsw +116 -0
  463. data/vendor/tesseract-2.04/tesseract.sln +59 -0
  464. data/vendor/tesseract-2.04/tesseract.spec +188 -0
  465. data/vendor/tesseract-2.04/tesseract.vcproj +5859 -0
  466. data/vendor/tesseract-2.04/testing/Makefile.am +2 -0
  467. data/vendor/tesseract-2.04/testing/Makefile.in +312 -0
  468. data/vendor/tesseract-2.04/testing/README +43 -0
  469. data/vendor/tesseract-2.04/testing/counttestset.sh +61 -0
  470. data/vendor/tesseract-2.04/testing/reorgdata.sh +44 -0
  471. data/vendor/tesseract-2.04/testing/reports/1995.bus.3B.sum +1 -0
  472. data/vendor/tesseract-2.04/testing/reports/1995.doe3.3B.sum +1 -0
  473. data/vendor/tesseract-2.04/testing/reports/1995.mag.3B.sum +1 -0
  474. data/vendor/tesseract-2.04/testing/reports/1995.news.3B.sum +1 -0
  475. data/vendor/tesseract-2.04/testing/reports/2.03.summary +9 -0
  476. data/vendor/tesseract-2.04/testing/reports/2.04.summary +9 -0
  477. data/vendor/tesseract-2.04/testing/runalltests.sh +110 -0
  478. data/vendor/tesseract-2.04/testing/runtestset.sh +61 -0
  479. data/vendor/tesseract-2.04/textord/Makefile.am +20 -0
  480. data/vendor/tesseract-2.04/textord/Makefile.in +624 -0
  481. data/vendor/tesseract-2.04/textord/blkocc.cpp +809 -0
  482. data/vendor/tesseract-2.04/textord/blkocc.h +327 -0
  483. data/vendor/tesseract-2.04/textord/blobcmpl.h +31 -0
  484. data/vendor/tesseract-2.04/textord/drawedg.cpp +77 -0
  485. data/vendor/tesseract-2.04/textord/drawedg.h +34 -0
  486. data/vendor/tesseract-2.04/textord/drawtord.cpp +469 -0
  487. data/vendor/tesseract-2.04/textord/drawtord.h +107 -0
  488. data/vendor/tesseract-2.04/textord/edgblob.cpp +412 -0
  489. data/vendor/tesseract-2.04/textord/edgblob.h +100 -0
  490. data/vendor/tesseract-2.04/textord/edgloop.cpp +211 -0
  491. data/vendor/tesseract-2.04/textord/edgloop.h +66 -0
  492. data/vendor/tesseract-2.04/textord/fpchop.cpp +1641 -0
  493. data/vendor/tesseract-2.04/textord/fpchop.h +238 -0
  494. data/vendor/tesseract-2.04/textord/gap_map.cpp +166 -0
  495. data/vendor/tesseract-2.04/textord/gap_map.h +40 -0
  496. data/vendor/tesseract-2.04/textord/makerow.cpp +2628 -0
  497. data/vendor/tesseract-2.04/textord/makerow.h +295 -0
  498. data/vendor/tesseract-2.04/textord/oldbasel.cpp +1761 -0
  499. data/vendor/tesseract-2.04/textord/oldbasel.h +195 -0
  500. data/vendor/tesseract-2.04/textord/pithsync.cpp +696 -0
  501. data/vendor/tesseract-2.04/textord/pithsync.h +134 -0
  502. data/vendor/tesseract-2.04/textord/pitsync1.cpp +425 -0
  503. data/vendor/tesseract-2.04/textord/pitsync1.h +135 -0
  504. data/vendor/tesseract-2.04/textord/scanedg.cpp +452 -0
  505. data/vendor/tesseract-2.04/textord/scanedg.h +74 -0
  506. data/vendor/tesseract-2.04/textord/sortflts.cpp +80 -0
  507. data/vendor/tesseract-2.04/textord/sortflts.h +64 -0
  508. data/vendor/tesseract-2.04/textord/tessout.h +76 -0
  509. data/vendor/tesseract-2.04/textord/topitch.cpp +2019 -0
  510. data/vendor/tesseract-2.04/textord/topitch.h +195 -0
  511. data/vendor/tesseract-2.04/textord/tordmain.cpp +907 -0
  512. data/vendor/tesseract-2.04/textord/tordmain.h +132 -0
  513. data/vendor/tesseract-2.04/textord/tospace.cpp +1939 -0
  514. data/vendor/tesseract-2.04/textord/tospace.h +193 -0
  515. data/vendor/tesseract-2.04/textord/tovars.cpp +87 -0
  516. data/vendor/tesseract-2.04/textord/tovars.h +94 -0
  517. data/vendor/tesseract-2.04/textord/underlin.cpp +312 -0
  518. data/vendor/tesseract-2.04/textord/underlin.h +53 -0
  519. data/vendor/tesseract-2.04/textord/wordseg.cpp +620 -0
  520. data/vendor/tesseract-2.04/textord/wordseg.h +70 -0
  521. data/vendor/tesseract-2.04/training/Makefile.am +54 -0
  522. data/vendor/tesseract-2.04/training/Makefile.in +720 -0
  523. data/vendor/tesseract-2.04/training/cnTraining.cpp +855 -0
  524. data/vendor/tesseract-2.04/training/cntraining.dsp +243 -0
  525. data/vendor/tesseract-2.04/training/cntraining.vcproj +950 -0
  526. data/vendor/tesseract-2.04/training/mergenf.cpp +451 -0
  527. data/vendor/tesseract-2.04/training/mergenf.h +106 -0
  528. data/vendor/tesseract-2.04/training/mfTraining.cpp +1341 -0
  529. data/vendor/tesseract-2.04/training/mftraining.dsp +285 -0
  530. data/vendor/tesseract-2.04/training/mftraining.vcproj +1055 -0
  531. data/vendor/tesseract-2.04/training/name2char.cpp +166 -0
  532. data/vendor/tesseract-2.04/training/name2char.h +38 -0
  533. data/vendor/tesseract-2.04/training/training.cpp +190 -0
  534. data/vendor/tesseract-2.04/training/training.h +130 -0
  535. data/vendor/tesseract-2.04/training/unicharset_extractor.cpp +140 -0
  536. data/vendor/tesseract-2.04/training/unicharset_extractor.dsp +335 -0
  537. data/vendor/tesseract-2.04/training/unicharset_extractor.vcproj +769 -0
  538. data/vendor/tesseract-2.04/training/wordlist2dawg.cpp +69 -0
  539. data/vendor/tesseract-2.04/training/wordlist2dawg.dsp +319 -0
  540. data/vendor/tesseract-2.04/training/wordlist2dawg.vcproj +1113 -0
  541. data/vendor/tesseract-2.04/viewer/Makefile.am +9 -0
  542. data/vendor/tesseract-2.04/viewer/Makefile.in +591 -0
  543. data/vendor/tesseract-2.04/viewer/scrollview.cpp +825 -0
  544. data/vendor/tesseract-2.04/viewer/scrollview.h +414 -0
  545. data/vendor/tesseract-2.04/viewer/svmnode.cpp +140 -0
  546. data/vendor/tesseract-2.04/viewer/svmnode.h +94 -0
  547. data/vendor/tesseract-2.04/viewer/svpaint.cpp +220 -0
  548. data/vendor/tesseract-2.04/viewer/svutil.cpp +347 -0
  549. data/vendor/tesseract-2.04/viewer/svutil.h +138 -0
  550. data/vendor/tesseract-2.04/wordrec/Makefile.am +23 -0
  551. data/vendor/tesseract-2.04/wordrec/Makefile.in +641 -0
  552. data/vendor/tesseract-2.04/wordrec/associate.cpp +62 -0
  553. data/vendor/tesseract-2.04/wordrec/associate.h +93 -0
  554. data/vendor/tesseract-2.04/wordrec/badwords.cpp +106 -0
  555. data/vendor/tesseract-2.04/wordrec/badwords.h +51 -0
  556. data/vendor/tesseract-2.04/wordrec/bestfirst.cpp +526 -0
  557. data/vendor/tesseract-2.04/wordrec/bestfirst.h +203 -0
  558. data/vendor/tesseract-2.04/wordrec/charsample.h +208 -0
  559. data/vendor/tesseract-2.04/wordrec/chop.cpp +458 -0
  560. data/vendor/tesseract-2.04/wordrec/chop.h +153 -0
  561. data/vendor/tesseract-2.04/wordrec/chopper.cpp +750 -0
  562. data/vendor/tesseract-2.04/wordrec/chopper.h +104 -0
  563. data/vendor/tesseract-2.04/wordrec/closed.cpp +136 -0
  564. data/vendor/tesseract-2.04/wordrec/closed.h +65 -0
  565. data/vendor/tesseract-2.04/wordrec/djmenus.cpp +118 -0
  566. data/vendor/tesseract-2.04/wordrec/djmenus.h +33 -0
  567. data/vendor/tesseract-2.04/wordrec/drawfx.cpp +92 -0
  568. data/vendor/tesseract-2.04/wordrec/drawfx.h +33 -0
  569. data/vendor/tesseract-2.04/wordrec/findseam.cpp +566 -0
  570. data/vendor/tesseract-2.04/wordrec/findseam.h +69 -0
  571. data/vendor/tesseract-2.04/wordrec/gradechop.cpp +226 -0
  572. data/vendor/tesseract-2.04/wordrec/gradechop.h +91 -0
  573. data/vendor/tesseract-2.04/wordrec/heuristic.cpp +194 -0
  574. data/vendor/tesseract-2.04/wordrec/heuristic.h +120 -0
  575. data/vendor/tesseract-2.04/wordrec/makechop.cpp +281 -0
  576. data/vendor/tesseract-2.04/wordrec/makechop.h +69 -0
  577. data/vendor/tesseract-2.04/wordrec/matchtab.cpp +191 -0
  578. data/vendor/tesseract-2.04/wordrec/matchtab.h +45 -0
  579. data/vendor/tesseract-2.04/wordrec/matrix.cpp +118 -0
  580. data/vendor/tesseract-2.04/wordrec/matrix.h +104 -0
  581. data/vendor/tesseract-2.04/wordrec/measure.h +135 -0
  582. data/vendor/tesseract-2.04/wordrec/metrics.cpp +363 -0
  583. data/vendor/tesseract-2.04/wordrec/metrics.h +130 -0
  584. data/vendor/tesseract-2.04/wordrec/mfvars.cpp +51 -0
  585. data/vendor/tesseract-2.04/wordrec/mfvars.h +27 -0
  586. data/vendor/tesseract-2.04/wordrec/msmenus.cpp +110 -0
  587. data/vendor/tesseract-2.04/wordrec/msmenus.h +45 -0
  588. data/vendor/tesseract-2.04/wordrec/olutil.cpp +153 -0
  589. data/vendor/tesseract-2.04/wordrec/olutil.h +128 -0
  590. data/vendor/tesseract-2.04/wordrec/outlines.cpp +172 -0
  591. data/vendor/tesseract-2.04/wordrec/outlines.h +148 -0
  592. data/vendor/tesseract-2.04/wordrec/pieces.cpp +410 -0
  593. data/vendor/tesseract-2.04/wordrec/pieces.h +154 -0
  594. data/vendor/tesseract-2.04/wordrec/plotedges.cpp +134 -0
  595. data/vendor/tesseract-2.04/wordrec/plotedges.h +71 -0
  596. data/vendor/tesseract-2.04/wordrec/plotseg.cpp +116 -0
  597. data/vendor/tesseract-2.04/wordrec/plotseg.h +73 -0
  598. data/vendor/tesseract-2.04/wordrec/render.cpp +152 -0
  599. data/vendor/tesseract-2.04/wordrec/render.h +58 -0
  600. data/vendor/tesseract-2.04/wordrec/seam.cpp +482 -0
  601. data/vendor/tesseract-2.04/wordrec/seam.h +136 -0
  602. data/vendor/tesseract-2.04/wordrec/split.cpp +182 -0
  603. data/vendor/tesseract-2.04/wordrec/split.h +115 -0
  604. data/vendor/tesseract-2.04/wordrec/tally.cpp +68 -0
  605. data/vendor/tesseract-2.04/wordrec/tally.h +94 -0
  606. data/vendor/tesseract-2.04/wordrec/tessinit.cpp +108 -0
  607. data/vendor/tesseract-2.04/wordrec/tessinit.h +46 -0
  608. data/vendor/tesseract-2.04/wordrec/tface.cpp +272 -0
  609. data/vendor/tesseract-2.04/wordrec/tface.h +35 -0
  610. data/vendor/tesseract-2.04/wordrec/wordclass.cpp +284 -0
  611. data/vendor/tesseract-2.04/wordrec/wordclass.h +64 -0
  612. metadata +708 -0
@@ -0,0 +1,277 @@
1
+ /******************************************************************************
2
+ ** Filename: mfoutline.h
3
+ ** Purpose: Interface spec for fx outline structures
4
+ ** Author: Dan Johnson
5
+ ** History: Thu May 17 08:55:32 1990, DSJ, Created.
6
+ **
7
+ ** (c) Copyright Hewlett-Packard Company, 1988.
8
+ ** Licensed under the Apache License, Version 2.0 (the "License");
9
+ ** you may not use this file except in compliance with the License.
10
+ ** You may obtain a copy of the License at
11
+ ** http://www.apache.org/licenses/LICENSE-2.0
12
+ ** Unless required by applicable law or agreed to in writing, software
13
+ ** distributed under the License is distributed on an "AS IS" BASIS,
14
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ ** See the License for the specific language governing permissions and
16
+ ** limitations under the License.
17
+ ******************************************************************************/
18
+ #ifndef MFOUTLINE_H
19
+ #define MFOUTLINE_H
20
+
21
+ /**----------------------------------------------------------------------------
22
+ Include Files and Type Defines
23
+ ----------------------------------------------------------------------------**/
24
+ #include "general.h"
25
+ #include "oldlist.h"
26
+ #include "fpoint.h"
27
+ #include "fxdefs.h"
28
+ #include "baseline.h"
29
+
30
+ #define NORMAL_X_HEIGHT (0.5)
31
+ #define NORMAL_BASELINE (0.0)
32
+
33
+ typedef LIST MFOUTLINE;
34
+
35
+ typedef enum {
36
+ north, south, east, west, northeast, northwest, southeast, southwest
37
+ }
38
+
39
+
40
+ DIRECTION;
41
+ /*
42
+ typedef enum
43
+ {
44
+ False, True
45
+ }
46
+ BOOLEAN;
47
+ */
48
+ typedef struct
49
+ {
50
+ FPOINT Point;
51
+ FLOAT32 Slope;
52
+ unsigned Padding:20;
53
+ BOOL8 Hidden:TRUE;
54
+ BOOL8 ExtremityMark:TRUE;
55
+ DIRECTION Direction:4;
56
+ DIRECTION PreviousDirection:4;
57
+ }
58
+
59
+
60
+ MFEDGEPT;
61
+
62
+ typedef enum {
63
+ outer, hole
64
+ }
65
+
66
+
67
+ OUTLINETYPE;
68
+
69
+ typedef struct
70
+ {
71
+ FLOAT64 Mx, My; /* first moment of all outlines */
72
+ FLOAT64 L; /* total length of all outlines */
73
+ FLOAT64 x, y; /* center of mass of all outlines */
74
+ FLOAT64 Ix, Iy; /* second moments about center of mass axes */
75
+ FLOAT64 Rx, Ry; /* radius of gyration about center of mass axes */
76
+ }
77
+
78
+
79
+ OUTLINE_STATS;
80
+
81
+ typedef enum {
82
+ baseline, character
83
+ }
84
+
85
+
86
+ NORM_METHOD;
87
+
88
+ /*----------------------------------------------------------------------------
89
+ Variables
90
+ ------------------------------------------------------------------------------*/
91
+ extern int NormMethod;
92
+
93
+ /**----------------------------------------------------------------------------
94
+ Macros
95
+ ----------------------------------------------------------------------------**/
96
+ #define AverageOf(A,B) (((A) + (B)) / 2)
97
+
98
+ /* macro for computing the baseline of a row of text at an x position */
99
+ #define BaselineAt(L,X) (BASELINE_OFFSET)
100
+
101
+ /* macro for computing the scale factor to use to normalize characters */
102
+ #define ComputeScaleFactor(L) \
103
+ (NORMAL_X_HEIGHT / ((is_baseline_normalized ())? \
104
+ (BASELINE_SCALE): \
105
+ ((L)->xheight)))
106
+
107
+ /* macros for manipulating micro-feature outlines */
108
+ #define DegenerateOutline(O) (((O) == NIL) || ((O) == rest(O)))
109
+ #define PointAt(O) ((MFEDGEPT *) first_node (O))
110
+ #define NextPointAfter(E) (rest (E))
111
+ #define MakeOutlineCircular(O) (set_rest (last (O), (O)))
112
+
113
+ /* macros for manipulating micro-feature outline edge points */
114
+ //#define PositionOf(P) ((P)->Point)
115
+ //#define XPositionOf(P) ((P)->Point.x)
116
+ //#define YPositionOf(P) ((P)->Point.y)
117
+ //#define DirectionOf(P) ((P)->Direction)
118
+ //#define PreviousDirectionOf(P) ((P)->PreviousDirection)
119
+ #define ClearMark(P) ((P)->ExtremityMark = FALSE)
120
+ #define MarkPoint(P) ((P)->ExtremityMark = TRUE)
121
+ //#define IsExtremity(P) ((P)->ExtremityMark)
122
+ //#define NotExtremity(P) (!(P->ExtremityMark))
123
+ //#define IsVisible(E) (! (E->Hidden))
124
+ //#define IsHidden(E) ((E)->Hidden)
125
+
126
+ /**----------------------------------------------------------------------------
127
+ Public Function Prototypes
128
+ ----------------------------------------------------------------------------**/
129
+ void ComputeBlobCenter(TBLOB *Blob, TPOINT *BlobCenter);
130
+
131
+ LIST ConvertBlob(TBLOB *Blob);
132
+
133
+ MFOUTLINE ConvertOutline(TESSLINE *Outline);
134
+
135
+ LIST ConvertOutlines(TESSLINE *Outline,
136
+ LIST ConvertedOutlines,
137
+ OUTLINETYPE OutlineType);
138
+
139
+ void ComputeOutlineStats(LIST Outlines, OUTLINE_STATS *OutlineStats);
140
+
141
+ void FilterEdgeNoise(MFOUTLINE Outline, FLOAT32 NoiseSegmentLength);
142
+
143
+ void FindDirectionChanges(MFOUTLINE Outline,
144
+ FLOAT32 MinSlope,
145
+ FLOAT32 MaxSlope);
146
+
147
+ void FreeMFOutline(void *agr); //MFOUTLINE Outline);
148
+
149
+ void FreeOutlines(LIST Outlines);
150
+
151
+ void InitMFOutlineVars();
152
+
153
+ void MarkDirectionChanges(MFOUTLINE Outline);
154
+
155
+ MFEDGEPT *NewEdgePoint();
156
+
157
+ MFOUTLINE NextExtremity(MFOUTLINE EdgePoint);
158
+
159
+ void NormalizeOutline(MFOUTLINE Outline,
160
+ LINE_STATS *LineStats,
161
+ FLOAT32 XOrigin);
162
+
163
+ void NormalizeOutlines(LIST Outlines,
164
+ LINE_STATS *LineStats,
165
+ FLOAT32 *XScale,
166
+ FLOAT32 *YScale);
167
+
168
+ void SettupBlobConversion(TBLOB *Blob);
169
+
170
+ void SmearExtremities(MFOUTLINE Outline, FLOAT32 XScale, FLOAT32 YScale);
171
+
172
+ /*----------------------------------------------------------------------------
173
+ Private Function Prototypes
174
+ -----------------------------------------------------------------------------*/
175
+ void ChangeDirection(MFOUTLINE Start, MFOUTLINE End, DIRECTION Direction);
176
+
177
+ void CharNormalizeOutline(MFOUTLINE Outline,
178
+ FLOAT32 XCenter,
179
+ FLOAT32 YCenter,
180
+ FLOAT32 XScale,
181
+ FLOAT32 YScale);
182
+
183
+ void ComputeDirection(MFEDGEPT *Start,
184
+ MFEDGEPT *Finish,
185
+ FLOAT32 MinSlope,
186
+ FLOAT32 MaxSlope);
187
+
188
+ void FinishOutlineStats(register OUTLINE_STATS *OutlineStats);
189
+
190
+ void InitOutlineStats(OUTLINE_STATS *OutlineStats);
191
+
192
+ MFOUTLINE NextDirectionChange(MFOUTLINE EdgePoint);
193
+
194
+ void UpdateOutlineStats(register OUTLINE_STATS *OutlineStats,
195
+ register FLOAT32 x1,
196
+ register FLOAT32 x2,
197
+ register FLOAT32 y1,
198
+ register FLOAT32 y2);
199
+
200
+ /*
201
+ #if defined(__STDC__) || defined(__cplusplus)
202
+ # define _ARGS(s) s
203
+ #else
204
+ # define _ARGS(s) ()
205
+ #endif*/
206
+
207
+ /* mfoutline.c
208
+ void ComputeBlobCenter
209
+ _ARGS((BLOB *Blob,
210
+ TPOINT *BlobCenter));
211
+
212
+ LIST ConvertBlob
213
+ _ARGS((BLOB *Blob));
214
+
215
+ MFOUTLINE ConvertOutline
216
+ _ARGS((TESSLINE *Outline));
217
+
218
+ LIST ConvertOutlines
219
+ _ARGS((TESSLINE *Outline,
220
+ LIST ConvertedOutlines,
221
+ OUTLINETYPE OutlineType));
222
+
223
+ void ComputeOutlineStats
224
+ _ARGS((LIST Outlines,
225
+ OUTLINE_STATS *OutlineStats));
226
+
227
+ void FilterEdgeNoise
228
+ _ARGS((MFOUTLINE Outline,
229
+ FLOAT32 NoiseSegmentLength));
230
+
231
+ void FindDirectionChanges
232
+ _ARGS((MFOUTLINE Outline,
233
+ FLOAT32 MinSlope,
234
+ FLOAT32 MaxSlope));
235
+
236
+ void FreeMFOutline
237
+ _ARGS((MFOUTLINE Outline));
238
+
239
+ void FreeOutlines
240
+ _ARGS((LIST Outlines));
241
+
242
+ void InitMFOutlineVars
243
+ _ARGS((void));
244
+
245
+ void MarkDirectionChanges
246
+ _ARGS((MFOUTLINE Outline));
247
+
248
+ MFEDGEPT *NewEdgePoint
249
+ _ARGS((void));
250
+
251
+ MFOUTLINE NextExtremity
252
+ _ARGS((MFOUTLINE EdgePoint));
253
+
254
+ void NormalizeOutline
255
+ _ARGS((MFOUTLINE Outline,
256
+ LINE_STATS *LineStats,
257
+ FLOAT32 XOrigin));
258
+
259
+ void NormalizeOutlines
260
+ _ARGS((LIST Outlines,
261
+ LINE_STATS *LineStats));
262
+
263
+ void SettupBlobConversion
264
+ _ARGS((BLOB *Blob));
265
+
266
+ void SmearExtremities
267
+ _ARGS((MFOUTLINE Outline,
268
+ FLOAT32 XScale,
269
+ FLOAT32 YScale));
270
+
271
+ #undef _ARGS
272
+ */
273
+ /**----------------------------------------------------------------------------
274
+ Global Data Definitions and Declarations
275
+ ----------------------------------------------------------------------------**/
276
+ extern int NormMethod; /* normalized method currently selected */
277
+ #endif
@@ -0,0 +1,436 @@
1
+ /******************************************************************************
2
+ ** Filename: mfx.c
3
+ ** Purpose: Micro feature extraction routines
4
+ ** Author: Dan Johnson
5
+ ** History: 7/21/89, DSJ, Created.
6
+ **
7
+ ** (c) Copyright Hewlett-Packard Company, 1988.
8
+ ** Licensed under the Apache License, Version 2.0 (the "License");
9
+ ** you may not use this file except in compliance with the License.
10
+ ** You may obtain a copy of the License at
11
+ ** http://www.apache.org/licenses/LICENSE-2.0
12
+ ** Unless required by applicable law or agreed to in writing, software
13
+ ** distributed under the License is distributed on an "AS IS" BASIS,
14
+ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ ** See the License for the specific language governing permissions and
16
+ ** limitations under the License.
17
+ ******************************************************************************/
18
+ /**----------------------------------------------------------------------------
19
+ Include Files and Type Defines
20
+ ----------------------------------------------------------------------------**/
21
+ #include "mfdefs.h"
22
+ #include "variables.h"
23
+ #include "sigmenu.h"
24
+ #include "mfoutline.h"
25
+ #include "clusttool.h" //NEEDED
26
+ #include "const.h"
27
+ #include "intfx.h"
28
+ #include <math.h>
29
+
30
+ /* default values for tunable knobs */
31
+ /* old numbers corresponded to 10.0 degrees and 80.0 degrees */
32
+ /* PREV DEFAULT 0.176326981 approx. 10.0 degrees */
33
+ #define MIN_SLOPE 0.414213562
34
+ /* PREV DEFAULT 5.671281820 approx. 80.0 degrees */
35
+ #define MAX_SLOPE 2.414213562
36
+ /* no noise filtering */
37
+ #define NOISE_SEGMENT_LENGTH (0.00)
38
+ /* no feature splitting */
39
+ #define MAX_FEATURE_LENGTH (MAXFLOAT)
40
+
41
+ /**----------------------------------------------------------------------------
42
+ Macros
43
+ ----------------------------------------------------------------------------**/
44
+ /* miscellaneous macros */
45
+ #define NormalizeAngle(A) ( (((A)<0)?((A)+2*PI):(A)) / (2*PI) )
46
+
47
+ /*----------------------------------------------------------------------------
48
+ Private Function Prototypes
49
+ -----------------------------------------------------------------------------*/
50
+ void ComputeBulges(MFOUTLINE Start, MFOUTLINE End, MICROFEATURE MicroFeature);
51
+
52
+ FLOAT32 ComputeOrientation(MFEDGEPT *Start, MFEDGEPT *End);
53
+
54
+ MICROFEATURES ConvertToMicroFeatures(MFOUTLINE Outline,
55
+ MICROFEATURES MicroFeatures);
56
+
57
+ MICROFEATURE ExtractMicroFeature(MFOUTLINE Start, MFOUTLINE End);
58
+
59
+ void SmearBulges(MICROFEATURES MicroFeatures, FLOAT32 XScale, FLOAT32 YScale);
60
+
61
+ /*
62
+ #if defined(__STDC__) || defined(__cplusplus)
63
+ # define _ARGS(s) s
64
+ #else
65
+ # define _ARGS(s) ()
66
+ #endif*/
67
+
68
+ /* /users/danj/wiseowl/src/danj/microfeatures/mfx.c
69
+ void ComputeBulges
70
+ _ARGS((MFOUTLINE Start,
71
+ MFOUTLINE End,
72
+ MICROFEATURE MicroFeature));
73
+
74
+ FLOAT32 ComputeOrientation
75
+ _ARGS((MFEDGEPT *Start,
76
+ MFEDGEPT *End));
77
+
78
+ MICROFEATURES ConvertToMicroFeatures
79
+ _ARGS((MFOUTLINE Outline,
80
+ MICROFEATURES MicroFeatures));
81
+
82
+ MICROFEATURE ExtractMicroFeature
83
+ _ARGS((MFOUTLINE Start,
84
+ MFOUTLINE End));
85
+
86
+ void SmearBulges
87
+ _ARGS((MICROFEATURES MicroFeatures,
88
+ FLOAT32 XScale,
89
+ FLOAT32 YScale));
90
+
91
+ #undef _ARGS
92
+ */
93
+
94
+ /**----------------------------------------------------------------------------
95
+ Global Data Definitions and Declarations
96
+ ----------------------------------------------------------------------------**/
97
+ /* tuning knobs that can be adjusted without recompilation */
98
+ static FLOAT32 MinSlope;
99
+ static FLOAT32 MaxSlope;
100
+ static FLOAT32 NoiseSegmentLength;
101
+
102
+ /**----------------------------------------------------------------------------
103
+ Public Code
104
+ ----------------------------------------------------------------------------**/
105
+ /*---------------------------------------------------------------------------*/
106
+ void InitMicroFxVars() {
107
+ /*
108
+ ** Parameters: none
109
+ ** Globals:
110
+ ** MinSlope slope below which lines are called horizontal
111
+ ** MaxSlope slope above which lines are called vertical
112
+ ** NoiseSegmentLength length below which outline segments
113
+ ** are treated as noise
114
+ ** MaxFeatureLength length above which a feature will
115
+ ** be split into 2 equal pieces
116
+ ** ExtremityMode controls how extremities are defined
117
+ ** XHeightAdjust allows xheight of line to be adjusted
118
+ ** Operation: Initialize the micro-feature extractor variables (knobs)
119
+ ** that can be tuned without recompiling.
120
+ ** Return: none
121
+ ** Exceptions: none
122
+ ** History: Mon May 14 11:24:40 1990, DSJ, Created.
123
+ */
124
+ VALUE dummy;
125
+
126
+ float_variable (MinSlope, "MinSlope", MIN_SLOPE);
127
+ float_variable (MaxSlope, "MaxSlope", MAX_SLOPE);
128
+ float_variable (NoiseSegmentLength, "NoiseSegmentLength",
129
+ NOISE_SEGMENT_LENGTH);
130
+ } /* InitMicroFxVars */
131
+
132
+
133
+ /*---------------------------------------------------------------------------*/
134
+ CHAR_FEATURES BlobMicroFeatures(TBLOB *Blob, LINE_STATS *LineStats) {
135
+ /*
136
+ ** Parameters:
137
+ ** Blob blob to extract micro-features from
138
+ ** LineStats statistics for text line normalization
139
+ ** Globals:
140
+ ** XHeightAdjust used for manually adjusting xheight
141
+ ** Operation:
142
+ ** This routine extracts micro-features from the specified
143
+ ** blob and returns a list of the micro-features. All
144
+ ** micro-features are normalized according to the specified
145
+ ** line statistics.
146
+ ** Return: List of micro-features extracted from the blob.
147
+ ** Exceptions: none
148
+ ** History: 7/21/89, DSJ, Created.
149
+ */
150
+ MICROFEATURES MicroFeatures = NIL;
151
+ FLOAT32 XScale, YScale;
152
+ LIST Outlines;
153
+ LIST RemainingOutlines;
154
+ MFOUTLINE Outline;
155
+ INT_FEATURE_ARRAY blfeatures;
156
+ INT_FEATURE_ARRAY cnfeatures;
157
+ INT_FX_RESULT_STRUCT results;
158
+
159
+ if (Blob != NULL) {
160
+ Outlines = ConvertBlob (Blob);
161
+ // NormalizeOutlines(Outlines, LineStats, &XScale, &YScale);
162
+ ExtractIntFeat(Blob, blfeatures, cnfeatures, &results);
163
+ XScale = 0.2f / results.Ry;
164
+ YScale = 0.2f / results.Rx;
165
+
166
+ RemainingOutlines = Outlines;
167
+ iterate(RemainingOutlines) {
168
+ Outline = (MFOUTLINE) first_node (RemainingOutlines);
169
+ CharNormalizeOutline (Outline,
170
+ results.Xmean, results.Ymean,
171
+ XScale, YScale);
172
+ }
173
+
174
+ RemainingOutlines = Outlines;
175
+ iterate(RemainingOutlines) {
176
+ Outline = (MFOUTLINE) first_node (RemainingOutlines);
177
+ FindDirectionChanges(Outline, MinSlope, MaxSlope);
178
+ FilterEdgeNoise(Outline, NoiseSegmentLength);
179
+ MarkDirectionChanges(Outline);
180
+ SmearExtremities(Outline, XScale, YScale);
181
+ MicroFeatures = ConvertToMicroFeatures (Outline, MicroFeatures);
182
+ }
183
+ SmearBulges(MicroFeatures, XScale, YScale);
184
+ FreeOutlines(Outlines);
185
+ }
186
+ return ((CHAR_FEATURES) MicroFeatures);
187
+ } /* BlobMicroFeatures */
188
+
189
+
190
+ /**----------------------------------------------------------------------------
191
+ Private Macros
192
+ ----------------------------------------------------------------------------**/
193
+ /**********************************************************************
194
+ * angle_of
195
+ *
196
+ * Return the angle of the line between two points.
197
+ **********************************************************************/
198
+ #define angle_of(x1,y1,x2,y2) \
199
+ ((x2-x1) ? \
200
+ (atan2 (y2-y1, x2-x1)) : \
201
+ ((y2<y1) ? (- PI / 2.0) : (PI / 2.0))) \
202
+
203
+
204
+ /**********************************************************************
205
+ * scale_angle
206
+ *
207
+ * Make sure that the angle is non-negative. Scale it to the right
208
+ * amount.
209
+ **********************************************************************/
210
+
211
+ #define scale_angle(x) \
212
+ (((x<0) ? (2.0 * PI + x) : (x)) * 0.5 / PI) \
213
+
214
+ /*---------------------------------------------------------------------------
215
+ Private Code
216
+ ---------------------------------------------------------------------------*/
217
+ /*---------------------------------------------------------------------------*/
218
+ void ComputeBulges(MFOUTLINE Start, MFOUTLINE End, MICROFEATURE MicroFeature) {
219
+ /*
220
+ ** Parameters:
221
+ ** Start starting point of micro-feature
222
+ ** End ending point of micro-feature
223
+ ** MicroFeature micro-feature whose bulges are to be computed
224
+ ** Globals: none
225
+ ** Operation:
226
+ ** This routine computes the size of the "bulges" of the
227
+ ** specified micro-feature. The bulges are the deviations
228
+ ** of the micro-features from a straight line at the 1/3
229
+ ** and 2/3 points along the straight line approximation of
230
+ ** the micro-feature. The size of each bulge is normalized
231
+ ** to the range -0.5 to 0.5. A positive bulge indicates a
232
+ ** deviation in the counterclockwise direction and vice versa.
233
+ ** A size of 0.5 (+ or -) corresponds to the largest bulge that
234
+ ** could ever occur for the given feature independent of
235
+ ** orientation. This routine assumes that Start
236
+ ** and End are not the same point. It also assumes that the
237
+ ** orientation and length parameters of the micro-feature
238
+ ** have already been computed.
239
+ ** Return: none
240
+ ** Exceptions: none
241
+ ** History: 7/27/89, DSJ, Created.
242
+ */
243
+ MATRIX_2D Matrix;
244
+ MFEDGEPT *Origin;
245
+ MFOUTLINE SegmentStart, SegmentEnd;
246
+ FPOINT CurrentPoint, LastPoint;
247
+ FLOAT32 BulgePosition;
248
+
249
+ /* check for simple case */
250
+ if (End == NextPointAfter (Start))
251
+ MicroFeature[FIRSTBULGE] = MicroFeature[SECONDBULGE] = 0;
252
+ else {
253
+ Origin = PointAt (Start);
254
+
255
+ InitMatrix(&Matrix);
256
+ RotateMatrix (&Matrix, MicroFeature[ORIENTATION] * -2.0 * PI);
257
+ TranslateMatrix (&Matrix, -Origin->Point.x, -Origin->Point.y);
258
+
259
+ SegmentEnd = Start;
260
+ FillPoint (CurrentPoint, 0, 0);
261
+ BulgePosition = MicroFeature[MFLENGTH] / 3;
262
+ CopyPoint(CurrentPoint, LastPoint);
263
+ while (CurrentPoint.x < BulgePosition) {
264
+ SegmentStart = SegmentEnd;
265
+ SegmentEnd = NextPointAfter (SegmentStart);
266
+ CopyPoint(CurrentPoint, LastPoint);
267
+
268
+ MapPoint (&Matrix, PointAt (SegmentEnd)->Point, CurrentPoint);
269
+ }
270
+ MicroFeature[FIRSTBULGE] =
271
+ XIntersectionOf(LastPoint, CurrentPoint, BulgePosition);
272
+
273
+ BulgePosition *= 2;
274
+
275
+ // Prevents from copying the points before computing the bulge if
276
+ // CurrentPoint will not change. (Which would cause to output nan
277
+ // for the SecondBulge.)
278
+ if (CurrentPoint.x < BulgePosition)
279
+ CopyPoint(CurrentPoint, LastPoint);
280
+ while (CurrentPoint.x < BulgePosition) {
281
+ SegmentStart = SegmentEnd;
282
+ SegmentEnd = NextPointAfter (SegmentStart);
283
+ CopyPoint(CurrentPoint, LastPoint);
284
+ MapPoint (&Matrix, PointAt (SegmentEnd)->Point, CurrentPoint);
285
+ }
286
+ MicroFeature[SECONDBULGE] =
287
+ XIntersectionOf(LastPoint, CurrentPoint, BulgePosition);
288
+
289
+ MicroFeature[FIRSTBULGE] /= BULGENORMALIZER * MicroFeature[MFLENGTH];
290
+ MicroFeature[SECONDBULGE] /= BULGENORMALIZER * MicroFeature[MFLENGTH];
291
+ }
292
+ } /* ComputeBulges */
293
+
294
+
295
+ /*---------------------------------------------------------------------------*/
296
+ FLOAT32 ComputeOrientation(MFEDGEPT *Start, MFEDGEPT *End) {
297
+ /*
298
+ ** Parameters:
299
+ ** Start starting edge point of micro-feature
300
+ ** End ending edge point of micro-feature
301
+ ** Globals: none
302
+ ** Operation:
303
+ ** This routine computes the orientation parameter of the
304
+ ** specified micro-feature. The orientation is the angle of
305
+ ** the vector from Start to End. It is normalized to a number
306
+ ** between 0 and 1 where 0 corresponds to 0 degrees and 1
307
+ ** corresponds to 360 degrees. The actual range is [0,1), i.e.
308
+ ** 1 is excluded from the range (since it is actual the
309
+ ** same orientation as 0). This routine assumes that Start
310
+ ** and End are not the same point.
311
+ ** Return: Orientation parameter for the specified micro-feature.
312
+ ** Exceptions: none
313
+ ** History: 7/27/89, DSJ, Created.
314
+ */
315
+ FLOAT32 Orientation;
316
+
317
+ Orientation = NormalizeAngle (AngleFrom (Start->Point,
318
+ End->Point));
319
+
320
+ /* ensure that round-off errors do not put circular param out of range */
321
+ if ((Orientation < 0) || (Orientation >= 1))
322
+ Orientation = 0;
323
+ return (Orientation);
324
+ } /* ComputeOrientation */
325
+
326
+
327
+ /*---------------------------------------------------------------------------*/
328
+ MICROFEATURES ConvertToMicroFeatures(MFOUTLINE Outline,
329
+ MICROFEATURES MicroFeatures) {
330
+ /*
331
+ ** Parameters:
332
+ ** Outline outline to extract micro-features from
333
+ ** MicroFeatures list of micro-features to add to
334
+ ** Globals: none
335
+ ** Operation:
336
+ ** This routine
337
+ ** Return: List of micro-features with new features added to front.
338
+ ** Exceptions: none
339
+ ** History: 7/26/89, DSJ, Created.
340
+ */
341
+ MFOUTLINE Current;
342
+ MFOUTLINE Last;
343
+ MFOUTLINE First;
344
+ MICROFEATURE NewFeature;
345
+
346
+ if (DegenerateOutline (Outline))
347
+ return (MicroFeatures);
348
+
349
+ First = NextExtremity (Outline);
350
+ Last = First;
351
+ do {
352
+ Current = NextExtremity (Last);
353
+ NewFeature = ExtractMicroFeature (Last, Current);
354
+ if (NewFeature != NULL)
355
+ MicroFeatures = push (MicroFeatures, NewFeature);
356
+ Last = Current;
357
+ }
358
+ while (Last != First);
359
+
360
+ return (MicroFeatures);
361
+ } /* ConvertToMicroFeatures */
362
+
363
+
364
+ /*---------------------------------------------------------------------------*/
365
+ MICROFEATURE ExtractMicroFeature(MFOUTLINE Start, MFOUTLINE End) {
366
+ /*
367
+ ** Parameters:
368
+ ** Start starting point of micro-feature
369
+ ** End ending point of micro-feature
370
+ ** Globals: none
371
+ ** Operation:
372
+ ** This routine computes the feature parameters which describe
373
+ ** the micro-feature that starts and Start and ends at End.
374
+ ** A new micro-feature is allocated, filled with the feature
375
+ ** parameters, and returned. The routine assumes that
376
+ ** Start and End are not the same point. If they are the
377
+ ** same point, NULL is returned, a warning message is
378
+ ** printed, and the current outline is dumped to stdout.
379
+ ** Return: New micro-feature or NULL if the feature was rejected.
380
+ ** Exceptions: none
381
+ ** History: 7/26/89, DSJ, Created.
382
+ ** 11/17/89, DSJ, Added handling for Start and End same point.
383
+ */
384
+ MICROFEATURE NewFeature;
385
+ MFEDGEPT *P1, *P2;
386
+
387
+ P1 = PointAt (Start);
388
+ P2 = PointAt (End);
389
+
390
+ NewFeature = NewMicroFeature ();
391
+ NewFeature[XPOSITION] = AverageOf (P1->Point.x, P2->Point.x);
392
+ NewFeature[YPOSITION] = AverageOf (P1->Point.y, P2->Point.y);
393
+ NewFeature[MFLENGTH] = DistanceBetween (P1->Point, P2->Point);
394
+ NewFeature[ORIENTATION] =
395
+ NormalizedAngleFrom (&((P1)->Point), &((P2)->Point), 1.0);
396
+ ComputeBulges(Start, End, NewFeature);
397
+ return (NewFeature);
398
+ } /* ExtractMicroFeature */
399
+
400
+
401
+ /*---------------------------------------------------------------------------*/
402
+ void SmearBulges(MICROFEATURES MicroFeatures, FLOAT32 XScale, FLOAT32 YScale) {
403
+ /*
404
+ ** Parameters:
405
+ ** MicroFeatures features to be smeared
406
+ ** XScale # of normalized units per pixel in x dir
407
+ ** YScale # of normalized units per pixel in y dir
408
+ ** Globals: none
409
+ ** Operation: Add a random amount to each bulge parameter of each
410
+ ** feature. The amount added is between -0.5 pixels and
411
+ ** 0.5 pixels. This is done to prevent the prototypes
412
+ ** generated in training from being unrealistically tight.
413
+ ** Return: none
414
+ ** Exceptions: none
415
+ ** History: Thu Jun 28 18:03:38 1990, DSJ, Created.
416
+ */
417
+ MICROFEATURE MicroFeature;
418
+ FLOAT32 MinSmear;
419
+ FLOAT32 MaxSmear;
420
+ FLOAT32 Cos, Sin;
421
+ FLOAT32 Scale;
422
+
423
+ iterate(MicroFeatures) {
424
+ MicroFeature = NextFeatureOf (MicroFeatures);
425
+
426
+ Cos = fabs (cos (2.0 * PI * MicroFeature[ORIENTATION]));
427
+ Sin = fabs (sin (2.0 * PI * MicroFeature[ORIENTATION]));
428
+ Scale = YScale * Cos + XScale * Sin;
429
+
430
+ MinSmear = -0.5 * Scale / (BULGENORMALIZER * MicroFeature[MFLENGTH]);
431
+ MaxSmear = 0.5 * Scale / (BULGENORMALIZER * MicroFeature[MFLENGTH]);
432
+
433
+ MicroFeature[FIRSTBULGE] += UniformRandomNumber (MinSmear, MaxSmear);
434
+ MicroFeature[SECONDBULGE] += UniformRandomNumber (MinSmear, MaxSmear);
435
+ }
436
+ } /* SmearBulges */