ओसीआर टूल्स का उपयोग करके स्क्रीन क्षेत्र से पाठ को तुरंत कैसे निकाला जा सकता है?


27

Ubuntu 12.10 में, अगर मैं टाइप करता हूं

gnome-screenshot -a | tesseract output

यह रिटर्न:

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

मैं स्क्रीन से एक पाठ का चयन कैसे कर सकता हूं और इसे पाठ (क्लिपबोर्ड या दस्तावेज़) में बदल सकता हूं?

धन्यवाद!


आप केवल उस त्रुटि का उपयोग कर रहे हैं gnome-screenshot -a? इसके अलावा, आप आउटपुट को टेस्सेरैक्ट करने के लिए पाइप क्यों करते हैं? अगर मैं गलत नहीं हूँ gnome- स्क्रीनशॉट एक फ़ाइल पर चित्र सहेजता है, और इसे "प्रिंट" नहीं करता है ...
सलेम

अगर मैं बग्जिला के माध्यम से देखता हूं तो चेतावनी हानिरहित होनी चाहिए। प्रश्न: क्या है auto-save-directory? और क्या इसमें कुछ भी गिरा था? दिलचस्प लिंक: forum.debian.net/viewtopic.php?f=6&t=85683
Rinzwind

gnome-screenchot -a -c को क्लिपबोर्ड में चयन की प्रतिलिपि बनाना है, यह नहीं है। लेकिन टेसरैक्ट को पाइप करना एक ही त्रुटि देता है। डिफ़ॉल्ट निर्देशिका घर / चित्र (अच्छी तरह से काम करता है) है।
एर्लिंग

1
बस इसे गनोम-स्क्रीनशॉट का उपयोग करके किया - मुझे तब 16 एम से 2 तक रंग की गहराई को कम करने के लिए फ़ाइलों को संपादित करना था (यह सफेद पृष्ठभूमि पर काला पाठ था, लेकिन आज के फैंसी फॉन्ट चौरसाई और इतने पर, यह वास्तव में काला नहीं था ) तब मुझे मूल के 200% तक की छवि को स्केल करना पड़ा था इससे पहले कि मैं एक सटीक ओसीआर को टेसेक्टेक्ट से प्राप्त करता हूं - लेकिन यह वास्तव में अच्छी तरह से काम करता है एक बार मैंने ऐसा किया है।

@SteveLake हे स्टीव, सुझाव के लिए धन्यवाद। मैंने स्क्रिप्ट को उस तरीके से संपादित करने के लिए संपादित किया जिस तरह से आपने ओसीआर करने से पहले वर्णन किया था। डिटेक्शन रेट अब बहुत बेहतर होना चाहिए।
ग्लूटेनेमैट

जवाबों:


35

हो सकता है कि पहले से ही कुछ उपकरण है जो ऐसा करता है, लेकिन आप कुछ स्क्रीनशॉट टूल और टेसरेक्ट के साथ एक सरल स्क्रिप्ट भी बना सकते हैं, जैसा कि आप उपयोग करने की कोशिश कर रहे हैं।

एक उदाहरण के रूप में इस स्क्रिप्ट को लें (अपने सिस्टम में मैंने इसे इस रूप में सहेजा है /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

और क्लिपबोर्ड समर्थन के साथ:

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

यह scrotस्क्रीन को लेने, tesseractपाठ को पहचानने और catपरिणाम प्रदर्शित करने के लिए उपयोग करता है । क्लिपबोर्ड संस्करण अतिरिक्त रूप xselसे क्लिपबोर्ड में आउटपुट को पाइप करने के लिए उपयोग करता है।

नमूना उपयोग

नोट : scrot, xsel, imagemagickऔर tesseract-ocrडिफ़ॉल्ट रूप से स्थापित नहीं कर रहे हैं लेकिन डिफ़ॉल्ट खजाने से उपलब्ध हैं।

आप के scrotसाथ बदलने में सक्षम हो सकता है gnome-screenshot, लेकिन यह बहुत काम ले सकता है। आउटपुट के बारे में आप ऐसी किसी भी चीज़ का उपयोग कर सकते हैं जो एक टेक्स्ट फ़ाइल पढ़ सकती है (टेक्स्ट एडिटर के साथ खुला है, किसी मान्यता प्राप्त पाठ को नोटिफिकेशन आदि के रूप में दिखाएं)।


स्क्रिप्ट का GUI संस्करण

यहाँ भाषा चयन संवाद सहित OCR स्क्रिप्ट का एक सरल चित्रमय संस्करण है:

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

ऊपर सूचीबद्ध निर्भरता के अलावा, आपको स्क्रिप्ट कार्य करने के लिए webupd8 PPA से Zenity कांटा YAD स्थापित करना होगा।


टर्मिनल में greate काम करता है! धन्यवाद! मैं टेस्टिंग के लिए ट्यूटोरियल से कोडेनेक्स्ट स्क्रू करना चाहता हूं। क्लिपबोर्ड में स्क्रोट का उपयोग कैसे करें?
अर्लिंग

1
क्या होता है टेम्पोफाइल्स के साथ?
एर्लिंग

1
जब तक आप अपने कंप्यूटर को रिबूट नहीं करते तब तक टेंपरेचर वहीं रहता है। यदि वह आपके लिए एक समस्या है, तो आप उन्हें अंत में हटा सकते हैं ( rm $SCR_IMG.png $SCR_IMG.txt)।
सलेम

1
scrotअपने आप में क्लिपबोर्ड का उपयोग नहीं कर सकते। लेकिन ऐसे उपकरण हैं xclipया xselजो पाठ को कॉपी / पेस्ट करने के लिए आपकी आवश्यकता के अनुसार कर सकते हैं।
सलेम

1
सलेम के उत्तर में जोड़ना: यदि आप केडीई चला रहे हैं तो आप क्लिपबोर्ड पर उत्पन्न पाठ को स्वचालित रूप से भेजने के लिए एक और स्क्रिप्ट को कॉल कर सकते हैं, पेस्ट करने के लिए तैयार है। आपको यहां एक उपयुक्त स्क्रिप्ट मिलेगी । उस स्क्रिप्ट को स्थापित करने के लिए उस पृष्ठ पर दिए गए निर्देशों का पालन करें। फिर आपको | clipboardसलेम की स्क्रिप्ट की अंतिम पंक्ति के अंत में जोड़ना होगा।
क्रिस

3

अगर किसी को भी मेरे समाधान की जरूरत नहीं है। यहाँ एक है जो रास्ता के साथ चलता है।

यह टेक्स्ट-एडिटर में कैरेक्टर-रिकग्निशन को दिखाता है और यदि आप पैरामटर "हाँ" जोड़ते हैं तो आपको ट्रांसल टूल (इंटरनेट कनेक्शन अनिवार्य है) से ट्रांसलेशन मिल जाता है। इससे पहले कि आप इसे उपयोग कर सकते हैं tesseract-ocr imagemagick और google-trans इंस्टॉल करें। स्क्रिप्ट शुरू करें अर्थात Alt + F2 के साथ सूक्ति जब आप अपने पाठ को देखते हैं जिसे आप पहचानना चाहते हैं। पाठ के चारों ओर आंगन को स्थानांतरित करें। बस। यह लिपि केवल सूक्ति के लिए गवाही थी। अन्य खिड़की प्रबंधक के लिए यह समायोजित किया जाना चाहिए। अन्य भाषाओं में पाठ का अनुवाद करने के लिए भाषा आईडी को पंक्ति 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

मैंने अभी एक ब्लॉगिंग किया है कि कैसे आधुनिक दिन में स्क्रीनशॉट का उपयोग किया जाए । भले ही मैं चीनी को लक्षित करता हूं लेकिन स्क्रीन कास्ट और कोड अंग्रेजी में है। 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: यहाँ छवि विवरण दर्ज करें

स्क्रीनशॉट 2: यहाँ छवि विवरण दर्ज करें


एक सभ्य समाधान की तरह लगता है लेकिन आपकी स्क्रिप्ट की पठनीयता बहुत खराब है
ukos

0

यह विचार कभी भी एक नया स्क्रीनशॉट फाइल है, उस पर फ़ोल्डर रन टेसरैक्ट ओसीआर दिखाई देता है और एक फाइल एडिटर में खुलता है।

आप इस रनिंग स्क्रिप्ट को अपनी पसंदीदा स्क्रीन शॉट आउटपुट डायरेक्टरी के आउटपुट डायरेक्टरी में छोड़ सकते हैं

#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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.