当 Python 脚本在没有控制台的情况下转换为 exe 时,Tesseract OCR 不起作用
Tesseract OCR doesn't work when Python script is converted to exe without console
我有一个 ML 解决方案。我在此解决方案中使用 Pytesseract。我需要从中创建一个可执行文件。所以我使用了pyinstaller。为了创建一个可以调用另一个 exe 的可执行文件,tesseract exe,我遵循了 。当我使用控制台创建 exe 时,Tesseract exe 在我的 exe 中被调用并给我输出,但是如果我创建没有控制台的 exe,Tesseract 将不起作用。我找不到任何解决方案。我该如何解决这个问题?
这是我的 .spec 文件:
# -*- mode: python ; coding: utf-8 -*-
import sys
sys.setrecursionlimit(5000)
block_cipher = None
a = Analysis(['Cam_Choice.py'],
pathex=['D:\Project\XXX'],
binaries=[('config\tesseract\tesseract.exe', 'config\tesseract')],
datas=[],
hiddenimports=['boto3'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
a.datas += [('logo.ico', 'D:\Project\img\logo.ico', "DATA")]
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='XXX',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
icon='D:\Project\img\logo.ico')
P.S: 由于非控制台模式,我无法调试 exe。
解决方法如下:
@run_once
def get_tesseract_version():
"""
Returns LooseVersion object of the Tesseract version
"""
try:
return LooseVersion(
subprocess.check_output(
[tesseract_cmd, '--version'],
stderr=subprocess.STDOUT,
env=environ,
stdin=subprocess.DEVNULL,
)
.decode('utf-8')
.split()[1]
.lstrip(string.printable[10:]),
)
except OSError:
raise TesseractNotFoundError()
向 Python\Python36\Lib\site-packages\pytesseract\pytesseract.py.
添加了 stdin=subprocess.DEVNULL,
行
我有一个 ML 解决方案。我在此解决方案中使用 Pytesseract。我需要从中创建一个可执行文件。所以我使用了pyinstaller。为了创建一个可以调用另一个 exe 的可执行文件,tesseract exe,我遵循了 。当我使用控制台创建 exe 时,Tesseract exe 在我的 exe 中被调用并给我输出,但是如果我创建没有控制台的 exe,Tesseract 将不起作用。我找不到任何解决方案。我该如何解决这个问题?
这是我的 .spec 文件:
# -*- mode: python ; coding: utf-8 -*-
import sys
sys.setrecursionlimit(5000)
block_cipher = None
a = Analysis(['Cam_Choice.py'],
pathex=['D:\Project\XXX'],
binaries=[('config\tesseract\tesseract.exe', 'config\tesseract')],
datas=[],
hiddenimports=['boto3'],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
a.datas += [('logo.ico', 'D:\Project\img\logo.ico', "DATA")]
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='XXX',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
icon='D:\Project\img\logo.ico')
P.S: 由于非控制台模式,我无法调试 exe。
解决方法如下:
@run_once
def get_tesseract_version():
"""
Returns LooseVersion object of the Tesseract version
"""
try:
return LooseVersion(
subprocess.check_output(
[tesseract_cmd, '--version'],
stderr=subprocess.STDOUT,
env=environ,
stdin=subprocess.DEVNULL,
)
.decode('utf-8')
.split()[1]
.lstrip(string.printable[10:]),
)
except OSError:
raise TesseractNotFoundError()
向 Python\Python36\Lib\site-packages\pytesseract\pytesseract.py.
添加了stdin=subprocess.DEVNULL,
行