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