OCR araçlarını kullanarak bir ekran bölgesinden anında metin nasıl çıkarabilirim?

25

Ubuntu 12.10’da, yazıyorsam

gnome-screenshot -a | tesseract output

döndürür:

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

Ekrandan bir metin seçip metni (panoya veya dokümana) nasıl dönüştürebilirim?

Teşekkürler!

    
sordu Erling 12.04.2013 00:11

3 cevap

30

Belki zaten bunu yapan bir araç var, ancak kullanmaya çalıştığınız gibi bazı ekran görüntüsü aracı ve tesseract ile basit bir betik oluşturabilirsiniz.

Bu komut dosyasını örnek olarak alın (sistemimde /usr/local/bin/screen_ts olarak kaydettim):

#!/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

Ve pano desteği ile:

#!/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

Ekranı almak için scrot , metni tanımak için tesseract ve sonucu görüntülemek için cat değerini kullanır. Pano sürümü ayrıca çıktıyı panoya aktarmak için xsel kullanır.

NOT : scrot , xsel , imagemagick ve tesseract-ocr varsayılan olarak yüklenmemiş, ancak varsayılan depolardan edinilebilir.

scrot 'si gnome-screenshot ile değiştirebilir, ancak çok fazla iş gerektirebilir. Çıktıyla ilgili olarak, bir metin dosyasını okuyabilecek herhangi bir şey kullanabilirsiniz (Metin Düzenleyicisi ile açık, tanınmış metni bir bildirim olarak gösterme, vb.).

Komut dosyasının GUI sürümü

İşte, OCR komut dosyasının dil seçimi diyaloğu dahil basit bir grafik versiyonu:

#!/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
cat $SCR_IMG | xsel -bi # pass to clipboard
exit

Yukarıda listelenen bağımlılıkların yanı sıra Zenity fork YAD'yi yüklemeniz gerekir. komut dosyasını çalıştırmak için webupd8 PPA 'dan.

    
verilen cevap Salem 12.04.2013 16:59
2

Herhangi birinin çözümüme ihtiyacı olup olmadığını bilmiyorum. İşte wayland ile çalışan bir tane.

Bir Text-Editor'da karakter tanıma özelliğini gösterir ve eğer paramiti "yes" eklerseniz, transkripsiyon trans aletinden çeviri alırsınız (İnternet bağlantısı zorunludur). Kullanmadan önce tesseract-ocr imagemagick ve google'ı kurun. -trans. Tanıtmak istediğiniz metninizi gördüğünüzde, betiği, yani Alt + F2 ile gnome'da başlatın. Metni metnin etrafına taşıyın. Bu kadar. Bu betik sadece gnome için testetd. Diğer pencere yöneticisi için uygun olacaktır. Metni başka dillere çevirmek için 25 satırındaki dil kimliğini değiştirin.

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

translate="no"
translate=

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
    
verilen cevap Ronald 02.05.2018 13:58
0

Günün modern saatlerinde ekran görüntüsünü nasıl kullanacağım hakkında bir blog yazmayı yaptım. Çince'yi hedeflesem de, ekranın dökümanı ve kodu ingilizce. OCR sadece özelliklerden biridir.

OCR'm için özellik:

  • Düzenlemek için konsole + vimx VEYA gedit'te açın.

  • Vimx + ingilizce için yazım denetimi özelliğini etkinleştirin.

  • Sabit kod olmadan dinamik dil seçimini destekleyin.

  • Dönüştürme ve yavaş hareket etme durumunda ilerleme durumu iletişim kutusu.

İşlev kodu:

function ocr () {
    tmpj=""
    tmpocr=""
    tmpocr_p=""
    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"
}

Arayan kodu:

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 &

Çalıştırmak için bu 2 kodu tek kabuk komut dosyasında birleştirin.

Ekran Görüntüsü 1:

Ekran Görüntüsü 2:

    
verilen cevap 林果皞 12.04.2016 11:52

Etiketlerdeki diğer soruları oku