Closed peter8777555 closed 5 months ago
Umi-OCR.exe
,会打印什么信息?在 Umi-OCR 目录下,右键→在终端中打开,输入./Umi-OCR.exe
。
请检查一下,在命令行中运行exe,或者通过RUN_CLI.bat
启动时:控制台打印的信息,跟上述issue中的记录是否有相似之处?是否都有类似 WinError 31
的报错?
将 Umi-OCR/main.py
备份一下,然后用记事本打开它,删除全部代码,替换为下述文本:
import ctypes
msg = "Hello Umi!"
ctypes.windll.user32.MessageBoxW(None, str(msg), str(msg), 0)
保存,尝试运行 Umi-OCR.exe
。正常情况下应该显示一个系统弹窗。
- 请尝试一下:在命令行里运行 Umi-OCR.exe ,会打印什么信息?
在 命令行 運行 都正常, 但在 Explorer.exe 中 雙擊 運行, 則 TaskMgr.exe 會看到運行 1 秒 就不見了.
但奇怪的是
- 一个小实验 将 Umi-OCR/main.py 备份一下,然后用记事本打开它,删除全部代码,替换为下述文本:
import ctypes msg = "Hello Umi!" ctypes.windll.user32.MessageBoxW(None, str(msg), str(msg), 0)
在 Explorer.exe 中 雙擊 運行正常,會顯示一個系統彈窗.
我猜會不會是 main.py 有某處程序碼不兼容 Windows 11.
另外: 測試 Paddle 及 Rapid 版, Paddle 版 最沒有問題, 本來是使用 Rapid 版, 改用 Paddle 版.
Rapid 有以下問題:
當 第 1 次 截圖 並 OCR 後 正常識別, 但原 CMD Console 窗口, 會莫明的 變賊小, 文字 小到 螞蟻 看不清.
第 2 次 截圖 並 OCR 會 死循環 一直無法識別,只能點擊 停止任務
感谢测试,信息很有帮助。我推测有可能是您的 繁中Windows系统 对管道编码存在一定影响。
请将 main.py 的内容替换为下列代码。执行 Umi-OCR.exe 时,如果出现错误,应该会出现一个 Error XXXXX
的系统弹窗,并生成一个日志文件 log.txt
在同级目录下。请将 log.txt
的内容放上来我看看。
啊,非常抱歉有行语句忘了删。请将上述代码中的
raise Exception("12543124524")
这一行删掉,再测试。
OK,这样就确认了,确实是繁中系统的编码问题。
我后续会搭一个繁中系统环境来测试修改。请你先用着命令行启动方式或者1.3.7的旧版。
我有個疑問:
同樣的 EXE, 為啥在 命令行 能運行, 在 Explorer.exe 中 雙擊 不能運行, 這不符合邏輯 ?
PS 1: 試了 V1.3.7 果然 命令行 及 在 Explorer.exe 中 雙擊 都能運行.
PS 2: 建議 將 README_CLI.md README_HTTP.md 放在 Umi-OCR.exe 同目錄 方便查看
另外, 我測試 命列行 參數 報錯
在 命令行 能運行, 在 Explorer.exe 中 雙擊 不能運行
代码中有一些 print 语句用于打印信息。在命令行中运行时,输出到 "CONOUT$"
。双击运行时,由于不存在命令行窗口,所以输出到 os.devnull
。我估计是这里存在区别,导致了问题。
我大概已经查明,问题出在这行代码:
print(f"翻译加载完毕。{self.langCode} - {text}")
简体的译
跟繁体的譯
不同。繁中系统的某个系统组件可能无法解码译
,导致运行到这行代码时报错。
当然,”这行代码报错“只是表面现象,光是删掉它并不能解决问题。治本的方法是搞定文本编码兼容性。还在研究。
命令行 參數 報錯
在命令行中传入参数时,程序会在后台拉起一个新的进程,等价于在 Explorer 中双击启动软件。所以无法运行。
感謝說明.
你慢慢研究, 先用 命令行 能用就好.
另外, Umi-OCR.exe --path "D:\xxx.png"`
建議 加個 Umi-OCR.exe --FileList "D:\FileList.txt"`
D:\FileList.txt 內容 D:\Test\Test1.jpg D:\Test\Test2.jpg D:\Test\Test3.jpg D:\Test\Test4.jpg D:\Test\Test5.jpg
這樣能 1 次轉 N 個
我找到了解决方法,在虚拟机繁体系统上验证通过。请你测试一下。
在 main.py 的中间有一段这样的代码:
# 尝试获取控制台的输出对象
try:
fd = os.open("CONOUT$", os.O_RDWR | os.O_BINARY)
fp = os.fdopen(fd, "w")
except Exception as e:
fp = open(os.devnull, "w")
在两个 "w" 的后面加上【 , encoding="utf-8"
】,也就是改成这样:
# 尝试获取控制台的输出对象
try:
fd = os.open("CONOUT$", os.O_RDWR | os.O_BINARY)
fp = os.fdopen(fd, "w", encoding="utf-8")
except Exception as e:
fp = open(os.devnull, "w", encoding="utf-8")
完成这个改动后,可在 Explorer 中正常双击运行。
試了 encoding="utf-8" 果然問題都解決.
PS: 建議: 命令行 是否不要顯示 UI 窗口, 看起來有點怪.
PS: Umi-OCR.exe --path "F:\Test\2\a4\z1.png" 是否能直接建立 F:\Test\2\a4\z1.txt 這樣比較直覺.
PS: 建議 加個 Umi-OCR.exe --FileList "D:\FileList.txt"`
D:\FileList.txt 內容 D:\Test\Test1.jpg D:\Test\Test2.jpg D:\Test\Test3.jpg D:\Test\Test4.jpg D:\Test\Test5.jpg
這樣能 1 次轉 N 個
最後自動建立 D:\Test\Test1.txt D:\Test\Test2.txt D:\Test\Test3.txt D:\Test\Test4.txt D:\Test\Test5.txt
1 次轉 N 個
答:新版本 --path
指令已支持传入多个图片路径,1次转N张图片。不过只能混合输出所有结果,暂不支持 Test1.txt
Test2.txt
分开不同文件输出。
命令行 是否不要顯示 UI 窗口
答:可在截图OCR标签页设置中 关闭“弹出主窗口”。
是否能直接建立 F:\Test\2\a4\z1.txt 這樣比較直覺
答:Umi-OCR 无参数
指令本身已有功能(弹出主窗口),故OCR指令必须使用 --path
。
OS: Windows 11 23H2 22631.2715 繁體中文
1. Umi-OCR_Rapid_v2.0.1
Umi-OCR.exe 無任何反應 RUN_CLI.bat 一切正常 RUN_GUI.bat 無任何反應
Umi-OCR_Paddle_v2.0.1
Umi-OCR.exe 無任何反應 RUN_CLI.bat 一切正常 RUN_GUI.bat 無任何反應
2. RUN_CLI.bat 當 第 1 次 截圖 並 OCR 後 正常識別, 第 2 次 重新截圖 都是 第 1 次 的狀態,無法開始 新的 截圖識別.