属性错误:如果尝试用作 REST API,模块“face_recognition”没有属性“face_encodings”

问题描述 投票:0回答:1

我实现了一个简单的人脸识别解决方案。

输入

  • 参考图片
  • 相框匹配
    两者都以 Base64 编码

在我的识别函数中,我解码参考图像和帧以匹配如下

def decode_base64_image(base64_string):
    image_data = base64.b64decode(base64_string)
    image = Image.open(io.BytesIO(image_data))
    image_array = np.array(image)
    return image_array

def recognize_face(reference_image_base64, frame_to_match_base64):
    # Decode the reference image from base64
    reference_image = decode_base64_image(reference_image_base64)

    # Decode the frame to match from base64
    frame_to_match = decode_base64_image(frame_to_match_base64)

    known_face_encodings = face_recognition.face_encodings(reference_image)
    ...........

执行良好,没有任何问题。

尝试将代码扩展为API,并调用如下函数

# Perform face recognition on the frame
    face_data = recognize_face(reference_image_base64, frame_to_match_base64)

但是当我使用 Flask 执行 API 并调用我的测试脚本时,如下所示

# Load the reference image and encode it to base64
reference_image_path = 'FileName.jpg'
with open(reference_image_path, 'rb') as f:
    reference_image_bytes = f.read()
reference_image_base64 = base64.b64encode(reference_image_bytes).decode('utf-8')
..............

# Encode the frame to base64
    _, frame_to_match_bytes = cv2.imencode('.jpg', frame)
    frame_to_match_base64 = base64.b64encode(frame_to_match_bytes).decode('utf-8')

    # Prepare the request data
    data = {
        'reference_image': reference_image_base64,
        'frame_to_match': frame_to_match_base64
    }

    # Send the POST request to the API
    response = requests.post('http://localhost:5000/match_face', json=data)
    result = response.json().get('result')

API Flask 控制台抛出错误

known_face_encodings=face_recognition.face_encodings(reference_image)
AttributeError:模块“face_recognition”没有属性“face_encodings”

通过在两种情况(正常函数和 API)中添加以下行来确认,两种情况下的相同输出均为 1076

print(f"size of ref image is : {len(reference_image)}")

我在遵循程序或调用顺序时是否遗漏了任何内容? 有什么建议可以尝试吗?

开发环境 -Python 3.10.13 -cv2 4.9.0 -人脸识别1.3.0

尝试将Python中的face_recognition库作为函数 - 成功, 尝试了与 API 相同的代码并进行了一些修改 - 失败

python opencv face-recognition
1个回答
0
投票

您是否在 GPU 上运行人脸识别?在 GPU 中几乎需要 5-10 毫秒。

尝试使用 dlib==19.24 在 GPU 上运行面部识别,下面我分享 Dockerfile 在 GPU 上构建 dlib。构建 dlib 后,您可以使用它作为基础 docker 镜像,并且可以在此基础镜像上安装人脸识别。

我花了一年的时间来获得这一认可,很乐意提供帮助:)

FROM nvidia/cuda:12.0.0-cudnn8-devel-ubuntu22.04
# Set environment variables for GPU acceleration
ENV CUDA_HOME /usr/local/cuda
ENV LD_LIBRARY_PATH \ $LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64
ENV PATH $PATH:/usr/local/cuda/bin
# Install Python 3.10 and required dependencies
RUN apt-get update && apt-get install -y python3  python3-dev python3-pip
RUN apt install -y \
cmake \
build-essential \
libopenblas-dev \
libjpeg-dev \
libpng-dev \
libx11-dev \
libgtk-3-dev \
&& rm -rf /var/lib/apt/lists/*

# Install dlib and its dependencies
RUN pip3 install dlib==19.24.0

# Set the working directory
WORKDIR /app

# Copy your application code into the image
COPY . /app

# Run your application (replace "your_script.py" with your 
actual Python script)
CMD ["bash"]
© www.soinside.com 2019 - 2024. All rights reserved.