Bagaimana cara secara instan mengekstraksi teks dari area layar menggunakan alat OCR?

27

Di Ubuntu 12.10, jika saya mengetik

gnome-screenshot -a | tesseract output

mengembalikan:

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

Bagaimana saya bisa memilih teks dari layar dan mengubahnya menjadi teks (clipboard atau dokumen)?

Terima kasih!

Erling
sumber
Anda hanya mendapatkan kesalahan itu gnome-screenshot -a? Juga mengapa Anda menyalurkan output ke tesseract? Jika saya tidak salah, gnome-screenshot menyimpan gambar pada file, dan tidak "mencetak" itu ...
Salem
Peringatan seharusnya tidak berbahaya jika saya melihat bugzilla. Pertanyaan: apa itu auto-save-directory? Dan apakah itu menjatuhkan sesuatu di sana? Tautan menarik: forums.debian.net/viewtopic.php?f=6&t=85683
Rinzwind
gnome-screenchot -a -c seharusnya menyalin seleksi ke clipboard, bukan ?. tapi mem-pipkannya ke tesseract memberikan kesalahan yang sama. direktori default adalah home / gambar (berfungsi dengan baik).
Erling
1
Baru saja melakukan ini menggunakan gnome-tangkapan layar - Saya kemudian harus mengedit file untuk mengurangi kedalaman warna dari 16m ke 2 (itu adalah teks hitam pada latar belakang putih, tetapi dengan font mewah saat ini dan sebagainya, itu tidak benar - benar hitam ) Saya kemudian harus skala gambar hingga 200% dari aslinya sebelum saya mendapatkan OCR akurat dari tesseract - tapi itu bekerja dengan sangat baik setelah saya melakukan itu.
@SteveLake Hei Steve, terima kasih atas sarannya. Saya mengedit skrip untuk secara terprogram memodifikasi gambar dengan cara yang Anda jelaskan sebelum OCRing. Tingkat deteksi sekarang harus jauh lebih baik.
Glutanimate

Jawaban:

35

Mungkin sudah ada beberapa alat yang melakukan itu, tetapi Anda juga dapat membuat skrip sederhana dengan beberapa alat tangkapan layar dan tesseract, saat Anda mencoba menggunakannya.

Ambil sebagai contoh skrip ini (di sistem saya saya menyimpannya sebagai /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

Dan dengan dukungan clipboard:

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

Ini digunakan scrotuntuk mengambil layar, tesseractuntuk mengenali teks dan catuntuk menampilkan hasilnya. Versi clipboard juga digunakan xseluntuk menyalurkan output ke clipboard.

penggunaan sampel

CATATAN : scrot, xsel, imagemagickdan tesseract-ocrtidak diinstal secara default, tetapi tersedia dari repositori default.

Anda mungkin bisa mengganti scrotdengan gnome-screenshot, tetapi mungkin butuh banyak pekerjaan. Mengenai output, Anda dapat menggunakan apa pun yang dapat membaca file teks (buka dengan Editor Teks, tampilkan teks yang dikenali sebagai pemberitahuan, dll).


Versi skrip GUI

Berikut ini adalah versi grafis sederhana dari skrip OCR termasuk dialog pemilihan bahasa:

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

Selain dependensi yang tercantum di atas, Anda perlu menginstal garpu Zenity YAD dari PPA webupd8 untuk membuat skrip berfungsi.

Salem
sumber
bekerja greate di terminal! Terima kasih! Saya ingin screencopy codetext dari tutorial untuk pengujian. Bagaimana cara menggunakan scrot ke clipboard?
Erling
1
apa yang terjadi dengan tempfiles?
Erling
1
Tempfile tetap di sana sampai Anda me-reboot komputer Anda. Jika itu masalah bagi Anda, Anda bisa menghapusnya di akhir ( rm $SCR_IMG.png $SCR_IMG.txt).
Salem
1
scrotdengan sendirinya tidak dapat menggunakan clipboard. Tetapi ada alat seperti xclipatau xselyang dapat melakukan apa yang Anda butuhkan jika ingin menyalin / menempelkan teks.
Salem
1
Menambahkan ke jawaban Salem: Jika Anda menjalankan KDE maka Anda dapat memanggil skrip lain untuk secara otomatis mengirim teks yang Anda buat ke clipboard, siap untuk ditempelkan. Anda akan menemukan skrip yang cocok di sini . Ikuti instruksi pada halaman itu untuk menginstal skrip itu. Maka yang Anda butuhkan hanyalah menambahkan | clipboardke akhir baris terakhir naskah Salem.
Chris
3

Tidak tahu apakah ada yang membutuhkan solusi saya. Inilah salah satu yang berjalan dengan wayland.

Ini menunjukkan pengenalan karakter dalam Editor Teks dan jika Anda menambahkan parameter "ya" Anda mendapat terjemahan dari alat trans goggle (koneksi Internet wajib) Sebelum Anda dapat menggunakannya instal tesseract-ocr imagemagick dan google-trans. Mulai skrip yaitu di gnome dengan Alt + F2 ketika Anda melihat teks yang ingin Anda kenali. Pindahkan kursor di sekitar teks. Itu dia. Script ini hanya diuji untuk gnome. Untuk window manager lain, sebaiknya mengakomodasi. Untuk menerjemahkan teks dalam bahasa lain, ganti ID bahasa di baris 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
Ronald
sumber
1

Saya baru saja melakukan blogging tentang cara menggunakan tangkapan layar di zaman modern. Meskipun saya menargetkan bahasa Mandarin tetapi layar dan kodenya dalam bahasa Inggris. OCR hanyalah salah satu fitur.

Fitur untuk OCR saya:

  • Buka di konsole + vimx ATAU gedit untuk mengedit lebih lanjut.

  • Untuk vimx + bahasa Inggris, aktifkan pemeriksaan ejaan.

  • Mendukung pemilihan bahasa dinamis tanpa kode keras.

  • Dialog progres saat mengonversi dan menjalankan yang lambat.

Kode fungsi:

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"
}

Kode penelepon:

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 &

Gabungkan kode 2 ini dalam skrip shell tunggal untuk dijalankan.

Tangkapan layar 1: masukkan deskripsi gambar di sini

Tangkapan layar 2: masukkan deskripsi gambar di sini

林果 皞
sumber
sepertinya solusi yang layak tetapi keterbacaan skrip Anda sangat buruk
ukos
0

Idenya adalah kapan saja file screenshot baru muncul di folder, jalankan tesseract OCR di atasnya dan buka di file editor.

Anda dapat meninggalkan skrip yang sedang berjalan ini di direktori output direktori keluaran screen shot favorit Anda

#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

Anda akan membutuhkan ini untuk disimpan

sudo apt install tesseract-ocr
sudo apt install inotify-tools
Eduard Florinescu
sumber