當前位置: 首頁>>技術教程>>正文


如何使用 OCR 工具從屏幕區域即時提取文本?

, , ,

問題描述

在 Ubuntu 12.10 中,如果我輸入

gnome-screenshot -a | tesseract output

它返回:

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

如何從屏幕中選擇文本並將其轉換為文本(剪貼板或文檔)?

謝謝!

最佳思路

也許已經有一些工具可以做到這一點,但您也可以使用一些屏幕截圖工具和 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 將輸出通過管道傳輸到剪貼板。

注意:默認情況下不安裝 scrotxselimagemagicktesseract-ocr,但可以從默認存儲庫中獲得。

您也許可以用 gnome-screenshot 替換 scrot ,但這可能需要做很多工作。關於輸出,您可以使用任何可以讀取文本文件的內容(使用文本編輯器打開,將識別的文本顯示為通知等)。


腳本的 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
xsel -bi < "$SCR_IMG".txt # pass to clipboard
exit

除了上麵列出的依賴項之外,您還需要安裝 Zenity fork YAD from the webupd8 PPA 才能使腳本正常工作。

次佳思路

為此,我創建了一個免費的開源程序:

https://danpla.github.io/dpscreenocr/

第三種思路

不知道有沒有人需要我的解決方案。這是一個與wayland一起運行的。

它在 Text-Editor 中顯示 character-recognition,如果您添加參數 “yes”,您會從 goggle trans 工具獲得翻譯(必須連接互聯網)在您可以使用之前安裝 tesseract-ocr imagemagick 和 google-trans。當您看到要識別的文本時,使用 Alt+F2 啟動腳本,即在 gnome 中。圍繞文本移動課程。而已。該腳本僅針對 gnome 進行了測試。對於其他窗口管理器,它必須適應。要將文本翻譯成其他語言,請替換第 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

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/12593.html,未經允許,請勿轉載。