Làm cách nào có thể trích xuất tức thời văn bản từ một vùng màn hình bằng các công cụ OCR?


27

Trong Ubuntu 12.10, nếu tôi gõ

gnome-screenshot -a | tesseract output

nó trở lại:

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

Làm cách nào tôi có thể chọn một văn bản từ màn hình và chuyển đổi nó thành văn bản (bảng tạm hoặc tài liệu)?

Cảm ơn bạn!


Bạn chỉ nhận được lỗi đó gnome-screenshot -a? Ngoài ra tại sao bạn đường ống đầu ra để tesseract? Nếu tôi không sai ảnh chụp màn hình gnome sẽ lưu ảnh trên một tệp và không "in" nó ...
Salem

Cảnh báo sẽ vô hại nếu tôi xem qua bugzilla. Câu hỏi: cái gì auto-save-directory? Và nó có làm rơi cái gì trong đó không? Liên kết thú vị: forums.debian.net/viewtopic.php?f=6&t=85683
Rinzwind

gnome-screenchot -a -c có nhiệm vụ sao chép lựa chọn vào clipboard, phải không?. nhưng đường ống dẫn đến tesseract cho cùng một lỗi. thư mục mặc định là home / hình ảnh (hoạt động tốt).
Erling

1
Chỉ cần thực hiện điều này bằng cách sử dụng ảnh chụp màn hình gnome - Sau đó tôi phải chỉnh sửa các tệp để giảm độ sâu màu từ 16m xuống 2 (đó là văn bản màu đen trên nền trắng, nhưng với phông chữ ưa thích ngày nay và vân vân, nó không thực sự đen ) Sau đó tôi phải chia tỷ lệ hình ảnh lên tới 200% so với bản gốc trước khi tôi nhận được OCR chính xác từ tesseract - nhưng nó hoạt động rất tốt khi tôi thực hiện điều đó.

@SteveLake Này Steve, cảm ơn vì lời đề nghị. Tôi đã chỉnh sửa tập lệnh để lập trình sửa đổi hình ảnh theo cách bạn đã mô tả trước khi OCRing nó. Tỷ lệ phát hiện bây giờ sẽ tốt hơn nhiều.
Glutimate

Câu trả lời:


35

Có thể đã có một số công cụ thực hiện điều đó, nhưng bạn cũng có thể tạo một tập lệnh đơn giản với một số công cụ chụp màn hình và tesseract, như bạn đang cố gắng sử dụng.

Lấy ví dụ về tập lệnh này (trong hệ thống của tôi, tôi đã lưu nó dưới dạng /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

Và với hỗ trợ 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

Nó sử dụng scrotđể lấy màn hình, tesseractnhận dạng văn bản và cathiển thị kết quả. Phiên bản clipboard sử dụng bổ sung xselđể dẫn đầu ra vào clipboard.

sử dụng mẫu

LƯU Ý : scrot, xsel, imagemagicktesseract-ocrkhông được cài đặt theo mặc định nhưng có sẵn từ các kho mặc định.

Bạn có thể thay thế scrotbằng gnome-screenshot, nhưng nó có thể mất rất nhiều công việc. Về đầu ra, bạn có thể sử dụng bất cứ thứ gì có thể đọc tệp văn bản (mở bằng Trình chỉnh sửa văn bản, hiển thị văn bản được nhận dạng dưới dạng thông báo, v.v.).


Phiên bản GUI của tập lệnh

Đây là phiên bản đồ họa đơn giản của tập lệnh OCR bao gồm hộp thoại chọn ngôn ngữ:

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

Ngoài các phụ thuộc được liệt kê ở trên, bạn sẽ cần cài đặt ZenAD fork YAD từ webupd8 PPA để làm cho tập lệnh hoạt động.


làm việc tuyệt vời trong thiết bị đầu cuối! cảm ơn bạn! Tôi muốn screencopy codetext từ hướng dẫn để thử nghiệm. Làm thế nào để sử dụng Scrot để clipboard?
Erling

1
Điều gì xảy ra với tempfiles?
Erling

1
Các tempfiles ở đó cho đến khi bạn khởi động lại máy tính của bạn. Nếu đó là một vấn đề với bạn, bạn chỉ có thể xóa chúng ở cuối ( rm $SCR_IMG.png $SCR_IMG.txt).
Salem

1
scrottự nó không thể sử dụng clipboard Nhưng có những công cụ như xcliphoặc xselcó thể làm những gì bạn cần nếu đó là sao chép / dán văn bản.
Salem

1
Thêm vào câu trả lời của Salem: Nếu bạn đang chạy KDE thì bạn có thể gọi một tập lệnh khác để tự động gửi văn bản bạn đã tạo vào bảng tạm, sẵn sàng để dán. Bạn sẽ tìm thấy một kịch bản phù hợp ở đây . Thực hiện theo các hướng dẫn trên trang đó để cài đặt tập lệnh đó. Sau đó, tất cả những gì bạn cần là thêm | clipboardvào cuối dòng cuối cùng của kịch bản Salem.
Chris

3

Không biết có ai cần giải pháp của tôi không. Đây là một trong những chạy với wayland.

Nó hiển thị nhận dạng ký tự trong Trình soạn thảo văn bản và nếu bạn thêm tham số "có", bạn đã nhận được bản dịch từ công cụ chuyển đổi goggle (kết nối Internet là bắt buộc) Trước khi bạn có thể sử dụng cài đặt hình ảnh tesseract-ocr và google-trans. Bắt đầu tập lệnh tức là trong gnome với Alt + F2 khi bạn thấy văn bản của mình mà bạn muốn nhận ra. Di chuyển các courser arround văn bản. Đó là nó. Kịch bản này đã được testetd chỉ dành cho gnome. Đối với người quản lý cửa sổ khác, nó sẽ phù hợp. Để dịch văn bản trong các ngôn ngữ khác thay thế ID ngôn ngữ trong dòng 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

1

Tôi vừa thực hiện một blog về cách sử dụng ảnh chụp màn hình trong thời hiện đại. Mặc dù tôi nhắm mục tiêu tiếng Trung Quốc, nhưng màn hình và mã bằng tiếng Anh. OCR chỉ là một trong những tính năng.

Tính năng cho OCR của tôi:

  • Mở trong konsole + vimx HOẶC gedit để chỉnh sửa thêm.

  • Đối với vimx + tiếng Anh, cho phép kiểm tra chính tả.

  • Hỗ trợ lựa chọn ngôn ngữ động mà không cần mã cứng.

  • Hộp thoại tiến trình khi chuyển đổi và tesseracting chậm.

Mã chức năng:

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

Mã người gọi:

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 &

Kết hợp 2 mã này trong tập lệnh shell duy nhất để chạy.

Ảnh chụp màn hình 1: nhập mô tả hình ảnh ở đây

Ảnh chụp màn hình 2: nhập mô tả hình ảnh ở đây


có vẻ như là một giải pháp tốt nhưng khả năng đọc kịch bản của bạn rất tệ
ukos

0

Ý tưởng là bất cứ lúc nào một tệp ảnh chụp màn hình mới xuất hiện trong thư mục chạy tesseract OCR trên đó và mở trong trình chỉnh sửa tệp.

Bạn có thể để tập lệnh đang chạy này trong thư mục đầu ra của thư mục đầu ra chụp màn hình yêu thích của bạn

#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

Bạn sẽ cần điều này để được kết tinh

sudo apt install tesseract-ocr
sudo apt install inotify-tools

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.