OpenCV与独立的python可执行文件(py2exe/pyinstaller)

问题描述:

我有一个python程序,它使用OpenCV从视频文件中获取帧进行处理。然后我使用py2exe创建一个独立的可执行文件(也试过pyinstaller并得到相同的错误)。我的电脑和目标计算机都是Windows 7,但目标计算机没有安装python。我使用OpenCV从视频文件中读取帧频和个别图像。OpenCV与独立的python可执行文件(py2exe/pyinstaller)

问题:当我在目标计算机上运行可执行文件时,帧速率返回为0.0,我无法读取帧。

如果在目标机器上安装了python,那么可执行文件按预期运行,否则会产生此错误。因此,似乎可执行文件中缺少某些内容,但创建可执行文件时我没有发现错误,以指示可能丢失的内容。

其他谁报告类似的问题通常没有包括numpy依赖(并得到一个错误表明这一点),但我已经包括numpy。我也尝试过包括整个PyQt4模块,因为它被列为OpenCV的python xy站点的依赖项(我已经为代码的其他部分提供了部分PyQt4),这也不能解决问题。

+0

py2exe是不完美的,所以经常会错过一些图书馆或dll,pyd等需要。最有可能你缺少opencv_highgui249.dll和opencv_ffmpeg249.dll等。我会使用py2exe没有启用单个可执行文件选项。并且,开始手动复制您的应用可能需要的文件。识别它们后,修改setup.py以使py2exe自动包含它们。 – otterb

+0

你能显示你的setup.py吗?目标机器不应该安装Python相关的任何东西,py2exe将包含需要的东西,有时它也需要一些帮助。 – Werner

+0

@otterb。我将我的可执行文件中的dll文件与Python27/DLL文件夹中的opencv _ * .dll文件进行了比较。我的可执行文件只包含14个(我已经有opencv_highgui249.dll)。我试着添加了6个缺失的并修复了这个错误。如果我只添加open_cvffmpeg249.dll,它也修复了这个错误,但我不确定是否不包括其他错误会导致我还没有确定的错误。 感谢您的回复。也许有人明白“钩子”是如何工作的,可以提交一个给pyinstaller解决这个问题? –

我想我会继续为此发布一个答案,但解决方案是由@otterb在问题的评论中提供的。我在这里粘贴文本:

“py2exe是不完美的,所以经常会错过一些库或DLL,PYD等需要最有可能你缺少opencv_highgui249.dl L和opencv_ffmpeg249.dll等我会用py2exe用。没有启用单个可执行文件选项,并且启动手动复制您的应用程序可能需要的文件,在识别出它们之后,修改setup.py以使py2exe自动包含它们。

但是我会注意到,我使用pyinstaller而不是py2exe,因为我在构建时遇到了更少的问题。我仍然必须手动复制opencv dll文件。在Windows 7中,它们位于此处:“C:\ Python27 \ DLLs”,它们需要复制到分发文件夹中,以便它们与其他dll位于相同的路径随发行版一起提供的文件。

尝试使用pyinstaller,使用pip下载:

pip install pyinstaller 

,如果你不知道如何安装点子,尝试下载蟒蛇2.7.9或以上,其中有内置的点子,但不要忘了加环境可变因素蟒蛇路径,这个过程在这篇文章中提到:

How to run Pip commands from CMD

安装pyinstaller后,选择你的项目的主要文件,并运行此命令

pyinstaller yourprogram.py 

它会创建一个应用程序文件夹命名文件名,并最终确保numpy的和OpenCV是在C文件夹python27的lib->站点包文件夹中运行该命令

希望它有助于!