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
相关产品推荐
相关产品推荐

