Complementando mi gnu/linux y mi gnu/opensolaris...

miércoles, abril 11, 2007

Ocropus en Nexenta

En Barrapunto me entero de que Google va a patrocinar un proyecto de OCR abierto y lo ha llamado ocropus. En principio están desarrollándola para Ubuntu 6.10. Siguiendo las instrucciones que ponen en la página he podido compilarlo también en Nexenta con unas ligeras modificaciones (relativas a NAN y a isinf en ocr-layout-rast/iarith.h). Un buen OCR de código abierto es uno de esos proyectos destinados a triunfar (y si está Google detrás habrá que seguirlo de cerca). Por lo pronto ya sabéis que "tira" también en OpenSolaris. En la imágen podeis comparar el texto en HTML junto a la imágen original en PNG.



Os pongo también el parche que he hecho en plan rápido:

Index: ocr-layout-rast/iarith.h
===================================================================
--- ocr-layout-rast/iarith.h (revision 55)
+++ ocr-layout-rast/iarith.h (working copy)
@@ -28,8 +28,26 @@
#define H_IARITHFILE__

#include
-#include
+#include

+#ifndef NAN
+
+#ifndef __nan_bytes
+#define __nan_bytes { 0, 0, 0, 0, 0, 0, 0xf8, 0x7f }
+#endif /* __nan_bytes */
+
+#ifdef __GNUC__
+#define NAN \
+ (__extension__ ((union { unsigned char __c[8]; \+ double __d; }) \
+ { __nan_bytes }).__d)
+
+#else /* Not GCC. */
+#define NAN (*(__const double *) __nan)
+#endif /* GCC. */
+#endif /* NAN */
+
+
#ifdef IARITH_ERRS_NONFATAL
#define returnoops(S,V) return (V)
#else
@@ -87,22 +105,23 @@
inline double div_hi(double x,double y) { if(x==0) return 0; return nextfp(x/y); }
inline double sqrt_lo(double x) { if(x<0) return nan(); return hs(prevfp(sqrt(x))); }
inline double sqrt_hi(double x) { if(x<0) return nan(); return nextfp(sqrt(x)); }
+
inline double exp_lo(double x) {
- if(isinf(x)) {if(x<0) return 0; else return x;}
+ if(!finite(x) && x==x) {if(x<0) return 0; else return x;}
return max(0.0,prevfp(exp(x)));
}
inline double exp_hi(double x) {
- if(isinf(x)) {if(x<0) return 0; else return x;}
+ if(!finite(x) && x==x) {if(x<0) return 0; else return x;}
return nextfp(exp(x));
}
inline double log_lo(double x) {
if(x<0) return nan();
- if(isinf(x)) return x;
+ if(!finite(x) && x==x) return x;
return prevfp(log(x));
}
inline double log_hi(double x) {
if(x<0) return nan();
- if(isinf(x)) return x;
+ if(!finite(x) && x==x) return x;
return nextfp(log(x));
}
inline double cos_lo(double x) {return prevfp(cos(x));}

0 Comentarios:

Publicar un comentario

Enlaces a esta nota:

Crear un enlace

<< Home