如何使用 OCR 工具从屏幕区域即时提取文本?

如何使用 OCR 工具从屏幕区域即时提取文本?

在 Ubuntu 12.10 中,如果我输入

gnome-screenshot -a | tesseract output

它返回:

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

如何从屏幕上选择文本并将其转换为文本(剪贴板或文档)?

谢谢你!

答案1

也许已经存在一些可以做到这一点的工具,但是您也可以使用一些屏幕截图工具和 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、、和默认情况下未安装,但可从默认存储库中获取xselimagemagicktesseract-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
xsel -bi < "$SCR_IMG".txt # pass to clipboard
exit

除了上面列出的依赖项之外,你还需要安装Zenity 从 webupd8 PPA 中分叉 YAD使脚本正常运行。

答案2

为此,我创建了一个免费的开源程序:

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

截屏

答案3

不知道是否有人需要我的解决方案。这是一个使用 wayland 运行的解决方案。

它在文本编辑器中显示字符识别,如果您添加参数“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

答案4

这个单行脚本(基于https://askubuntu.com/a/1084151/456438) 要与键盘快捷键一起使用,这样您无需打开终端即可在屏幕上的任何位置进行 OCR,如下图所示。

使用示例

#!/bin/bash
# Dependencies: convert imagemagick xsel tesseract-ocr-fra [tesseract-ocr-jpn ...]  

convert x: -modulate 100,0 -resize 400% -set density 300 png:- |
  tesseract stdin stdout -l fra+eng+jpn --psm 3 | 
  sed 's/'$(printf '%b' '\014')'//g;s/|/I/g' | 
  xsel -bi

根据需要更改--psm和选项。示例:-l

  • --psm 10适用于包含单个字符的图像
  • --psm 3是默认的。
  • -l fra+eng+jpn首先会考虑法语,然后是英语,然后是日语。

使 sed 后处理适应您的需要。例如,sed 's/'$(printf '%b' '\014')'//g;s/|/I/g'删除换页符(八进制 014)并用“I”替换竖线“|”。

使用标准说明https://help.ubuntu.com/stable/ubuntu-help/keyboard-shortcuts-set.html.en创建将执行脚本的键盘快捷键。将脚本放在 ~/bin 或路径环境变量中的任何位置,以避免使用脚本的完整路径。

相关内容