Tesseract full integration
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-30-2010 06:52 PM
Hola a todos. Espero que lo siguiente les sea útil a quiénes deseen realizar búsquedas de texto en documento escaneados TIF, y en linux.
Antes debo hacer alguna aclaraciones.
Tesseract 2.x NO funciona con archicos con extensión .tiff , sólo funciona con archivos .tif . La versión 3.0 sí lo hace. A continuación pongo la versión para Tesseract 2.x, dado que Alfresco modifica los archivos TIF a TIFF en el proceso de transformación, y luego lo guarda nuevamente a .TIF (alguien sabe si este se puede cambiar y dejarlo sólo en .tif?).
Hay otro problema más, y es que Tesseract da siempre como archivo de salida uno finalizado en txt, por lo tanto si le agregamos la extensión, obtendremos un archivo.txt.txt. Por este motivo he realizado un wrapper para eviatr este problema, y que Alfresco pueda indexar correctamente.
En primer lugar debemos probar Tesseract desde la consola:
archivosalida lo dejamos sin extensión. Si todo funciona correctamente.
Creamos un archivo ocrtiff-transform-context.xml en /tomcat/shared/classes/alfresco/extenssion con el siguiente contenido:
Luego, un pequeño wrapper para efectuar todas las modificaciones del caso y que Tesseract no muera en el intento. En la raíz de donde tengan instalado Alfresco (en mi caso /opt/alfresco) crean un archivo con permisos de ejecución (755) llamado 'ocr' con el siguiente contenido:
Si quieren sabér qué ocurre cuando Alfresco hace las transformaciones, descomenten la línea del log.
Ahora solo resta reiniciar Alfresco, y subir cualquier archivo .tif para que éste sea indexado correcta. Es super veloz amigos
Cualquier duda comenten. Para los que más sepan, les agradeceré cualquier mejora en el script y transformer. Gracias
Happy ocring 🙂
Antes debo hacer alguna aclaraciones.
Tesseract 2.x NO funciona con archicos con extensión .tiff , sólo funciona con archivos .tif . La versión 3.0 sí lo hace. A continuación pongo la versión para Tesseract 2.x, dado que Alfresco modifica los archivos TIF a TIFF en el proceso de transformación, y luego lo guarda nuevamente a .TIF (alguien sabe si este se puede cambiar y dejarlo sólo en .tif?).
Hay otro problema más, y es que Tesseract da siempre como archivo de salida uno finalizado en txt, por lo tanto si le agregamos la extensión, obtendremos un archivo.txt.txt. Por este motivo he realizado un wrapper para eviatr este problema, y que Alfresco pueda indexar correctamente.
En primer lugar debemos probar Tesseract desde la consola:
tesseract archivo.tif archivosalida -l spa
archivosalida lo dejamos sin extensión. Si todo funciona correctamente.
Creamos un archivo ocrtiff-transform-context.xml en /tomcat/shared/classes/alfresco/extenssion con el siguiente contenido:
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'><beans> <bean id="transformer.worker.ocr.tiff" class="org.alfresco.repo.content.transform.RuntimeExecutableContentTransformerWorker"> <property name="mimetypeService"> <ref bean="mimetypeService" /> </property> <property name="checkCommand"> <bean class="org.alfresco.util.exec.RuntimeExec"> <property name="commandsAndArguments"> <map> <entry key=".*"> <list><!– <value>tesseract</value> –> <value>/opt/alfresco/ocr</value> </list> </entry> </map> </property> <property name="errorCodes"> <value>2</value> </property> </bean> </property> <property name="transformCommand"> <bean class="org.alfresco.util.exec.RuntimeExec"> <property name="commandsAndArguments"> <map> <entry key=".*"> <list><!– <value>tesseract</value> <value>${source}</value> <value>${target}</value> <value>-l</value> <value>spa</value> –> <value>/opt/alfresco/ocr</value> <value>${source}</value> <value>${target}</value> </list> </entry> </map> </property> <property name="errorCodes"> <value>1,2</value> </property> </bean> </property> <property name="explicitTransformations"> <list> <bean class="org.alfresco.repo.content.transform.ExplictTransformationDetails"> <property name="sourceMimetype"><value>image/tiff</value></property> <property name="targetMimetype"><value>text/plain</value></property> </bean> </list> </property> </bean> <bean id="transformer.ocr.tiff" class="org.alfresco.repo.content.transform.ProxyContentTransformer" parent="baseContentTransformer"> <property name="worker"> <ref bean="transformer.worker.ocr.tiff" /> </property> </bean></beans>
Luego, un pequeño wrapper para efectuar todas las modificaciones del caso y que Tesseract no muera en el intento. En la raíz de donde tengan instalado Alfresco (en mi caso /opt/alfresco) crean un archivo con permisos de ejecución (755) llamado 'ocr' con el siguiente contenido:
#!/bin/bash# save arguments to variablesSOURCE=$1TARGET=$2TMPDIR=/tmpFILENAME=`basename $SOURCE`OCRFILE=$FILENAME.tif# to see what happens#echo "from $SOURCE to $TARGET" >>/tmp/ocrtransform.logcp -f $SOURCE $TMPDIR/$OCRFILE# call tesseract and redirect output to $TARGETtesseract $TMPDIR/$OCRFILE ${TARGET%\.*} -l sparm -f $TMPDIR/$OCRFILE
Si quieren sabér qué ocurre cuando Alfresco hace las transformaciones, descomenten la línea del log.
Ahora solo resta reiniciar Alfresco, y subir cualquier archivo .tif para que éste sea indexado correcta. Es super veloz amigos
Cualquier duda comenten. Para los que más sepan, les agradeceré cualquier mejora en el script y transformer. Gracias
Happy ocring 🙂
Labels:
- Labels:
-
Archive
15 REPLIES 15
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-20-2010 09:46 AM
Hola Urbano:
El script se ejecuta según el log en /home/urbano/Escritorio/ocr-simple.py, y por el error parece que no genera el archivo /tmp/tesser-6399.txt donde el numero es el proceso del shell script que se ejecuta en el comando popen de python. Ten en cuenta, que tesseract esta en /usr/bin/tesseract
Si me dices que te funciona el script en una terminal me descolocas un poco, porque hay dos posibles fuentes de error, o el comando tesseract no funciona correctamente (por ejemplo, las rutas no estan bien o no estan el path) y no da resultados en la salida estándar de modo que no se redirecciona al archivo temporal, o bien hay un problema de permisos. Y por lo que dices y veo, descarto el problema de permisos ya que el usuario que utilizas es tu usuario sin privilegios urbano, tanto en la terminal como en el proceso java de alfresco (por eso te da errores en el log con el ftp y con el cifs, porque no puedes abrir esos puertos sin privilegios) .
Por otro lado, el path del script de python se declara en el transformador (yo lo he puesto en /opt/alfresco/bin/). Pon el resultado que te da el script ocr-python.py en la terminal al aplicarlo sobre la imagen y lo miramos.
Un saludo.
–C.
El script se ejecuta según el log en /home/urbano/Escritorio/ocr-simple.py, y por el error parece que no genera el archivo /tmp/tesser-6399.txt donde el numero es el proceso del shell script que se ejecuta en el comando popen de python. Ten en cuenta, que tesseract esta en /usr/bin/tesseract
Si me dices que te funciona el script en una terminal me descolocas un poco, porque hay dos posibles fuentes de error, o el comando tesseract no funciona correctamente (por ejemplo, las rutas no estan bien o no estan el path) y no da resultados en la salida estándar de modo que no se redirecciona al archivo temporal, o bien hay un problema de permisos. Y por lo que dices y veo, descarto el problema de permisos ya que el usuario que utilizas es tu usuario sin privilegios urbano, tanto en la terminal como en el proceso java de alfresco (por eso te da errores en el log con el ftp y con el cifs, porque no puedes abrir esos puertos sin privilegios) .
Por otro lado, el path del script de python se declara en el transformador (yo lo he puesto en /opt/alfresco/bin/). Pon el resultado que te da el script ocr-python.py en la terminal al aplicarlo sobre la imagen y lo miramos.
Un saludo.
–C.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-20-2010 09:49 AM
Por cierto:
Sin relación con el problema anterior os dejo un enlace con otros aspectos sobre la integración de tesseract con Alfresco.
http://tpeelen.wordpress.com/2010/12/17/alfresco-using-tesseract-ocr-on-ubuntu-linux/
Un saludo.
–C.
Sin relación con el problema anterior os dejo un enlace con otros aspectos sobre la integración de tesseract con Alfresco.
http://tpeelen.wordpress.com/2010/12/17/alfresco-using-tesseract-ocr-on-ubuntu-linux/
Un saludo.
–C.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-20-2010 10:20 AM
Hola Urbano:
El script se ejecuta según el log en /home/urbano/Escritorio/ocr-simple.py, y por el error parece que no genera el archivo /tmp/tesser-6399.txt donde el numero es el proceso del shell script que se ejecuta en el comando popen de python. Ten en cuenta, que tesseract esta en /usr/bin/tesseract
Si me dices que te funciona el script en una terminal me descolocas un poco, porque hay dos posibles fuentes de error, o el comando tesseract no funciona correctamente (por ejemplo, las rutas no estan bien o no estan el path) y no da resultados en la salida estándar de modo que no se redirecciona al archivo temporal, o bien hay un problema de permisos. Y por lo que dices y veo, descarto el problema de permisos ya que el usuario que utilizas es tu usuario sin privilegios urbano, tanto en la terminal como en el proceso java de alfresco (por eso te da errores en el log con el ftp y con el cifs, porque no puedes abrir esos puertos sin privilegios) .
Por otro lado, el path del script de python se declara en el transformador (yo lo he puesto en /opt/alfresco/bin/). Pon el resultado que te da el script ocr-python.py en la terminal al aplicarlo sobre la imagen y lo miramos.
Un saludo.
–C.
Gracias por tu rápida respuesta Cesar, ahora he colocado el script en la ruta /usr/share/tomcat6/bin y también he especificado esta ruta en ocr-context.xml, he probado el script desde la linea de comandos de la siguiente forma: ./ocr-simple.py simple.tif salida y se ejecuta con exito, el fichero "salida" contiene el texto de la imagen. Después he reiniciado el servidor de alfresco y he subido la imagen simple.tif a este pero no me realiza la búsqueda. Como tu indicabas no se ha generado ningun fichero tesser-xxxx en /tmp, este es el contenido de /tmp/ocr.log
/tmp/tomcat6-temp/Alfresco/RuntimeExecutableContentTransformerWorker_source_3474341795967203523.tiff
Un saludo, Urbano.

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-11-2014 04:07 AM
Un post estupendo!, estamos probando Alfresco en nuestra organización y contamos con una cantidad importante de documentos escaneados.
Voy a probar lo que ponéis por aquí aunque me gustaría si alguien sabe como tratar directamente con ficheros PDF ya que las máquinas modernas de escaneo ya generan PDF multipágina de manera predeterminada.
Un saludo y muchas gracias.
Voy a probar lo que ponéis por aquí aunque me gustaría si alguien sabe como tratar directamente con ficheros PDF ya que las máquinas modernas de escaneo ya generan PDF multipágina de manera predeterminada.
Un saludo y muchas gracias.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-04-2014 12:49 AM
hi,
i am trying to integrate alfresco with tesseract in linux environment, i done in windows but i am facing problem in linux environment please help me.
OCR.sh
echo "hello">>tmp/ocrtransform.log
SOURCE=$1
TARGET=$2
TMPDIR=tmp/ocrtransform.log
FILENAME=`basename $SOURCE`
sudo OCRFILE=$FILENAME.tif
# to see what happens
sudo echo "from $SOURCE to $TARGET" >>tmp/ocrtransform.log
sudo cp -f $SOURCE $TMPDIR/$OCRFILE
# call tesseract and redirect output to $TARGET
sudo /root/tesseract-ocr/tesseract $TMPDIR/$OCRFILE ${TARGET%\.*} -l eng
sudo rm -f $TMPDIR/$OCRFILE
this is the errror i am getting.
os: Linux
command: tesseract /var/www/html/alfresco/ocr.sh
succeeded: false
exit code: 1
out:
err: tesseract: /var/www/html/alfresco/common/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libtesseract.so.3)
tesseract: /var/www/html/alfresco/common/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by
23:48:32,570 INFO [org.alfresco.repo.management.subsystems.ChildApplicationContextFactory] Starting 'Transformers' subsystem, ID: [Transformers, default]
Thanks,
os: Linux
command: tesseract /var/www/html/alfresco/ocr.sh
succeeded: false
exit code: 1
out:
err: tesseract: /var/www/html/alfresco/common/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libtesseract.so.3)
tesseract: /var/www/html/alfresco/common/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by
23:48:32,570 INFO [org.alfresco.repo.management.subsystems.ChildApplicationContextFactory] Starting 'Transformers' subsystem, ID: [Transformers, default]
thanks,
Malleshwari.
i am trying to integrate alfresco with tesseract in linux environment, i done in windows but i am facing problem in linux environment please help me.
OCR.sh
echo "hello">>tmp/ocrtransform.log
SOURCE=$1
TARGET=$2
TMPDIR=tmp/ocrtransform.log
FILENAME=`basename $SOURCE`
sudo OCRFILE=$FILENAME.tif
# to see what happens
sudo echo "from $SOURCE to $TARGET" >>tmp/ocrtransform.log
sudo cp -f $SOURCE $TMPDIR/$OCRFILE
# call tesseract and redirect output to $TARGET
sudo /root/tesseract-ocr/tesseract $TMPDIR/$OCRFILE ${TARGET%\.*} -l eng
sudo rm -f $TMPDIR/$OCRFILE
this is the errror i am getting.
os: Linux
command: tesseract /var/www/html/alfresco/ocr.sh
succeeded: false
exit code: 1
out:
err: tesseract: /var/www/html/alfresco/common/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libtesseract.so.3)
tesseract: /var/www/html/alfresco/common/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by
23:48:32,570 INFO [org.alfresco.repo.management.subsystems.ChildApplicationContextFactory] Starting 'Transformers' subsystem, ID: [Transformers, default]
Thanks,
os: Linux
command: tesseract /var/www/html/alfresco/ocr.sh
succeeded: false
exit code: 1
out:
err: tesseract: /var/www/html/alfresco/common/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/local/lib/libtesseract.so.3)
tesseract: /var/www/html/alfresco/common/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by
23:48:32,570 INFO [org.alfresco.repo.management.subsystems.ChildApplicationContextFactory] Starting 'Transformers' subsystem, ID: [Transformers, default]
thanks,
Malleshwari.

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-11-2016 07:04 AM
Intenté el script probarlo por sí sólo y funciona (el primer script de linux), pero al integrarlo en alfresco no funciona. Estoy usando Alfresco-5.0.a.
Gracias
Gracias
