hiroi-sora / Umi-OCR

OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。
MIT License
25.59k stars 2.59k forks source link

UMI-OCR cli 命令行输出结果如何进行重定向 #257

Closed yisuixinq closed 7 months ago

yisuixinq commented 9 months ago

我使用powershell运行 UMI-OCR 命令行,但尝试多种方法都没法把结果重定向到文件里面去

hiroi-sora commented 9 months ago

抱歉,当前由于运行环境的一些限制(输出流受限),暂时不支持重定向。

下次更新会添加一个命令行参数,可以指定路径,将结果输出到指定文件。

yisuixinq commented 9 months ago

了解,我希望能添加一个附加到文件的功能,批处理时不希望为每张图片生成一个单独的文件

hiroi-sora commented 9 months ago

刚刚发布的2.0.1版已支持输出到指定文件。

yisuixinq commented 9 months ago

已试用,发现新的问题。

umi-ocr 命令行模式,回车后当前命令就算执行完了,后续才打印输出;使用PowerShell脚本,会出现执行顺序错乱的问题,也就是整个脚本执行完成了,umi-oc识别可能才进行到一半,目前只能通过脚本上增加delay解决

另外命令行模式考虑增加一个folder的选项吗?

hiroi-sora commented 9 months ago

你是不是指:

假设命令行发出指令后,过了5秒就输出了结果(为空)。但是此时实际上OCR还未结束,到10秒时OCR才完成。

我这边测试是无法复现类似问题的,调度顺序一切正常。

如果可以的话,你可否详细描述一下操作流程和输入/输出内容?或者上传一段录屏?咱再分析分析。

另,“folder选项”是指什么?

yisuixinq commented 9 months ago

umi-ocr

回车之后,umi-ocr命令就相当于已经完成了,此时PowerShell是可以执行其他命令的,但是过上四五秒才有umi-ocr的输出,在批处理时我用echo命令在文件之间插入一些分隔符,这种情况会导致分隔符位置不准确,目前只能在脚本中加delay,手动等待umi-ocr命令执行完成,就是delay的时间不好把握,一般往多了加

“folder选项”类似ui下的批处理,传入文件夹路径,直接处理整个文件夹

hiroi-sora commented 9 months ago

OK明白了。

调用 Umi-OCR.exe 时,其实是运行一个C++启动器进程,然后在内部加载和启动python进程。可能由于这两个进程之间的层级关系,导致python进程未结束时,命令行就判定指令已返回。

所以,你可以绕过exe启动器,手工启动python进程:

  1. 将命令行移动到 UmiOCR-data 目录中。
  2. 使用下述指令:
    runtime/python.exe main.py --参数

    比如:

    cd D:/MyApp/Umi-OCR/UmiOCR-data
    runtime/python.exe main.py --path "D:/test.png"

这样做,可以保证python进程结束(已经输出了OCR结果)后,命令行指令才返回。

以后我会再研究下exe启动器,看看如何实现正确的返回时机。

hiroi-sora commented 9 months ago

然后关于 --folder 选项。命令行一次性传入多张图片或文件夹是很容易实现的,问题是命令行只能返回一次。这就存在问题:

  1. 调用方要等待所有图片识别完,才能拿到结果。
  2. 所有结果混在一起,无法区分不同图片的结果。

所以,与其让Umi同时返回多个结果,不如调用方程序内自己收集路径,一条条调用Umi来获取单独的结果。