在MacOS中使用pyinstaller进行转换期间包含“ shape_predictor_68_face_landmarks.dat”的错误

时间:2019-02-18 20:29:07

标签: python macos pyinstaller dlib

我在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文件的binaries字段中,则会在转换过程中显示错误-

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解释器中运行良好,但是在转换期间会出现此问题。 如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我能够通过在规范文件中添加面部识别二进制文件来解决此问题,如下所示:

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帖子中的建议