Как можно мгновенно извлечь текст из области экрана, используя инструменты OCR?

В Ubuntu 12.10, если я наберу

gnome-screenshot -a | tesseract output

, он возвращает:

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

Как выбрать текст на экране и преобразовать его в текст (буфер обмена или документ) ?

Спасибо!

31
задан 12 April 2013 в 17:58

6 ответов

Efallai bod rhywfaint o offeryn eisoes yn gwneud hynny, ond gallwch hefyd greu sgript syml gyda rhywfaint o offeryn screenshot a tesseract, fel yr ydych chi ceisio ei ddefnyddio.

Cymerwch y sgript hon fel enghraifft (yn fy system mi wnes i ei chadw fel / usr / local / bin / screen_ts ):

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

select tesseract_lang in eng rus equ ;do break;done
# Quick language menu, add more if you need other languages.

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

scrot -s $SCR_IMG.png -q 100 
# increase quality with option -q from default 75 to 100
# Typo "$SCR_IMG.png000" does not continue with same name.


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

A gyda chefnogaeth clipfwrdd:

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

select tesseract_lang in eng rus equ ;do break;done
# quick language menu, add more if you need other languages.

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

scrot -s $SCR_IMG.png -q 100    
# increase image quality with option -q from default 75 to 100

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

Mae'n defnyddio scrot i fynd â'r sgrin, tesseract i gydnabod y testun a cath i arddangos y canlyniad. Mae fersiwn y clipfwrdd hefyd yn defnyddio xsel i beipio'r allbwn i'r clipfwrdd.

sample usage

SYLWCH : sgrot , xsel , imagemagick [1191399 Nid yw] a tesseract-ocr wedi'u gosod yn ddiofyn ond maent ar gael o'r ystorfeydd diofyn.

Efallai y gallwch ddisodli scrot gyda gnome-screenshot , ond gall gymryd llawer o waith. O ran yr allbwn gallwch ddefnyddio unrhyw beth sy'n gallu darllen ffeil testun (ar agor gyda Golygydd Testun, dangoswch y testun cydnabyddedig fel hysbysiad, ac ati).


Fersiwn GUI o'r sgript

Dyma fersiwn graffigol syml o'r sgript OCR gan gynnwys deialog dewis iaith:

#!/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 -q 100 #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
xsel -bi < "$SCR_IMG".txt # pass to clipboard
exit

Ar wahân i'r dibyniaethau a restrir uchod, bydd angen i chi osod y Zenity fork YAD o'r webupd8 PPA i wneud i'r sgript weithio.

42
ответ дан 12 April 2013 в 17:58

Я только что написал блог о том, как использовать снимки экрана в наши дни. Несмотря на то, что я нацелен на китайский язык, экран и код на английском языке. OCR - это всего лишь одна из функций.

Функция моего OCR:

  • Открыть в konsole + vimx ИЛИ gedit для дальнейшего редактирования.

  • Для vimx + english включить проверку орфографии.

  • Поддержка динамического выбора языка без жесткий код.

  • Диалог выполнения при преобразовании и тессерактинге, который выполняется медленно.

Код функции:

function ocr () {
    tmpj="$1"
    tmpocr="$2"
    tmpocr_p="$3"
    atom="$(tesseract --list-langs 2>&1)"; atom=(`echo "${atom#*:}"`); atom=(`echo "$(printf 'FALSE\n%s\n' "${atom[@]}")"`); atom[0]='True'
    ans=(`yad --center --height=200 --width=300 --separator='|' --on-top --list --title '' --text='Select Languages:' --radiolist --column '✓' --column 'Languages' "${atom[@]}" 2>/dev/null`) && ans="$(echo "${ans:5:-1}")" &&  convert "$tmpj[x2000]" -unsharp 15.6x7.8+2.69+0 "$tmpocr_p" | yad --on-top --title '' --text='Converting ...' --progress --pulsate --auto-close 2>/dev/null && tesseract "$tmpocr_p" "$tmpocr" -l "$ans" 2>>/tmp/tesseract.log | yad --percentage=50 --on-top --title '' --text='Tesseracting ...' --progress --pulsate --auto-close 2>/dev/null && if [[ "$ans" == 'eng' ]]; then konsole -e "vimx -c 'setlocal spell spelllang=en_us' -n $tmpocr.txt" 2>/dev/null; else gedit "$tmpocr.txt"; fi
    rm "$tmpocr_p"
}

Код вызывающего абонента:

for cmd in "mktemp" "convert" "tesseract" "gedit" "konsole" "vimx" "yad"; do 
    command -v $cmd >/dev/null 2>&1 || {  LANG=POSIX; xmessage "Require $cmd but it's not installed.  Aborting." >&2; exit 1; }; :;
done
tmpj="$(mktemp /tmp/`date +"%s_%Y-%m-%d"`_XXXXXXXXXX.png)"
tmpocr="$(mktemp -u /tmp/`date +"%s_%Y-%m-%d"`_ocr_XXXXX)"
tmpocr_p="$tmpocr"+'.png'
gnome-screenshot -a -f "$tmpj" 2>&1 >/dev/null | ts >>/tmp/gnome_area_PrtSc_error.log
ocr $tmpj $tmpocr $tmpocr_p &

Объедините эти 2 кода в одном сценарии оболочки для запуска.

Снимок экрана 1: enter image description here

Снимок экрана 2: enter image description here

1
ответ дан 12 April 2013 в 17:58

Идея состоит в том, что каждый раз, когда в папке появляются новые файлы снимков экрана, запустите tesseract OCR и откройте их в редакторе файлов.

Вы можете оставить этот запущенный скрипт в каталоге вывода вашего любимого каталога вывода снимков экрана

#cat wait_for_it.sh
inotifywait -m . -e create -e moved_to |
    while read path action file; do
        echo "The file '$file' appeared in directory '$path' via '$action'"
        cd "$path"
        if [ ${file: -4} == ".png" ]; then
                tesseract "$file" "$file"
                sleep 1
                gedit "$file".txt &
        fi

    done

Вам нужно, чтобы это было установлено

sudo apt install tesseract-ocr
sudo apt install inotify-tools
0
ответ дан 12 April 2013 в 17:58

Не знаю, есть ли нужно мое решение. Вот тот, который работает с wayland.

Он показывает распознавание символов в текстовом редакторе, и если вы добавите параметр «да», вы получите перевод с помощью инструмента трансформации goggle (подключение к Интернету обязательно), прежде чем вы сможете использовать он устанавливает tesseract-ocr imagemagick и google-trans. Запустите скрипт, т.е. в gnome, с помощью Alt + F2, когда вы увидите текст, который хотите распознать. Переместите бегунок по тексту. Это оно. Этот скрипт тестировался только для gnome. Для других оконных менеджеров это необходимо. Чтобы перевести текст на другие языки, замените идентификатор языка в строке 25.

#!/bin/bash
# Dependencies: tesseract-ocr imagemagick google-trans

translate="no"
translate=$1

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

gnome-screenshot -a -f $SCR_IMG.png  
# increase quality with option -q from default 75 to 100
# Typo "$SCR_IMG.png000" does not continue with same name.


mogrify -modulate 100,0 -resize 400% $SCR_IMG.png 
#should increase detection rate

tesseract $SCR_IMG.png $SCR_IMG &> /dev/null

if [ $translate = "yes" ] ; then

        trans :de file://$SCR_IMG.txt -o $SCR_IMG.translate.txt
        gnome-text-editor $SCR_IMG.translate.txt
        else
        gnome-text-editor $SCR_IMG.txt
fi

exit
3
ответ дан 12 April 2013 в 17:58

Létrehoztam egy ingyenes és nyílt forráskódú programot erre a célra:

https://danpla.github.io/dpscreenocr/

enter image description here

6
ответ дан 12 April 2013 в 17:58

Этот однострочный сценарий (на основе https://askubuntu.com/a/ 1084151/456438 ) должен использоваться с сочетанием клавиш, чтобы вы могли ocr в любом месте экрана, не открывая терминал, как показано на этом изображении.

usage example

#!/bin/bash
# Dependencies: convert imagemagick xsel tesseract-ocr-fra [tesseract-ocr-jpn ...]  

convert x: -modulate 100,0 -resize 400% -set density 300 png:- |
  tesseract stdin stdout -l fra+eng+jpn --psm 3 | 
  sed 's/'$(printf '%b' '\014')'//g;s/|/I/g' | 
  xsel -bi

Измените - psm Параметры и -l по мере необходимости. Примеры:

  • - psm 10 для изображения с одним символом
  • - psm 3 используется по умолчанию.
  • -l fra + eng + jpn сначала рассмотрит Французский, затем английский, затем японский.

Адаптируйте пост-обработку sed к вашим потребностям. sed 's /' $ (printf '% b' '\ 014') '// g; s / | / I / g' удаляет символ подачи формы (восьмеричное 014) и заменяет вертикальную полосу "|" с "I".

Используйте стандартные инструкции https://help.ubuntu.com/stable/ubuntu-help/keyboard-shortcuts-set.html.en , чтобы создать сочетание клавиш, которое будет выполнить сценарий. Поместите сценарий в ~ / bin или в любое другое место в переменной среды path, чтобы не использовать полный путь к сценарию.

0
ответ дан 5 January 2021 в 23:25

Другие вопросы по тегам:

Похожие вопросы: