在 macos 中使用 pyinstaller 进行转换时包含“shape_predictor_68_face_landmarks.dat”的错误

Posted

技术标签:

【中文标题】在 macos 中使用 pyinstaller 进行转换时包含“shape_predictor_68_face_landmarks.dat”的错误【英文标题】:error in including "shape_predictor_68_face_landmarks.dat" during conversion using pyinstaller in macos 【发布时间】:2019-07-12 06:53:48 【问题描述】:

我在python中有一个使用dlib模块的代码,代码中有两行

predictor_path = "./shape_predictor_68_face_landmarks.dat"
predictor = dlib.shape_predictor(predictor_path)

整个代码在 python 解释器中运行良好。 当我尝试使用 pyinstaller 将其转换为可执行文件时,我将“shape_predictor_68_face_landmarks.dat”文件名放在 .spec 文件的数据字段中 即

a = Analysis(...
             binaries=[],
             datas=[("./shape_predictor_68_face_landmarks.dat", ".")]
             ...)

该过程完成,没有任何错误。 .dat 文件也包含在该文件夹中。但是当我运行可执行文件时,它显示错误

RuntimeError: Unable to open ./shape_predictor_68_face_landmarks.dat
[928] Failed to execute script new_run
...

如果我将该 .dat 文件放在 .spec 文件的二进制字段中,它会在转换期间显示错误 -

ValueError: Unknown Mach-O header: 0x01018188 in <_io.BufferedReader 
name='/Users/mac/Library/Application 
Support/pyinstaller/bincache00_py37_64bit/shape_predictor_68_face_landmarks.dat'>

我使用的是 macOS,而 python 3.6 整个代码在 python 解释器中运行良好,但是在转换过程中出现了这个问题。 如何解决这个问题?

【问题讨论】:

您好我在win10中遇到了同样的问题,有什么变化吗?? 【参考方案1】:

我可以通过在规范文件中添加人脸识别二进制文件来解决这个问题,如下所示:

face_models = [
('venv\\Lib\\site-packages\\face_recognition_models\\models\\dlib_face_recognition_resnet_model_v1.dat', './face_recognition_models/models'),
('venv\\Lib\\site-packages\\face_recognition_models\\models\\mmod_human_face_detector.dat', './face_recognition_models/models'),
('venv\\Lib\\site-packages\\face_recognition_models\\models\\shape_predictor_5_face_landmarks.dat', './face_recognition_models/models'),
('venv\\Lib\\site-packages\\face_recognition_models\\models\\shape_predictor_68_face_landmarks.dat', './face_recognition_models/models'),
]


a = Analysis(['fac-rec.py'],
             pathex=['C:\\Users\\Dell\\source\\python\\face-rec'],
             binaries=face_models,
             datas=[],

按照this 帖子中的建议

【讨论】:

以上是关于在 macos 中使用 pyinstaller 进行转换时包含“shape_predictor_68_face_landmarks.dat”的错误的主要内容,如果未能解决你的问题,请参考以下文章

在 MacOS Mojave 上从 PyInstaller 运行应用程序后如何修复 msgcat::mc 错误?

pyinstaller 找不到自定义导入的模块

解决pyinstaller打包过程中外部资源无法加载的问题 ...

Python3快速入门(十八)——PyInstaller打包发布

PyQt5快速入门PyQt5扩展

Python - 使用Pyinstaller将Python代码生成可执行文件