如何使用命令提示符在同一文件夹中对多个文件进行Tesseract OCR处理?

12

我知道如何在 OS X 终端中使用 Tesseract 处理同一目录中的多个文件。

for i in *.tif ; do tesseract $i outtext;  done;

有人有关于如何在运行Windows的计算机上通过命令提示符完成这个任务的建议吗?


1
给来到这里的人一个提示-- 这段代码将尝试将所有输出转储到同一个文件并覆盖它。(Joe W在下面的答案中也指出了这一点)。你可能更喜欢这样做:for i in *.tif; do tesseract $i "txtfolder/$i"; done; 这将把所有输出文件放在一个名为txtfolder的文件夹中。 - R.S.
如果你想要所有的输出都在一个文本文件中,可以使用以下命令:for i in *.tif ; do tesseract $i - >> output.txt; done - Paul Chris Jones
4个回答

6

Windows中与Unix的for i命令等效的是什么?

如果不知道Unix上tesseract命令与Windows的差异,很难给出全面的答案。

在Windows中,您可以使用for命令对多个文件执行命令。

从命令行开始:

for %i in (*.tif) do tesseract %i outtext

在批处理文件中:
for %%i in (*.tif) do tesseract %%i outtext

更多阅读


5
在上面的例子中:
for %%i in (*.tif) do tesseract %%i outtext

Tesseract会在每次迭代中覆盖同一个输出文件outtext.txt。你最终会得到一个单一的文件(outtext.txt),其中只包含最后一张图片的文本。你需要给每个输出文件取唯一的名称。你可以像下面显示的那样用%%i替换字符串outtext

for %%i in (*.tif) do tesseract %%i %%i

然而,如果你想要不同的输出文件名,你可以使用 set 命令指定一个额外的变量。然后在每次迭代中递增这个变量。

set /a j=1
for %%i in (*.tif) do (
tesseract %%i output_file%j%
set /a j+=1
)

然而,对于每次迭代,%j% 会被扩展为 '1'。最终你只会得到一个名为 outputfile1.txt 的文件。在循环开始时,%j% 只会被扩展一次,随后的每次迭代都会使用相同的值。使用 setlocal enabledelayedexpansion 命令并将 %j% 替换为 !j! 将强制 Windows 对于每次迭代都扩展 !j!。为了恢复之前的环境设置,应该发出匹配的 endlocal 命令。

setlocal enabledelayedexpansion
set /a j=1
for %%i in (*.tif) do (
tesseract %%i output_file!j!
set /a j+=1
)
endlocal

我在Microsoft Windows 7 Home Premium版上成功测试了此功能。希望它能对你有所帮助。


当我执行第一个和第二个示例时,我会收到一个错误“语法错误,意外的标记`()'”。这是什么? - LearnToGrow

3
for %i in (*.tif) do (tesseract %i stdout 1>> out.txt)

将查找所有的tif文件并将stdout管道输出到目标out.txt。

2
dir "folder_path\*.tif" /s /b > "folder_path\input.txt"
"tesseract_path\tesseract" "folder_path\input.txt" "folder_path\output"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接