You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Function人脸识别求助:DeepFace部署失败

问题描述

需要在Google Cloud Function中实现两张base64格式图片的人脸识别,判断是否为同一人。当前使用DeepFace+VGGFace模型,部署时遭遇兼容性问题,报错提示缺失libGL.so.1文件。

调试代码

from flask import jsonify
import base64
from PIL import Image
from io import BytesIO
from deepface import DeepFace


def hello_world(request):
    """Responds to any HTTP request.
    Args:
        request (flask.Request): HTTP request object.
    Returns:
        The response text or any set of values that can be turned into a
        Response object using
        `make_response`.
    """
    
    request_json = request.get_json()
    data = request.json
    if request.args and 'num1' in request.args:
        base64_string=request.args.get('num1')
    elif request_json and 'num1' in request_json:
        base64_string=request_json['num1']
    else:
        return "Invalid data"

    
    # convert base64 string to bytes
    img_data = base64.b64decode(base64_string)

    # create PIL image object from bytes
    img = Image.open(BytesIO(img_data))

    # save the image as a JPEG file
    img.save('/tmp/output.jpg', "JPEG")
    
    embedding_objs = DeepFace.represent(img_path = "/tmp/output.jpg")
    return embedding_objs[0]["facial_area"]['x']

报错信息

Deployment failure:
Function failed on loading user code. This is likely due to a bug in the user code. Error message: Traceback (most recent call last):
File "/layers/google.python.pip/pip/bin/functions-framework", line 8, in <module>
sys.exit(_cli())
File "/layers/google.python.pip/pip/lib/python3.10/site-packages/click/core.py", line 1130, in __call__
return self.main(*args, **kwargs)
File "/layers/google.python.pip/pip/lib/python3.10/site-packages/click/core.py", line 1055, in main
rv = self.invoke(ctx)
File "/layers/google.python.pip/pip/lib/python3.10/site-packages/click/core.py", line 1404, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/layers/google.python.pip/pip/lib/python3.10/site-packages/click/core.py", line 760, in invoke
return __callback(*args, **kwargs)
File "/layers/google.python.pip/pip/lib/python3.10/site-packages/functions_framework/_cli.py", line 37, in _cli
app = create_app(target, source, signature_type)
File "/layers/google.python.pip/pip/lib/python3.10/site-packages/functions_framework/__init__.py", line 288, in create_app
spec.loader.exec_module(source_module)
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/workspace/main.py", line 5, in <module>
from deepface import DeepFace
File "/layers/google.python.pip/pip/lib/python3.10/site-packages/deepface/DeepFace.py", line 13, in <module>
import cv2
File "/layers/google.python.pip/pip/lib/python3.10/site-packages/cv2/__init__.py", line 181, in <module>
bootstrap()
File "/layers/google.python.pip/pip/lib/python3.10/site-packages/cv2/__init__.py", line 153, in bootstrap
native_module = importlib.import_module("cv2")
File "/layers/google.python.runtime/python/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
. Please visit https://cloud.google.com/functions/docs/troubleshooting for in-depth troubleshooting documentation.

原因分析

libGL.so.1是OpenCV依赖的底层图形系统库,Google Cloud Function的Python运行时默认未预装此类库,而DeepFace依赖标准版OpenCV,导致加载失败。

解决方案与框架推荐

1. 修复当前DeepFace环境

如果想继续使用DeepFace,只需将依赖的opencv-python替换为无GUI版本的opencv-python-headless,它不需要图形系统支持,适合无服务器环境。

修改requirements.txt:

deepface
opencv-python-headless
pillow
flask

2. 推荐适合Google Cloud Function的人脸识别框架

Face Recognition

  • 优势:基于dlib的轻量封装,API简单易用,无需复杂配置;依赖预编译的dlib包,能在GCF环境正常运行;支持人脸检测、特征提取与对比。
  • 核心示例:
import base64
from PIL import Image
from io import BytesIO
import face_recognition

def hello_world(request):
    request_json = request.get_json()
    base64_str1 = request_json.get('img1')
    base64_str2 = request_json.get('img2')
    
    # 转换base64为图片
    def load_img(base64_str):
        img_data = base64.b64decode(base64_str)
        return face_recognition.load_image_file(BytesIO(img_data))
    
    img1 = load_img(base64_str1)
    img2 = load_img(base64_str2)
    
    # 提取人脸特征
    face_encodings1 = face_recognition.face_encodings(img1)
    face_encodings2 = face_recognition.face_encodings(img2)
    
    if not face_encodings1 or not face_encodings2:
        return "未检测到人脸"
    
    # 对比特征
    result = face_recognition.compare_faces([face_encodings1[0]], face_encodings2[0])[0]
    return {"is_same_person": result}

InsightFace(ONNX Runtime版本)

  • 优势:基于开源的人脸模型,精度高;使用ONNX Runtime运行,无需依赖完整OpenCV;支持轻量模型部署,适合无服务器环境。
  • 注意:需提前下载预训练的ONNX模型文件,部署时放入函数目录或从云存储加载。

Google Cloud Vision API

  • 优势:完全托管的云服务,无需自己部署模型;直接支持base64图片输入,内置人脸检测与特征对比功能;自动处理环境依赖,稳定性高。
  • 核心逻辑:调用Vision API的人脸检测接口,提取人脸特征向量后进行余弦相似度对比,或直接利用API的人脸匹配能力。

内容的提问来源于stack exchange,提问作者AbdullahHabib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:30:41