今天,分享一个博主做的小软件,能够实现实时姿态估计、目标检测,并录制音视频,效果如下:
最开始时,博主利用pytorch+pyqt
进行开发,使用pyinstaller
进行打包,由于包含的依赖包过多,生成的exe
文件达到了2.7G
,因此,果断采用onnxruntime
推理onnx
模型的方案。
踩坑记录
1.在打包过程中,博主发现如果python3.10
的版本在打包时会遇到onnxruntime
打包失败等一系列问题,因此博主使用的python
环境为3.8
,详细环境依赖如下:
Package Version
------------------------- ---------
altgraph 0.17.4
blinker 1.8.2
certifi 2025.6.15
charset-normalizer 3.4.2
click 8.1.8
colorama 0.4.6
coloredlogs 15.0.1
decorator 4.4.2
Flask 3.0.3
Flask-Cors 5.0.0
flatbuffers 25.2.10
humanfriendly 10.0
idna 3.10
imageio 2.35.1
imageio-ffmpeg 0.5.1
importlib_metadata 8.5.0
itsdangerous 2.2.0
Jinja2 3.1.6
MarkupSafe 2.1.5
moviepy 1.0.3
mpmath 1.3.0
numpy 1.24.4
onnxruntime 1.19.2
opencv-python 4.11.0.86
packaging 25.0
pefile 2023.2.7
pillow 10.4.0
pip 22.1.2
proglog 0.1.12
protobuf 5.29.5
PyAudio 0.2.14
pydub 0.25.1
pyinstaller 6.14.1
pyinstaller-hooks-contrib 2025.5
PyQt5 5.15.11
PyQt5-Qt5 5.15.2
PyQt5_sip 12.15.0
pyreadline3 3.5.4
pywin32-ctypes 0.2.3
requests 2.32.4
setuptools 70.3.0
some-package 0.1
sympy 1.13.3
tqdm 4.67.1
urllib3 2.2.3
websocket-client 1.8.0
websockets 13.1
Werkzeug 3.0.6
wheel 0.45.1
zipp 3.20.2
2.在将环境切换为3.8
后,基本便能够打包成功,但在运行exe
程序时,会报错:
缺少onnxruntime_providers_shared.dll依赖文件
此时,我们就需要在打包文件中添加了,找到我们打包时生成的spec
文件,然后在data
中添加进去所需要的依赖项(注意要根据自己的路径来配置),同时,还需要把我们的模型文件、图像文件也一并打包,如下:
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[('D:\softwares\Anconda\envs\qianren\Lib\site-packages\onnxruntime\capi\onnxruntime_providers_shared.dll','onnxruntime\\capi'),('models/*.onnx','models'),('uploads','uploads'),('images','images')],
hiddenimports=['onnxruntime'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='main',
)
完成这些后,运行打包命令:
pyinstaller main.spec
此时,基本就能够打包成功了。
生成的exe
文件就在dist
文件夹中。