pyinstaller 打包yolov5和deepsort项目打包部,win10平台

文章目录

    • 1.项目用到的特征(特点)
    • 2.前期准备
    • 3.检查
    • 4.打包与试运行
    • 5.报错(合集)本人遇到过的
    • 6.打包后的大小

非保姆级教程,打包之前没想到自己能成功,,,,,

1.项目用到的特征(特点)

yolov5, deepsort, pytorch(torch,torchvision),多进程,TCP/IP通信,传输视频流

2.前期准备

  • 新建一个虚拟环境:
conda create -n pack python=3.8   **(建议3.7以上**)

activate pack

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt (自己需要的包)
  • 安装pytorch
pip3 install torchvision==0.10.0+cu102 -f https://download.pytorch.org/whl/cu102/torch_stable.html

注:
pytorch版本不要太高,否则可能报错,我安装的是torchvision 0.10.0+cu102,有个小技巧是,如果需要安装torchvision,就不要先装torch,否则,装完torch以后,你可能找不到torchvision对应的版本,但是你先装torchvision,他会自己安装对应的torch版本,我这里安装的是:

torch 1.9.0+cu102,torchvision 0.10.0+cu102

cuda的版本也不需要太高,10.2就不错

  • 安装pyinstaller

直接pip 安装后,用pyinstaller 打包会到报找不到一些库的问题,我去github上找了一圈以后,发现外网的解决方法是,下载维护的新版pyinstaller

pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip

如果下载报错,可以先浏览器下载压缩包,然后解压,anaconda prompt命令行cd 到解压安装包的setup.py路径下,使用命令:
python setup.py install 直接安装,这样安装的pyinstalle,打包抓取报的错误少一些,亲测很有效,大部分的文件都能抓取到

3.检查

首先确保项目在新建的虚拟环境下能够直接运行,项目封装好(写成类,做好API接口),做一个main.py函数作为入口函数

使用了多进程的项目,一定要在main.py 的if name == ‘main’:下面加上

multiprocessing.freeze_support()

否则打包好以后,直接运行,会在后台运行30+main.exe, cup拉满,本人深受其害,电脑直接黑屏,,,,

4.打包与试运行

直接打包:
pyinstaller main.py

会生成build和dist两个文件夹,main.exe在dist下

选择用 “命令提示符" 运行,开始-Windows系统-命令提示符,右键管理员运行(一定)

然后使用 cd 命令切换到 main.exe文件目录下,直接输入 main.exe。

5.报错(合集)本人遇到过的

  • 1)找不到必要的文件

对于yolo 一般需要导入.pt 和.yaml 文件,路径是根据打包前代码里的相对路径,因此需要在main.exe同级文件夹下,创建一个相同文件目录的文件夹,并将需要的文件放入,deepsor需要的文件同理, 不要使用绝对路径

  • 2)一些模块无法导入

一般是因为直接将包含yolo模块的文件直接嵌入项目,然后内部的models文件夹和utils文件夹里的from,import 报错
解决方法:从main.py一级文件夹开始写from ,而不要从含yolo模块的文件开始写,从顶层到.py的位置,这样就能找到文件了。

  • 3)运行后, cannot import name ‘pywrap_tensorflow’ from
    ‘tensorflow_core.python’

这个一般是因为tensorflow版本的问题,我换成torch 1.9.0+cu102,torchvision 0.10.0+cu102以后就没有问题了

  • 4)pyinstaller打包时lib not found的问题:lib not found: torch_python.dll
    dependency of C:\Anaconda3\envs\pac k\lib\site-packages\torch_C.cp3

更换pyinstaller,不要直接pip install pyinstaller 的而是pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip 或者set up的方法(上面),这样很多找不到包的错误都会减少不少。

也可以看看网上适当添加 –hidden-import
因为有些是应用需要的包,但是没有被打包进来,这里的错误是最多的,因为一般是第三方包隐式调用其他包,然后打包出来的程序显示Fate Error不能运行

  • 5)运行时,pytorch torch.load ModuleNotFoundError No module named ‘models‘

说是没有找到models 模型,方法:
改写函数:
(1)yolo模块的detect.py

*载入设备:

源码:
device = select_device(self.device)

改成:
cuda = torch.cuda.is_available()
device = torch.device('cuda:0' if cuda else 'cpu')

这样就去掉了select_device函数的使用

(2)yolo模块的detect.py

*载入模型:

源码:
 model = attempt_load(self.yolo_weights, map_location=device)  # load FP32 model

改成:
model = torch.load('yolov5_deepsort_master/yolov5/best.pt', map_location=device)["model"].float().eval()  # load FP32 model

这样就绕过了attempt_load函数,好处是直接给出模型相对位置,而不是用attempt_load函数找,pytorch torch.load ModuleNotFoundError No module named ‘models‘的错误就能解决,记得编译完以后,在dist文件夹下新建一个’yolov5_deepsort_master/yolov5/best.pt’的文件夹

6.打包后的大小

由于包含torch依赖文件,因此我的这个项目的dist大约在3.44G,是正常的,如果不包含torch的项目,那就小的多

你可能感兴趣的:(python,深度学习,计算机视觉,pycharm)