我在这个网站上发现了几个类似的问题,但无法完成这个过程。
来自如何使用 OCR 工具从屏幕区域即时提取文本?和如何在部分屏幕截图中使用 OCR 获取文本?
首先我安装了依赖项
sudo apt-get install tesseract-ocr
sudo apt-get install imagemagick
sudo apt-get install scrot
sudo apt-get install xsel
然后我把下面的脚本放进去/home/blueray/Documents/Translate/screen_ts.sh
#!/bin/bash
# Dependencies: tesseract-ocr imagemagick scrot xsel
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
请注意我删除了
select tesseract_lang in eng rus equ ;do break;done
# Quick language menu, add more if you need other languages.
希望它只考虑英语。如果不是这种情况,请告诉我。
现在当我把
bash /home/blueray/Documents/Translate/screen_ts.sh
它按照我想要的方式工作。
在 Windows 中,使用 Capture2Text,我曾经使用Win+Q将屏幕的一部分捕获为文本。因此,我检查了如何设置自定义键盘快捷键来控制音量?
我去了Menu-> Searched for Keyboard Shortcuts -> Click
- 然后我点击了
Add
- 名称:Capture2Text
- 命令:
bash /home/blueray/Documents/Translate/screen_ts.sh
- 点击
Apply
- 点击右侧的快捷方式。
- 按下 WinQ
现在当我按下 时WinQ,什么也没有发生。我究竟做错了什么?
答案1
您不需要“scrot”。Imagemagick(提供“mogrify”)可以完成屏幕截图的工作。您也不需要保存中间图像,因为“tesseract”可以接受标准输入中的图像。
因此,上述内容简化为......
convert x: -modulate 100,0 -resize 400% -set density 300 png:- |
tesseract stdin stdout | xsel -bi
但是我还在我的脚本版本中添加了以下内容,以便在屏幕上弹出文本,以便您检查。
xsel -po | xless - &
当然,tesseract 可以对某些字体进行一些改进!例如,某些字体中的“f”有一个小钩子,这会让 tesseract 认为它们是“P”!啊……
编辑:我使用的完整脚本位于...
https://antofthy.gitlab.io/software/#capture_ocr
我使用窗口管理器(openbox)将其链接到“热键”(Meta-Print),以便可以随时使用它。
如果您不能使用热键,并且需要揭开屏幕包含文本的部分,您可以随时延迟启动它......
睡眠5;capture_ocr
享受
答案2
我必须修改@anthony 的脚本以便它能在我的机器上运行(Kubuntu 18.04):
我没有使用下面这一行,而是convert
使用了:
import -resize 300% +dither png:- |
另外,我删除了-
最后一行末尾的减号,因此:
xsel -ob | $XPAGER
工作很棒。