30 votos

¿Cómo puede instantáneamente extraer el texto de un área de la pantalla utilizando herramientas de OCR?

En Ubuntu 12.10, si me escriba

gnome-screenshot -a | tesseract output

devuelve:

** Message: Unable to use GNOME Shell's builtin screenshot interface, resorting to fallback X11.

¿Cómo puedo seleccionar un texto de la pantalla y convertir a texto (bloc de notas, o documento)?

Gracias!

42voto

Bram Vanroy Puntos 121

Tal vez ya hay alguna herramienta que hace, pero también puede crear un simple script con alguna captura de pantalla de la herramienta y tesseract, como está intentando utilizar.

Tomemos como ejemplo esta secuencia de comandos (en mi sistema he guardado como /usr/local/bin/screen_ts):

#!/bin/bash
# Dependencies: tesseract-ocr imagemagick scrot

SCR_IMG=`mktemp`
trap "rm $SCR_IMG*" EXIT

scrot -s $SCR_IMG.pngOOO
mogrify -modulate 100,0 -resize 400% $SCR_IMG.png #should increase detection rate
tesseract $SCR_IMG.png $SCR_IMG &> /dev/null
cat $SCR_IMG.txt

exit

Y con soporte de portapapeles:

#!/bin/bash 
# Dependencies: tesseract-ocr imagemagick scrot xsel

SCR_IMG=`mktemp`
trap "rm $SCR_IMG*" EXIT

scrot -s $SCR_IMG.png
mogrify -modulate 100,0 -resize 400% $SCR_IMG.png #should increase detection rate
tesseract $SCR_IMG.png $SCR_IMG &> /dev/null
cat $SCR_IMG.txt | xsel -bi

exit

Se utiliza scrot a tomar la pantalla, tesseract a reconocer el texto y cat para mostrar el resultado. La versión del portapapeles además utiliza xsel a la tubería de la salida en el portapapeles.

sample usage

NOTA: scrot, xsel, imagemagick y tesseract-ocr no están instaladas por defecto, pero están disponibles desde los repositorios por defecto.

Usted puede ser capaz de sustituir a la scrot con gnome-screenshot, pero puede tomar un montón de trabajo. Con respecto a la salida se puede usar cualquier cosa que pueda leer un archivo de texto (abrir con Editor de Texto, mostrar el texto reconocido como una notificación, etc).


Versión gráfica de la secuencia de comandos

Aquí está una versión gráfica de la OCR secuencia de comandos, incluyendo una selección del idioma de diálogo:

#!/bin/bash
# DEPENDENCIES: tesseract-ocr imagemagick scrot yad
# AUTHOR:       Glutanimate 2013 (http://askubuntu.com/users/81372/)
# NAME:         ScreenOCR
# LICENSE:      GNU GPLv3
#
# BASED ON:     OCR script by Salem (http://askubuntu.com/a/280713/81372)

TITLE=ScreenOCR # set yad variables
ICON=gnome-screenshot

# - tesseract won't work if LC_ALL is unset so we set it here
# - you might want to delete or modify this line if you 
#   have a different locale:

export LC_ALL=en_US.UTF-8

# language selection dialog
LANG=$(yad \
    --width 300 --entry --title "$TITLE" \
    --image=$ICON \
    --window-icon=$ICON \
    --button="ok:0" --button="cancel:1" \
    --text "Select language:" \
    --entry-text \
    "eng" "ita" "deu")

# - You can modify the list of available languages by editing the line above
# - Make sure to use the same ISO codes tesseract does (man tesseract for details)
# - Languages will of course only work if you have installed their respective
#   language packs (https://code.google.com/p/tesseract-ocr/downloads/list)

RET=$? # check return status

if [ "$RET" = 252 ] || [ "$RET" = 1 ]  # WM-Close or "cancel"
  then
      exit
fi

echo "Language set to $LANG"

SCR_IMG=`mktemp` # create tempfile
trap "rm $SCR_IMG*" EXIT # make sure tempfiles get deleted afterwards

scrot -s $SCR_IMG.png #take screenshot of area
mogrify -modulate 100,0 -resize 400% $SCR_IMG.png # postprocess to prepare for OCR
tesseract -l $LANG $SCR_IMG.png $SCR_IMG # OCR in given language
cat $SCR_IMG.txt | xsel -bi # pass to clipboard
exit

Aparte de las dependencias mencionadas anteriormente, usted tendrá que instalar el Zenity tenedor YAD de la PPA de webupd8 para que el script funcione.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: