Как исправить эту ошибку, когда я использую 'cnn_face_detection_model_v1' в качестве детектора? - PullRequest
0 голосов
/ 17 мая 2019

Я хочу использовать пакеты Python ---- «dlib» для обнаружения человеческих лиц на изображениях, когда я использую «Detector = dlib.get_frontal_face_detector ()» в качестве детектора, ошибки нет, и я могу получить изображение лица,Но когда я использую "detector = dlib.cnn_face_detection_model_v1" в качестве детектора, возникают некоторые ошибки.В обеих ситуациях предиктором является «shape_predictor_68_face_landmarks.dat».

Я использую DEBUG, чтобы найти, какой код вызывает ошибку, и я нахожу, когда запускаю код «shape = предиктор (frame, d)», естьошибка:

Traceback (most recent call last):
File "/home/cxd/pycharm-community-2019.1/helpers/pydev/pydevd.py", line 1741, in <module>
    main()
File "/home/cxd/pycharm-community-2019.1/helpers/pydev/pydevd.py", line 1735, in main
    globals = debugger.run(setup['file'], None, None, is_module)
File "/home/cxd/pycharm-community-2019.1/helpers/pydev/pydevd.py", line 1135, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
File "/home/cxd/PycharmProjects/ROI/videos.py", line 47, in get_frames_mouth
    shape = predictor(frame, d)
TypeError: __call__(): incompatible function arguments. The following argument types are supported:
1. (self: dlib.shape_predictor, image: array, box: dlib.rectangle) -> dlib.full_object_detection

Invoked with: <dlib.shape_predictor object at 0x7f17f3684ce0>, array([[[124, 106, 145],
    [124, 106, 145],
    [124, 106, 145],
    ...,
    [134, 116, 145],
    [134, 116, 145],
    [134, 116, 145]],

   [[124, 106, 145],
    [124, 106, 145],
    [124, 106, 145],
    ...,
    [134, 116, 145],
    [134, 116, 145],
    [134, 116, 145]],

   [[124, 106, 145],
    [124, 106, 145],
    [124, 106, 145],
    ...,
    [134, 115, 147],
    [134, 115, 147],
    [134, 115, 147]],

   ...,

   [[ 37,   0,   1],
    [ 37,   0,   1],
    [ 36,   0,   0],
    ...,
    [ 56,   0,  17],
    [ 55,   0,  17],
    [ 55,   0,  17]],

   [[ 37,   0,   0],
    [ 36,   0,   0],
    [ 36,   0,   0],
    ...,
    [ 55,   0,  16],
    [ 54,   0,  16],
    [ 54,   0,  16]],

   [[ 37,   0,   0],
    [ 36,   0,   0],
    [ 36,   0,   0],
    ...,
    [ 55,   0,  16],
    [ 54,   0,  16],
    [ 54,   0,  16]]], dtype=uint8), <dlib.mmod_rectangle object at 0x7f18250c7308>

Process finished with exit code 1

код:

detector = dlib.cnn_face_detection_model_v1("mmod_human_face_detector.dat")
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
dets = detector(frame, 1)  #frame is np.array
shape = None
for k, d in enumerate(dets):  
    shape = predictor(frame, d)

Я думаю, что результаты двух видов детекторов будут одинаковыми, может кто-нибудь помочь мне решить эту проблему?

...