OCR 도구를 사용하여 어떻게 화면 영역에서 텍스트를 즉시 추출 할 수 있습니까?


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합니까? 또한 왜 출력을 tesseract로 파이프합니까? 내가 gnome-screenshot이 틀린 그림을 파일에 저장하고 "인쇄"하지 않으면 ...
Salem

bugzilla를 살펴보면 경고가 무해해야합니다. 질문 : 무엇 auto-save-directory입니까? 그리고 거기에 물건을 떨어 뜨렸습니까? 흥미로운 링크 : forums.debian.net/viewtopic.php?f=6&t=85683
Rinzwind

gnome-screenchot -a -c는 선택 영역을 클립 보드에 복사해야합니까? 그러나 그것을 tesseract로 파이핑하면 동일한 오류가 발생합니다. 기본 디렉토리는 home / pictures입니다 (잘 작동합니다).
Erling

1
방금 gnome-screenshot을 사용 하여이 작업을 수행했습니다. 그런 다음 파일을 편집하여 색상 깊이를 16m에서 2로 줄였습니다 (흰색 배경에 검은 색 텍스트 였지만 오늘날의 멋진 글꼴 다듬기 등은 실제로 검은 색 이 아닙니다) ) 그런 다음 tesseract에서 정확한 OCR을 받기 전에 원본의 최대 200 %까지 이미지의 크기를 조정해야했습니다.

@SteveLake Hey Steve, 제안 해 주셔서 감사합니다. 스크립트를 편집하여 이미지를 OCR하기 전에 설명한 방식으로 이미지를 프로그래밍 방식으로 수정했습니다. 감지 속도가 훨씬 좋아졌습니다.
Glutanimate

답변:


35

어쩌면 이미 그렇게하는 도구가있을 수도 있지만 사용하려고 할 때 스크린 샷 도구와 tesseract를 사용하여 간단한 스크립트를 만들 수도 있습니다.

이 스크립트를 예로 들어 (내 시스템에서으로 저장했습니다 /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, imagemagicktesseract-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 fork YAD 를 설치해야합니다 .


터미널에서 그레이트를 작동합니다! 고맙습니다! 테스트를 위해 튜토리얼의 코드 텍스트를 화면 복사하고 싶습니다. scrot을 클립 보드에 사용하는 방법?
Erling

1
임시 파일은 어떻게됩니까?
Erling

1
임시 파일은 컴퓨터를 재부팅 할 때까지 그대로 유지됩니다. 그것이 당신에게 문제가 있다면, 당신은 마지막에 그것들을 삭제할 수 있습니다 ( rm $SCR_IMG.png $SCR_IMG.txt).
Salem

1
scrot그 자체로는 클립 보드를 사용할 수 없습니다. 그러나이 같은 도구는 xclip또는 xsel그 당신이 그것을 복사하는 경우 / 텍스트를 붙여 무엇을해야 할 수 있습니다.
Salem

1
Salem의 답변에 추가 : KDE를 실행하는 경우 다른 스크립트를 호출하여 생성 한 텍스트를 클립 보드에 자동으로 보내 붙여 넣을 수 있습니다. 여기에 적합한 스크립트가 있습니다 . 해당 페이지의 지시 사항에 따라 해당 스크립트를 설치하십시오. 그런 다음 | clipboardSalem 스크립트의 마지막 줄 끝에 추가 하면됩니다.
Chris

3

내 솔루션이 필요한 사람이 있는지 모르겠습니다. 여기는 웨이 랜드와 함께 실행되는 것입니다.

텍스트 편집기에서 문자 인식을 표시하고 매개 변수 "yes"를 추가하면 고글 변환 도구에서 번역본을 가져 왔습니다 (인터넷 연결은 필수). 사용하기 전에 tesseract-ocr imagemagick 및 google-trans를 설치하십시오. 인식하려는 텍스트가 표시되면 Alt + F2로 스크립트를 시작하십시오 (예 : Alt + F2). 텍스트 주위의 코스를 움직입니다. 그게 다야. 이 스크립트는 그놈만을 위해 테스트되었습니다. 다른 창 관리자의 경우 수용해야합니다. 다른 언어로 텍스트를 번역하려면 25 행의 언어 ID를 바꾸십시오.

#!/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은 기능 중 하나 일뿐입니다.

내 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

아이디어는 새로운 스크린 샷 파일이 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

당신은 이것을 istalled해야합니다

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.