【解决方法】使用pyinstaller打包opencv程序为exe文件打不开
Traceback (most recent call last):
File “xx.py”, line 13, in
cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’
是学习opencv人脸识别时出现的错误,在网上找了很久都没有解决,最后分享一下我的解决方法希望能帮助有需要的人。
我的pip list
Package Version
altgraph 0.17.3
numpy 1.24.2
opencv-python 4.7.0.68
pefile 2023.2.7
pip 23.0
pyinstaller 5.8.0
pyinstaller-hooks-contrib 2022.15
pywin32-ctypes 0.2.0
setuptools 65.5.0
级联分类器这里请大家使用相对路径即cv2.data.haarcascades+''的形式
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades+‘haarcascade_eye.xml’)
smile_cascade = cv2.CascadeClassifier(cv2.data.haarcascades+‘haarcascade_smile.xml’)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades+‘haarcascade_frontalface_default.xml’)
使用pyinstaller -D -w 文件名.py 命令打包后会生成dist和build文件夹
打开dist\文件名 文件夹中的 文件名.exe
出现报错
注意到和exe文件同目录下的,CV2文件夹下只有一个__init__.py文件
将C:\Users\用户名\AppData\Local\Programs\Python\Python310\Lib\site-packages\cv2\data目录下除 init.py 文件外的所有文件复制到打包程序的CV2文件夹下,exe文件即可成功运行。
总结一下大概就是打包的时候并没有把opencv(cv2)库的所有所需文件保存完整需要手动保存。pyinstaller背大锅