Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-09-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Tesseract OCR (Optical Character Recognition) desde Delphi

Hola a todos,

No sé si conocéis el proyecto Tesseract OCR (Optical Character Recognition). Si es así, probablemente, sabéis que no parece sencillo encontrar una forma de trabajar con Tesseract desde Delphi, aparte de cierto componente de WinSoft. Pues bien, es el caso que, por razones que no vienen al caso, he dado unas cuentas vueltas a este asunto, hasta que, por fin, he llevado a cabo una clase para Delphi que permite utilizar Tesseract OCR.

No existen DLL's de Tesseract desde la versión 2.0. Hasta donde yo llego, sólo es posible conseguir un archivo ejecutable que funciona a través de la línea de comandos. Ahora bien, he pensado que podría utilizar este ejecutable, pero, de la forma más transparente posible. Hacer esto, aunque acaso no muy elegante, aporta alguna ventaja, como, en principio, poder utilizar siempre la última versión de Tesseract. Además el asunto parece funcionar razonablemente bien, y, yo no pretendo esconder de ninguna manera este "diseño", pues lo considero hasta "legítimo".

Pues bien, el caso es que he conseguido mi objetivo, aunque, centrándome en el proyecto en que tenía pensado incorporar la clase de que hablo. ¿Qué quiere esto decir? Está documentado en la propia clase, pero, básicamente, significa que el proceso de Tesseract es ejecutado de forma secuencial, esto es, no he sido capaz de utilizar hilos, aunque lo he hecho así al principio, lo cierto es que el proyecto al que la clase va destinada es un poco tiquismiquis: se trata de una DLL que se ejecuta en un programa "host", y, esto causa algunas veces (como en este caso) problemas raros, incomprensibles y de complicada depuración.

Sin embargo, aunque el proceso de Tesseract no se ejecuta en su propio hilo, sí que se hace de forma que la aplicación "responda" al usuario, y, de hecho, la clase permite cancelar la tarea que estemos llevando a cabo. En fin, no me quiero enrrollar más, simplemente, me ha apetecido compartir esto con vosotros. En el archivo que a continuación enlazaré podréis encontrar la clase "TTesseract" (con comentarios en mi pobre inglés), así como todos los archivos necesarios y el código fuente de un ejemplo de uso, así como su correspondiente archivo binario.

Cualquier comentario o sugerencia será bienvenida. Para descargar "TTesseract", por favor, sigue este enlace. Huelga decir que, si lo estimáis oportuno, podéis hacer uso de esta clase de la forma en que queráis, aunque, bajo la licencia Apache 2.0, la misma en que está licenciado Tesseract ORC.

Última edición por dec fecha: 01-09-2012 a las 20:34:48.
Responder Con Cita
  #2  
Antiguo 01-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Gracias
Responder Con Cita
  #3  
Antiguo 01-09-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Gracias
¡De nada Casimiro!
Responder Con Cita
  #4  
Antiguo 01-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues sí. Gracias Aunque todavía no entiendo bien de qué va la cosa. O creo que no entendí tu explicación . Probé el sample pero supongo que está para inglés pues no reconoce acentos.

Sugerencia para el sample: que el resultado lo ponga en un memo y así veamos que no es otra imagen la que estás poniendo

// Saludos
Responder Con Cita
  #5  
Antiguo 01-09-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias a ti Román. A ver, vamos por partes, como dijo Jack el destripador.

Para usar el lenguaje español (a ver si te reconoce algún acento) usa algo así:

Código Delphi [-]
      FTesseract.RunTesseract
      (
        FileName,
        tpsmFullyAutomaticWithNoOSD,
        'spa', // Indicamos el lenguaje español, tal vez hagamos constantes de esto...
        '.\tesseract-config'
      );

Respecto del ejemplo, sí, supongo que pueden hacerse algunas mejoras, gracias por la sugerencia de usar un "TMemo".
Responder Con Cita
  #6  
Antiguo 01-09-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Sólo para decir que he actualizado el ejemplo un tanto y creo que ahora te gustará un poco más Román.
Responder Con Cita
  #7  
Antiguo 01-09-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Ah! Ahora lo pruebo, pero por lo pronto creo que algo no hago bien:

Código:
rnocznluilzmo
Las aliirrimsi
oeiieriiri irriprirriir e;ie fiirrriiiiii y iieriariii «iri ieirii iegiiiie «iri ia irifiirrriiiciiiri qiie re ie;
solicita.
uriii ire; iieriaaii, ei fiirrriiiiii deiierá 5er eriiregiiaii eri ia iieriiiiriiiiii de seriiicim emiiiirer
dei 11 =| 24 de qee» de zion. mi prøeederiiri iii; perrriiiiii; qiie rie reiiri iriirriiiiidii; eri
iii; fecha; emiiiiecidiir.
servicios Emilarer recibirá, iialidará y regimará la perrriiina eri el ;i;1erria, a;irrii;rri<› le;
reiiarii, ii cada iiriii de iii; iiiiirriries qiie reiiiiliiri ia perrriiiiii, rii wrriiiriiiiiiriie de
iri;¢rip¢i<iri.
oeiieriiri reiiiriir qiie ei iiieiriiiiieiiw de periiiiiu qiieaii «irremrrieriie regi?raae
accedieridii al mia de iriscripmrie; ¡ing-[[¢s«i|=r.i>=|=.iiii=iii.iii›i eri la <›p¢i<iri neirim zu
imripeiisn


¿Será por haberlo compilado con D7 que no tiene unicode?

Por cierto que, al recompilar, todas las rutas se descuadran y tuve que ponerlas absolutas. Como que el SetDir no le gusta o no sé qué pasa.

// Saludos
Responder Con Cita
  #8  
Antiguo 01-09-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Usar rutas relativas es una tontería... pero no tiene que ser así, de manera que el "SetDir" no habría porqué usarlo. En cuanto al resultado que obtienes, Román, depende a veces del "page segmentation", de la calidad de la imagen, de la fuente, del lenguaje, y, supongo que de un largo etcétera más. No sé hasta qué punto habrá que asumir este tipo de resultados. Sé que Tesseract puede ser "entrenado", pero, eso es algo que queda fuera del alcance de la clase.

Cita:
Empezado por roman Ver Mensaje
¿Será por haberlo compilado con D7 que no tiene unicode?
Respondiendo a esto, digo que no puede ser, puesto que yo uso Delphi 2007 y sólo me aseguré de que funciona con XE2, con alguna cosilla que se me ha atragantado: no sé porqué no puedo usar la función "GetTempPath" en XE2. De todas formas, no hay unicode por medio, aunque sí que usa la función "UTF8Decode", en lugar de cargar el archivo de salida como UTF8, que, es algo que puede hacerse en XE2. Aparentemente, "UTF8Decode" funciona en Delphi 2007 y XE2, por eso lo he dejado así.

Última edición por dec fecha: 02-09-2012 a las 12:15:26.
Responder Con Cita
  #9  
Antiguo 03-09-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Que bien dec!!!
Ahora mismo estoy trabajando en un proyecto para escanear documentos y estoy utilizando el componente de Winsoft que mencionas en pruebas.
Ya mismo descargaré tu componente y lo miraré.

Muchas gracias
Responder Con Cita
  #10  
Antiguo 03-09-2012
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Después de pelearme un rato con los directorios he hecho estas modificaciones en el componente para que trabaje con rutas absolutas.
Todavía no entiendo porqué, pero supongo que al ejecutarse mediante CreateProcess, debe tomar como ruta la del usuario %USERPROFILE%=C:\Document and Settings\NombreUsuario\

Código Delphi [-]
constructor TTesseract.Create( tesseractDllPath, tessDataDirPath : string );
begin
  inherited Create();
  FCancelTask := false;
  FTaskIsRunning := false;
  FTemporalFilePath := GetTemporalFilePath();
  // We assert the needed file and dir later, not here
  FTesseractDllPath := ExpandUNCFileName(tesseractDllPath);
  FTesseractDataDirPath := IncludeTrailingPathDelimiter( ExpandUNCFileName(tessDataDirPath) );
end;
Responder Con Cita
  #11  
Antiguo 03-09-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias por tus comentarios duilioisola. En realidad el asunto de las rutas relativas/absolutas no tiene que ver con el componente. Verás, no sé porqué, en el ejemplo me dio por utilizar rutas relativas. Es una tontería, porque, uno puede averiguar dónde está el ejecutable del ejemplo y conformar rutas absolutas a partir de ahí. Pero, fuera de eso, las rutas relativas/absolutas, hasta donde yo llego, no entran en el funcionamiento del componente. He podido probar el asunto en Windows 7 y 8, y, me consta que también funciona bien en Windows XP.

Gracias de nuevo por tus comentarios, y, ojalá mis humildes esfuerzos puedan ser de utilidad para ti.
Responder Con Cita
  #12  
Antiguo 03-09-2012
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Se me olvidó comentar, para quien esté interesado, que, he hecho algunos cambios.

No demasiado importantes, pero, en fin, lo digo por si queréis descargarlo de nuevo.
Responder Con Cita
  #13  
Antiguo 14-11-2014
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
Estoy muy interesado en probarlo pero el enlace no descarga nada, lleva a la página de NeoPlugins. Dec, hay alguna posibilidad que se reponga?

Garcias.
__________________
http://www.gestionportable.com
Responder Con Cita
  #14  
Antiguo 14-11-2014
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por pacopenin Ver Mensaje
Estoy muy interesado en probarlo pero el enlace no descarga nada, lleva a la página de NeoPlugins. Dec, hay alguna posibilidad que se reponga?

Garcias.
Puedes bajarlo desde este enlace:

http://neoplugins.com/clubdelphi/ttesseract.zip
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #15  
Antiguo 14-11-2014
Avatar de pacopenin
pacopenin pacopenin is offline
Miembro
 
Registrado: sep 2010
Ubicación: Asturias
Posts: 382
Poder: 14
pacopenin Va por buen camino
Muchas gracias.
__________________
http://www.gestionportable.com
Responder Con Cita
  #16  
Antiguo 14-11-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
David,

Cita:
Empezado por dec
...Tesseract OCR (Optical Character Recognition) desde Delphi...
Excelente

Saludos,

Nelson.
Responder Con Cita
  #17  
Antiguo 14-11-2014
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

¡No hay de qué! Sin embargo, me gustaría comentar que mi trabajo en este componente podría muy bien considerarse una "chapuza"... dicho de otro modo, que, no me quedo del todo satisfecho haciendo las cosas como se hacen. Cierto que funciona, pero, una cosa no quita la otra. Así pues voy a recomendar buscar más información sobre este asunto, y, echar un vistazo a otros componentes como, por ejemplo, el que se ofrece en Winsoft.sk.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #18  
Antiguo 14-11-2014
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola de nuevo,

Que digo que no me quedo a gusto con mi anterior mensaje. Igual la palabra no es "chapuza" sino "trampa". Ciertamente, lo que parece una DLL es en realidad un ejecutable de tipo consola que funciona como tal. No obstante, el componente para Delphi en cuestión permite utilizar dicho ejecutable como acostumbramos en Delphi, jugando con propiedades, eventos, etc. Así que retiro la palabra "chapuza" (la retiro yo, no quienes tengan otra opinión) y me quedo con la palabra "trampa", que, siendo parecido, no me suena igual.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #19  
Antiguo 14-11-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
David,

Cita:
Empezado por dec
...Igual la palabra no es "chapuza" sino "trampa"...


En mi humilde opinión creo que es un gran aporte

Saludos,

Nelson.

Última edición por nlsgarcia fecha: 14-11-2014 a las 13:49:27.
Responder Con Cita
  #20  
Antiguo 14-11-2014
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por dec Ver Mensaje
Así que retiro la palabra "chapuza" (la retiro yo, no quienes tengan otra opinión) y me quedo con la palabra "trampa", que, siendo parecido, no me suena igual.
A esto le llamamos cantinflear

Pero digo lo anterior de forma amistosa. La verdad es que para mi, trampa y chapuza son lo mismo pero tu componente no es ni lo uno ni lo otro, pues además, no siendo lo uno tampoco podría ser lo otro puesto que lo uno es lo mismo que lo otro.

¡Que muy bueno tu trabajo pues!

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
CHARACTER SET ISO8859_1 is not defined erickperez6 Firebird e Interbase 10 07-02-2013 16:05:05
Problemas con Character Set Thorbillisner MySQL 0 16-11-2010 15:45:30
Character set no se encuentra JosepGA Conexión con bases de datos 3 10-09-2008 14:41:20
'default Character Set Iso8859_1' Io Firebird e Interbase 3 07-09-2005 17:46:19
error de character set ibuser Varios 2 15-07-2004 17:21:02


La franja horaria es GMT +2. Ahora son las 14:40:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi