【问题标题】:Numpy: axis 1 is out of bounds for array of dimension 1Numpy:轴 1 超出维度 1 数组的范围
【发布时间】:2018-07-07 11:10:32
【问题描述】:
@shared_task()
def get_encodings_and_compare_with_friends(pk):
    photo = Photo.objects.get(pk=pk)
    persons = Person.objects.all()
    image = face_recognition.load_image_file(photo.image)
    encodings = face_recognition.face_encodings(image)
    for encoding in encodings:
        for person in persons:
            person_encoding=np.loads(person.face_encodings)
            if face_recognition.compare_faces(encoding,person_encoding):
                tag = Tags(photo= photo, tag = person.pk, is_user=True)
                tag.save()
    return

我正在尝试从存储为二进制 blob 的数据库中加载 face_encodings。然后将此编码和来自图像的编码与支持向量机进行比较,以发现它们是否相等。但是我收到了标题中提到的这个错误。

这是我正在使用的库https://github.com/ageitgey/face_recognition/

追溯

  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/django/views/generic/base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/rest_framework/views.py", line 494, in dispatch
    response = self.handle_exception(exc)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/rest_framework/views.py", line 454, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/rest_framework/views.py", line 491, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/rest_framework/generics.py", line 192, in post
    return self.create(request, *args, **kwargs)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/rest_framework/mixins.py", line 21, in create
    self.perform_create(serializer)
  File "/home/firefly/SourceCode/Inshare/gallery/views.py", line 21, in perform_create
    get_encodings_and_compare_with_friends(photo.pk)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/celery/local.py", line 191, in __call__
    return self._get_current_object()(*a, **kw)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/celery/app/task.py", line 380, in __call__
    return self.run(*args, **kwargs)
  File "/home/firefly/SourceCode/Inshare/gallery/tasks.py", line 29, in get_encodings_and_compare_with_friends
    if face_recognition.compare_faces(encoding,person_encoding):
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/face_recognition/api.py", line 203, in compare_faces
    return list(face_distance(known_face_encodings, face_encoding_to_check) <= tolerance)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/face_recognition/api.py", line 70, in face_distance
    return np.linalg.norm(face_encodings - face_to_compare, axis=1)
  File "/home/firefly/.local/share/virtualenvs/Inshare-0sncsKh-/lib/python3.5/site-packages/numpy/linalg/linalg.py", line 2287, in norm
    return sqrt(add.reduce(s, axis=axis, keepdims=keepdims))
numpy.core._internal.AxisError: axis 1 is out of bounds for array of dimension 1

【问题讨论】:

  • 错误追溯到 face_recognition.compare_faces 行
  • 如果您阅读compare_facesdocstring,第一个参数应该是面部编码的列表。看起来好像您正在传递单个编码。如果您在问题中包含整个回溯,将会很有帮助。
  • @MarkDickinson 刚刚添加了回溯
  • 我怀疑这是face_recognition 中的一个错误/缺失功能,它应该通过axis=-1

标签: python-3.x numpy multidimensional-array face-recognition


【解决方案1】:
face_recognition.compare_faces([encoding],person_encoding)

将编码作为列表解决问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2021-02-10
    • 2020-07-31
    • 2022-07-03
    • 2020-10-30
    相关资源
    最近更新 更多