Python Pyinstaller和Tesseract OCR

Python Pyinstaller和Tesseract OCR,python,ocr,pyinstaller,tesseract,python-tesseract,Python,Ocr,Pyinstaller,Tesseract,Python Tesseract,我正在为我的程序使用Tesseract OCR,我将使用pyinstaller将其转换为单个.exe文件。问题是,为了使Tesseract工作,我需要引用安装在计算机上的程序的路径,如下所示:pytesseract.pytesseract.Tesseract\u cmd='E:\\Tesseract OCR\\Tesseract' 因为这不仅仅是一个可以导入的独立库,而是一个独立的程序,所以我不能将它作为'--add_data'参数传递给pyinstaller。那么如何使一个文件可执行?假设您在

我正在为我的程序使用Tesseract OCR,我将使用pyinstaller将其转换为单个.exe文件。问题是,为了使Tesseract工作,我需要引用安装在计算机上的程序的路径,如下所示:
pytesseract.pytesseract.Tesseract\u cmd='E:\\Tesseract OCR\\Tesseract'


因为这不仅仅是一个可以导入的独立库,而是一个独立的程序,所以我不能将它作为'--add_data'参数传递给pyinstaller。那么如何使一个文件可执行?

假设您在Windows上,我遇到了这个问题,并认为我通过编译tesseract的静态版本(无需安装)并将其路径作为二进制文件包含在pyinstaller spec文件中解决了这个问题

官方编译说明如下:

安装MS Visual Studio 15(使用c++)和vcpkg,并通过命令提示符执行以下操作之一:

对于64位: vcpkg安装tesseract:x64 windows静态

对于32位: vcpkg安装tesseract:x86 windows静态

tesseract可执行文件将位于您电脑上vcpkg文件夹中的几个子文件夹中。使用该文件,您还需要下载一个.trainedData文件,并将其放置在与tesseract可执行文件位于同一目录中名为“TesserData”的文件夹中

创建pyinstaller规范文件并编辑分析(binaries=[])部分,以包括tesseract所在的文件夹路径(如果您没有为tesseract使用子文件夹,我认为您需要同时添加tesseract.exe和TesserData子文件夹)。我还更改了inclide_binaries=True

运行pyinstaller并包含选项--specpath'yourspecfile.spec'


我还没有尝试在不同的PC上尝试,所以还没有完全测试它是按预期的方式工作的(我不知道编译C++的任何东西,因为我在PC上测试过,所以TestSerAt仍然需要附加的文件/链接)

,因为用PyStUnter捆绑所有的东西可能是一个真正的痛苦,我执行了以下步骤:

  • 在我的脚本中导入了PyteSeract
  • 使用pyinstaller创建了Exe文件(没有在我的规范文件中定义任何内容)
  • 将Tesseract Ocr安装程序和my script.exe与外部安装程序创建者捆绑在一起 因此,最终用户将同时拥有tesseract安装程序和tesseract。
    使用外部安装程序,您可以自由使用path变量

    我一直尝试pyinstaller和ocrmypdf,但都没有成功。我最终使用了Nuitka。从一开始就工作:-)

    使用诸如:

    python -m nuitka --mingw64 --standalone --follow-imports  yourapp.py
    


    这里的某个地方已经有了类似的答案,只是再也找不到链接到它了。

    毕竟我让它与Pyinstaller一起运行

    首先,我需要创建2个钩子文件,如下所述:

    然后,在运行exe时,我仍然收到一个错误,缺少
    pikepdf.\u cpphelpers

    要解决这个问题,只需添加

    from pikepdf import _cpphelpers
    
    在python文件中,如下所述:

    我的Pyinstaller调用如下所示:

    pyinstaller --onefile appname.py --paths="C:\python\anaconda3\envs\appname\Lib\site-packages" --additional-hooks-dir="C:\coding\appname\Hooks"
    
    奥巴马的回答是正确的,但缺乏细节。以下说明已在64位Windows 10上测试。此处链接到官方编译说明:

    步骤:

  • 安装VisualStudio。确保安装以下各项:

    然后,单击各个组件

    然后,选择以下选项

    您可以添加所需的任何其他组件,但这些组件是将tesseract编译为静态二进制文件所需的组件。另外,如果您不使用英语,请单击语言包选项卡并添加英语语言包,这是vcpkg所需要的

  • 按照安装vcpkg的快速入门指南进行操作,可在此处找到:

  • 导航到复制vcpkg目录的位置,或将其添加到path。然后对64位运行:
    vcpkg安装tesseract:x64 windows static
    ,或对32位运行
    vcpkg安装tesseract:x86 windows static

  • 对于64位,转到
    放置tesseract目录\tesseract\u x64-windows-static\tools\tesseract
    的位置;对于32位,转到
    放置tesseract目录\tesseract\u x86-windows-static\tools\tesseract
    的位置

  • 要与pyinstaller一起使用,请使用
    --onefile

  • 从中选一个不,我的问题没有答案。Tesseract工作正常,路径正确。问题是将tesseract与我的程序一起推到一个可执行文件中。Tesseract不是我可以附加到pyinstaller的jpg或文本文档,我不能附加包含另一个程序的整个文件夹。根据您的问题:“我需要引用路径”?将正确的环境路径设置为
    teseract
    ,这不是
    pyinstaller
    部分。您必须在目标计算机上或在Python程序中执行此操作。我的意思是在pyinstaller中引用它。因此,要使用我的程序,用户必须单独安装tesseract,对吗?“用户必须单独安装tesseract,对吗?”:这是一种可能的解决方案。据我所知,
    pytesseract
    是一个围绕
    tesseract.exe/*.dll
    的包装器,希望
    *.exe/*.dll
    到位。我可以想象,
    pyinstaller
    可以捆绑所有二进制文件,但您必须设置环境变量,以便
    pytesseract
    能够找到并加载这些。如果您有问题,请告诉我。这是一个痛苦的想法,所以我很乐意帮助!我最终安装了vcpkg和tesseract static,但现在无法理解如何在代码中正确引用.exe和.traineddata。网站上的例子有点混乱。我的意思是,现在我们不再有tesseract.exe和traineddata,而是有一个单文件可执行脚本,所以我不能像pytesseract.pytesseract.tesseract\u cmd='E:\\tesseract OCR\\tesseract'那样执行,对吗?我们怎样才能正确地引用它呢